OmniAICreator/Qiita-1.07M huggingface dataset:
KotlinでDIを使う (koin)

# 概要

Kotlinを使うことがあったので、KotlinでDependency Injection (DI)を扱うライブラリである[koin](https://github.com/InsertKoinIO/koin)を試してみました！

- Kotlin: 1.3.61
- Gradle: 6.1

# 使い方

早速使い方です。
まずは `build.gradle` にライブラリを追加します。

```gradle
implementation "org.koin:koin-core:$koin_version"
implementation "org.koin:koin-core-ext:$koin_version"
implementation "org.koin:koin-java:$koin_version"
testImplementation "org.koin:koin-test:$koin_version"
```

## module

koinでは `module` というものを定義する必要があります。
moduleの中に自分で定義したインスタンスを定義しておくことで、実行時に定義したインスタンスをDIすることが出来ます。

```kotlin
var module: Module = module {
  // シングルトンとして定義
  single { SomeClass() }
  single { SomeClass() as SomeInterface }

  // 毎回生成する
  factory { SomeClass() }

  // 引数を渡す
  factory { (arg: Any) -> SomeClass(arg = arg) }
}
```

https://start.insert-koin.io/#/getting-started/starting-koin?id=startkoin

## Injection

まずは `startKoin` を呼んで、DIコンテナをスタートさせます。
ちなみに `modules` を使えば、複数のmoduleを利用することもできます。

```kotlin
fun main(args: Array<String>) {
  startKoin {
    modules(module)
    
    // 複数使う場合
    // modules(module1, module2)
  }

  // なにか処理をする
}
```

定義したクラスを利用する場合は、以下のようにします。
これだけで簡単にDIを使うことができました。

```kotlin
class SomeClass2 {
  val some: SomeClass by inject()
}
```

# おまけ

テストのときにもKoinを利用します。 (Spekを利用した場合です)
ポイントはテストケース(グループ)終了時に `stopKoin()` を呼び出すことです。
呼び出さないまま次のテストに進んでしまうと、すでにKoinが開始されていますと怒られてしまいます。

```kotlin
object SomeClassTest : Spek({
  beforeGroup {
    startKoin {
      modules(testModule)
    }
  }

  afterGroup {
    stopKoin()
  }
  
  // ...
}
```

# おわりに

よきKotlinライフを！
久しぶりにKotlin触ったけど、やっぱ可愛いです。
次はServer Side Swiftやりたい。
JavaScript: 日付や時刻を表示してみる

時間を表示する。

```js

'use strict';

function myTime() {
    console.log(new Date()); // 日付と時間を出力。
}

setTimeout(myTime, 1000); //  1000ミリ秒=1秒後に関数を実行する。「myTime」の後にカッコをつけると返り値を取ることになるので、カッコをつけてはいけない。これがないと表示されない。
```
Reactで複数枚の画像を扱う時のメモ

# はじめに

今回は、React での複数枚画像の扱い方をメモです。

## 完成見本

今回作成する見本は、こんな感じのものです。

<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="js,result" data-user="oq-yuki-po" data-slug-hash="gObVOPR" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="image uplode">
  <span>See the Pen <a href="https://codepen.io/oq-yuki-po/pen/gObVOPR">
  image uplode</a> by oq-Yuki-po (<a href="https://codepen.io/oq-yuki-po">@oq-yuki-po</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## ソースコード

コンポーネントは 2 つで成り立っています。

`ImageList` : 画像のリストを保持するコンポーネント
`Image` : 画像を保持するコンポーネント

Image は img タグを使用して、画像を表示しているのみです。

```jsx:Imageコンポーネント
import React, { Component } from "react";

export default class Image extends Component {
  render() {
    return (
      <React.Fragment>
        <img
          src={this.props.file}
          alt={this.props.name}
          className="image"
        ></img>
      </React.Fragment>
    );
  }
}
```

```jsx:ImageListコンポーネント
import React, { Component } from "react";
import Image from "./Image";

// inputタグで受け取った画像をbase64形式に変換するための関数です。
function getBase64(file, cb) {
  let reader = new FileReader();
  reader.readAsDataURL(file);
  reader.onload = function() {
    cb(reader.result);
  };
  reader.onerror = function(error) {
    console.log("Error: ", error);
  };
}

export default class ImageList extends Component {
  constructor(props) {
    super(props);

    this.state = {
      ImageId: 1,
      SelectedImageList: []
    };
    this.handleChangeFile = this.handleChangeFile.bind(this);
  }

  handleChangeFile(e) {
    let files = e.target.files;
    for (let i = 0; i < files.length; i++) {
      // getBase64()は非同期なので、結果を取得したら
      // Imageコンポーネントを作成して追加していく
      getBase64(files[i], result => {
        let NewSelectedImageList = this.state.SelectedImageList;
        NewSelectedImageList.push(
          <Image
            key={this.state.ImageId}
            id={this.state.ImageId}
            name={files[i].name}
            file={result}
          />
        );
        this.setState({ SelectedImageList: NewSelectedImageList });
        this.setState({ ImageId: this.state.ImageId + 1 });
      });
    }
  }
  render() {
    return (
      <section>
        <h3>Multiple file selection Sample</h3>
        <label htmlFor={"input-label"} className="label">
          <span className="name">Add Images</span>
          <input
            id={"input-label"}
            type="file"
            ref="file"
            multiple="multiple"
            style={{ visibility: "hidden" }}
            onChange={this.handleChangeFile}
          />
        </label>
        <div className="full-screen-list">{this.state.SelectedImageList}</div>
      </section>
    );
  }
}
```

## まとめ
Reactでの複数枚の画像が扱える様になりました。
これで、外部のAPIに画像をバシバシ送信できますね。
ピカチューバトルを作った


# はじめに
https://naughty-davinci-839d5c.netlify.com/

ブラウザ上でコードを書いてRPGの戦闘みたいなことができるやつを作った。

<img width="1435" alt="スクリーンショット 2020-02-01 22.50.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131625/f917a19c-2826-65da-8898-b143b24d9013.png">

これに触発されて作ってみた。（コードもすごい参考にさせていただきました）
https://github.com/benishouga/sourcer

# アーキテクチャ
react、redux、redux saga、typescriptを使った静的なページ。
エディタにはreact-monaco-editor、アニメーションにreact-springを利用。

# 設計
クラス図はこんなイメージ。

![ピカチューバトルUML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131625/c5fc4e4d-d059-e0bb-49c9-d74464b8e616.png)

ブラウザ上に書いたコードはScriptLoaderで読み込まれる。
書いたコードはControllerにコマンドとして蓄積される。
実際の行動の実行はControllerManagerから行う。各行動の優先順位とかはControllerManagerでハンドリングしている。
ターン終了時にはControllerに蓄積されたコマンドはリセットされる。
行動を行うとHPやAPの増減が行われる。それと同時にDumpに行動履歴が蓄積される。Dumpに溜め込んだ行動履歴はUI上に表示するメッセージに利用する。
プレイヤーのターン、敵のターンが終わるたびにFieldのcheckFinishが実行されバトルの勝利、敗北判定がされる。
条件付き正規分布の導出-その2-

#　1. はじめに
[以前紹介した多変量正規分布の条件付き分布の導出法](https://qiita.com/m1t0/items/12b58f3583eab6e1e05c)で，別のやり方を見つけたので，備忘録がわりに書きます．こっちは最初の発想をのみこめれば，あとの展開はとても平易です．

# 2. 導出

```math
{\bf x}:=
\begin{pmatrix}
a\\
b
\end{pmatrix}
\sim N_{p+q}
\begin{pmatrix}
\begin{pmatrix}
\mu_a\\
\mu_b
\end{pmatrix},
\begin{pmatrix}
\Sigma_{aa}, &\Sigma_{ab}\\
\Sigma_{ba}, &\Sigma_{bb}
\end{pmatrix}
\end{pmatrix}
```
のように，$(p+q)$次元確率変数ベクトル${\bf x}$が，$p$次元確率変数ベクトル$a$と$q$次元確率変数ベクトル$b$に分割可能であるとします．以下，必要となる逆行列の存在は仮定します．この時，$b$を条件づけた時の$a$の分布，つまり，$a|b$の分布は，
$$a|b \sim N_p(\mu_a + \Sigma_{ab}\Sigma_{bb}^{-1}(b-\mu_b), \Sigma_{aa} -\Sigma_{ab}\Sigma_{bb}^{-1}\Sigma_{ba})$$
となります．今回は，これを[以前紹介した方法](https://qiita.com/m1t0/items/12b58f3583eab6e1e05c)と別の方法で導出します．
まず，
$$z := a - \Sigma_{ab}\Sigma_{bb}^{-1}b$$
なるベクトルを定義します．この時，$z$と$b$の同時分布は，

```math
\begin{pmatrix}
z\\
b
\end{pmatrix}
=
\begin{pmatrix}
I_p, &-\Sigma_{ab}\Sigma_{bb}^{-1}\\
O_{qp}, &I_q
\end{pmatrix}
\begin{pmatrix}
a\\
b
\end{pmatrix}
```
のように，元々の$(a,b)^t$の同時分布の線形変換として得られます．但し，ここで，$O_{qp}$は$q\times p$のゼロ行列を表します．
正規分布に従う確率変数ベクトルの線形変換によって得られる確率変数ベクトルは，変わらず正規分布に従うため，$(z,b)^t$も正規分布に従います．ここで，$z$の期待値は，$E[z] = E[a] - \Sigma_{ab}\Sigma_{bb}^{-1}E[b] = \mu_a - \Sigma_{ab}\Sigma_{bb}^{-1}\mu_b$であり，$(z,b)^t$の共分散行列は，

```math
\begin{align*}
V[(z,b)^t] &= V\left(\begin{pmatrix}
I_p, &-\Sigma_{ab}\Sigma_{bb}^{-1}\\
O_{qp}, &I_q
\end{pmatrix}
\begin{pmatrix}
a\\
b
\end{pmatrix}\right)\\
&=\begin{pmatrix}
I_p, &-\Sigma_{ab}\Sigma_{bb}^{-1}\\
O_{qp}, &I_q
\end{pmatrix}V((a,b)^t)\begin{pmatrix}
I_p, &O_{qp}\\
-\Sigma_{bb}^{-1}\Sigma_{ba}, &I_q
\end{pmatrix}\\
&= 
\begin{pmatrix}
I_p, &-\Sigma_{ab}\Sigma_{bb}^{-1}\\
O_{qp}, &I_q
\end{pmatrix}
\begin{pmatrix}
\Sigma_{aa}, &\Sigma_{ab}\\
\Sigma_{ba}, &\Sigma_{bb}
\end{pmatrix}
\begin{pmatrix}
I_p, &O_{qp}\\
-\Sigma_{bb}^{-1}\Sigma_{ba}, &I_q
\end{pmatrix}\\
&=\begin{pmatrix}
\Sigma_{aa} - \Sigma_{ab}\Sigma_{bb}^{-1}\Sigma_{ba}, & O_{pq}\\
\Sigma_{ba}, & \Sigma_{bb}
\end{pmatrix}
\begin{pmatrix}
I_p, &O_{qp}\\
-\Sigma_{bb}^{-1}\Sigma_{ba}, &I_q
\end{pmatrix}\\
&=\begin{pmatrix}
\Sigma_{aa} - \Sigma_{ab}\Sigma_{bb}^{-1}\Sigma_{ba}, &O_{pq}\\
O_{qp}, &\Sigma_{bb}
\end{pmatrix}
\end{align*}
```
となります．このことから，$z,b$は互いに独立であることがわかります．よって，$z|b$の条件付き分布と$z$の周辺分布は一致します．つまり，
$$z|b\sim N_p(\mu_a - \Sigma_{ab}\Sigma_{bb}^{-1}\mu_b, \Sigma_{aa} - \Sigma_{ab}\Sigma_{bb}^{-1}\Sigma_{ba})$$
となります．ここで，$a = z + \Sigma_{ab}\Sigma_{bb}^{-1}b$であることを思い出すと，期待値の線形性と分散の定数(今回は定数ベクトル)を加減することに影響を受けない性質，つまり，

```math
\begin{align*}
E[a] &= E[z + \Sigma_{ab}\Sigma_{bb}^{-1}b] = E[z] + \Sigma_{ab}\Sigma_{bb}^{-1}b = \mu_a - \Sigma_{ab}\Sigma_{bb}^{-1}\mu_b + \Sigma_{ab}\Sigma_{bb}^{-1}b\\
V[a] &= V[z + \Sigma_{ab}\Sigma_{bb}^{-1}b] = V[z] = \Sigma_{aa} - \Sigma_{ab}\Sigma_{bb}^{-1}\Sigma_{ba}
\end{align*}
```
から，$a|b$の分布は，
$$N_p(\mu_a + \Sigma_{ab}\Sigma_{bb}^{-1}(b-\mu_b), \Sigma_{aa} - \Sigma_{ab}\Sigma_{bb}^{-1}\Sigma_{ba})$$
となります．これで導出完了です！
個人的には，こちらの導出の方が簡単かなぁと思います(zの導入を除けば)．
#参考文献

* Hogg, McKean, Craig(2013). *Introduction to Mathematical Statistics 7th edition*, Pearson Education, Inc.

前提知識をそこまで必要としないので(その分分厚いですが)，おすすめです．文章も読みやすく，例も多いので，イメージを膨らませやすいです．
意図的にfloatを利用する

プログラミングを学び始めた頃、横並びにするプロパティとしてfloatを学びました。
実際にコードを書くとビューがよくわからなくなった。
こんな経験ありません？僕は経験しました。
そこでfloatに対する苦手意識みたいなのがつき「float使うならflexboxでしょ」みたいな感じでfloatを使ってきませんでした。
今回、ポートフォリオサイトを使う際に意図的に使う機会がありfloatに対して苦手意識がなくなったのでfloatが苦手な方の参考になればと思います。

# 結論
##浮かせたい要素に　```float: left``` を当てる

僕は横並びのプロパティよりこっちの方がわかりやすい。
floatって書いてるから気付けよみたいな感じですが、、
実際に見た方がわかりやすいですね

### こんな感じの↓
<img width="717" alt="float.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524516/96fc82f5-757a-43c2-7ccd-86f1df7508a8.png">

##下の要素を少し見せることでスクロールさせることを意識させるような感じ

###　実際のコード

```html

  <div class="red"></div>
  <div class="under-red"></div>
  <div class="blue"></div>
  <div class="under-blue"></div>
  <div class="green"></div>
```

```css
.red{
  width: 50vw;
  height: 33vh;
  background-color: red;
  border-bottom-left-radius: 30% 10%;
  border-bottom-right-radius: 30% 10%;
  float: left;
}
.under-red{
  width: 50vw;
  height: 33vh;
  background-color: blue;
}

.blue{
  width: 50vw;
  height: 33vh;
  background-color: blue;
  border-bottom-left-radius: 30% 10%;
  border-bottom-right-radius: 30% 10%;
  float: left;
}

.under-blue{
  width: 50vw;
  height: 33vh;
  background-color: green;
}

.green{
  width: 50vw;
  height: 33vh;
  background-color: green;
}
```

## 今回の使い方
1.まず赤、青、緑の箱を用意して赤、青の下の角を丸める
2.下にいれる箱を上の箱と同じサイズで用意する（今回であればunder-redをunder-blue)
3. 浮かせたい要素に```float: left```をあてる

## まとめ
昔によくわからなくて苦手意識がついても時間を置いて振り返ることで意外とわかったりするので今わからなくても大丈夫！

floatとflexboxを上手に使いこなせるようになりたい
assocとftypeをPowerShellで動かすには

## 実現したいこと

* PoweShellでassocコマンドとftypeコマンドを実行したい。
* しかしながら、下記のようなエラーが出力され動作しない。

<img width="704" alt="hoge001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49795/0e66ef77-2174-0e91-dc15-87b02f5075d7.png">

* cmd.exeでは対応しているが、PowerShellでは対応していない。

## 実行コマンド

```
cmd /c assoc 
```

もしくは

```
 cmd /c ftype
```

## 補足

* 情報源先には、コマンド名と同名のfunctionを設定し、引数を与えることでどうようのインタフェースを使えるようにする方法も紹介されている。

## 情報源

* https://tutorialmore.com/questions-150504.htm
AWS Solution Architect Associate に1ヶ月で受かった話(2020.2月まとめ)

こんにちは。

##### みなさま新年度の目標にAWSの資格を取ろうと掲げた方もいらっしゃるのではないでしょうか？

今回は私が昨年に実施したおすすめの勉強法を紹介します。

最近では多数の本が出版され盛り上がりを見せているAWSのSolution Architect Associate試験ですが、逆に本が増えすぎてどの本で学習したらいいのだろうと迷うことがあると思う方がいると思いますのでこの本をやれば大丈夫！ということもまとめようと思います。

その他試験に興味がおありの方はこちら参考記事でSysopsとDeveloperの取得法も紹介しています。
よろしければ合わせてお読みください。

参考記事:
https://qiita.com/Kiyo2273/items/0270d0ab3289ec3c5ff0
https://qiita.com/Kiyo2273/items/a6640b395c8971412d93
https://qiita.com/Kiyo2273/items/0cd4c5bbea83eac47eaf


ちなみに私は改定後に受験しましたが、実際の試験では9割近く取得して合格しました。
その証拠です笑。
準備期間は1ヶ月。AWS歴はこの受験時3ヶ月とかでしょうか。

<img width="1082" alt="スクリーンショット 2020-02-01 19.55.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424626/40423fc7-455a-4941-b783-40656c53463c.png">


#### またこの試験結果を見る限り、今年の3月22日にこの試験は終わり新試験にまた移行すると思われまたさらに難しくなることが想定されるため早めの受験をお勧めします。。


# AWS Solution Architect Associate試験とは

AWSの資格では、中級程度の扱いを受けている試験でAWSでのWell-Architectやベストプラクティスに則ってシステム構築ができているかを試される試験です。

難易度としてはそんなに難しくありません。
合格ラインも70%とかなので比較的受かりやすい試験と言えるでしょう。
試験ガイドをしっかり読んで要点を学習することが大切です。
試験ガイド：https://aws.amazon.com/jp/certification/?nc2=h_ql_le_tc_c

# 試験対策に利用した参考書

私が試験対策に利用した参考書を紹介します。
現在たくさん参考書が出ていますが、Solution Architect Associateに関しては下記の2冊を完璧にすればまず落ちることはないと言い切れます！！
(※趣味で現在販売しているaws資格本の半分以上は読んでいるので、自信を持ってお勧めします)

1冊目はご存知の方も多い、そう黒本です！
こちらを私は7周くらい読みこみました。
またPDFダウンロードで1回分模試がついているのも非常にいいところです。
割と本番の内容とも近めでした。
#### ＜徹底攻略 AWS認定 ソリューションアーキテクト – アソシエイト教科書 徹底攻略シリーズ＞
https://www.amazon.co.jp/dp/B07M7S9GDL/ref=cm_sw_r_tw_dp_U_x_ZDxnEbRV8SV

2冊目は白本と呼べばいいんでしょうか。
こちらは試験合格後に出会ったんですが、基本事項が非常にわかりやすくまとめられていて試験を始めて受ける方に非常にお勧めです。
この本も7回くらい読み込みました。
####＜最短突破　AWS認定ソリューションアーキテクト　アソシエイト　合格教本   村主 壮悟＞
https://www.amazon.co.jp/dp/B07NXTK26V/ref=cm_sw_r_tw_dp_U_x_aJxnEbJJH1E5X


基本の試験知識としては、こちらの２つをしっかり学習しておけば大丈夫でしょう。


# 試験対策に利用した問題集

こちらは最近非常に充実してきたので、上記で出てきた2冊の本の巻末についている模試をやれば割と十分だとも思いますが物足りないという方は言わずとしれたAWS WEB問題集がSolution Architect試験にはお勧めです。 そのほかの試験には正直おすすめできませんが。。

＜AWS WEB問題集＞
https://aws.koiwaclub.com

# 安心して合格するためには。。

私はいつもそうしているんですが模試としてでているものはすべて95％以上取れるまで繰り返し解き、自信を持って望めるように期限を決めて受験します。

期限を決めないとだらだら先延ばしになってしまいますが、不安なまま受けた場合運で受かることはあっても実力や知識には実際なっていないでしょう。

やれることはやったと思えるくらい学習できそうな期限を決めてそれに向けて努力すればきっと受かる試験だと思います。 ( ベンダー試験は1ヶ月とか3ヶ月とかでやり切るのががおすすめです。)

そういう私も逃げられないようにここで宣言したいです。

3月末から4月上旬までにSolution Architect Professional試験を受かる状態に持っていき、受験します！！！

結果はまた後日まとめると思いますが、3万円がかかっているためかなり必死に頑張ろうと思います。

よかったらみなさまも一緒に頑張って挑戦していい一年にしましょう！！


PS. 日々学んでいることや思うことを個人ブログでもアウトプットしています。資格の受験情報なども先にそちらにまとめていくと思いますので、よかったら合わせてご覧ください。

https://blue-leo.com/blog/
Android NDK で Hello World 表示してみる

## プロジェクト作成
普通にプロジェクトを作成する

## NDKのインストール
Tools -> SDK Manager -> SDK Tools から NDK を選択し、インストールする
<img width="1234" alt="スクリーンショット 2020-02-01 22.34.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141937/a9c67834-9dd2-b852-ba97-f8c13a3f2be6.png">

## ndk-build へのパスを通す

```~/.bash_profile
export PATH=$PATH:/Users/{ユーザー名}/Library/Android/sdk/ndk/21.0.6113669
```

2020年２月現在、上記のようなパスにインストールされるもよう
ターミナルで `source ~/.bash_profile` を実行後、 `ndk-build` コマンドを実行しパスが通っていることを確認する

## jniフォルダの作成
以下のようなパスで `jni` フォルダを作成する
<img width="300" alt="スクリーンショット 2020-02-01 22.14.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141937/1f3b5b78-43e7-4ce8-e22e-3557d5be4663.png">

## C言語のソースコードを作成する
jniフォルダの下に以下のようなC言語のソースコードを作成する

```hello.c
#include <string.h>
#include <jni.h>

jstring Java_develop_tomo1139_ndkhelloworld_MainActivity_helloWorld(JNIEnv* env, jobject javaThis) {
    return (*env)->NewStringUTF(env, "Hello World!!");
}

```

関数名は `Java` _ `{この関数を呼び出すクラスのパッケージ名}` _ `{この関数を呼び出すクラス名}` _ `{Kotlinから呼び出す際の関数名}` となる

## mkファイルの作成
jniフォルダの下に以下のようなmkファイルを作成する

```Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)
```

## C言語プログラムのビルド
ターミナルでjniフォルダの下へ移動し `ndk-build` コマンドを実行する
ビルドに成功すると *.so ファイルが生成される
<img width="300" alt="スクリーンショット 2020-02-01 22.23.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141937/8e52ddf1-e177-11ff-8c29-dbc5533bf069.png">

## フォルダの指定
```build.gradle
android {
    defaultConfig {
        ...
        sourceSets {
            main {
                jni.srcDirs = []
                jniLibs.srcDir "src/main/libs"
            }
        }
    }
}
```

## KotlinからC言語の関数を呼び出す

```MainActivity.kt
class MainActivity : AppCompatActivity() {

    private external fun helloWorld(): String // 関数宣言の追加

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d("dbg", helloWorld()); // 実行
    }

    companion object {
        init {
            System.loadLibrary("hello") // ライブラリのロード
        }
    }
}
```

## 実行結果
KotlinからC言語の関数を呼び出し `Hello World!!` と表示できた :ok_woman:
<img width="600" alt="スクリーンショット 2020-02-01 22.31.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141937/56d5fece-2ee5-d6a3-0ad7-c3218e98ffab.png">
【GAS】claspでソース管理できるようにする

手順を残しておきます。
ここではclaspの導入手順ぐらいしか書いてないですが、その後の基本的な使い方とかGit連携とか追々書いていきます。

[2020/02/03 追記]
導入後の使い方はこちらに記載しました。
⇒[【GAS】claspを使う - 基本的な操作紹介(Gitについても少し) -](https://qiita.com/wau/items/c0f17dcdae62efaca44b)

## Node.jsを入れる
claspをnpmコマンドで入れたので、Node.jsが必要になりました。

⇒[Node.jsのダウンロードページ](https://nodejs.org/ja/download/)

私はWindowsに入れたのですが、とりあえずデフォルトの設定で十分です。
特に難しい事は考えずにインストールしました。

## claspのインストール
下記コマンドでインストール

```
$ npm install @google/clasp -g
```
Mac OSだとsudo付けようとか書いてある記事もあったので、その辺り注意かもです。

## Google Apps Script APIの設定
Google Apps Script APIの設定が出来ていない人はします。

⇒[設定はこちら](https://script.google.com/home/usersettings)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430401/fedd65b3-0791-0ff6-b04c-8325da984cc4.png)

## ログインしてclaspの使用許可設定
とりあえずログインしてみましょう。

```
$ clasp login
```

実行すると色々出てきます。
私の場合はファイアウォールに許可して、その後ブラウザ画面でGoogleアカウントにclaspのアクセス許可しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430401/fc595ba1-1efb-47f4-81f6-16a22f61b3d1.png)


（コマンド画面が動かないなって思ってたらブラウザに表示されてました。）

ここで許可したらコマンド画面が動いて、ログイン完了です。
トークンが保存された```.clasprc.json```とかいうファイルが作成されます。
多分ログアウトしたら無くなる。

## ログアウト
ログアウトするときは下記を実行。まんまです。

```
$ clasp logout
```
intellisense がtensorflow2.0 で効かない件


# はじめに

最近、Tensor Flowを再入門しました。
手軽に組み込めたり、庶民が広く使える専用デバイスで動かせるのは、結局TensorFlowなんですね。

て事で、Chainer 使いをやめたわけではないけど、仕事において短期間に成果を出せるツールを身につけるために、Tensor Flowを再入門しました。


さて、本題です。自分もそうですが、コーディングするときに常に横にドキュメントを開いている人はどれくらいいるか？よく使う関数、クラスを記憶できてる人、どんだけいる？・・・・少なくとも自分は、まだ入門したてなので、関数をよく知りません。

# TensorFlowをVSCodeでヘルプ表示されない、なんで？

普段使ってるエディタは、VSCodeですが、Chainer だろうがPyTorchだろうが、大抵のモジュールはカーソルを関数、クラスに当てれば、ヘルプが出たり、コーディング補完される。で、TensorFlowは・・・・。ん？でない・・・ぞ？

- [tensorflow2.0 + VScodeでintellisenseが働かない問題](https://qiita.com/artemis5656/items/e8e464510a7d907e1feb) 

# 結論: 困ったことはGithub のIssueを眺める。

https://github.com/tensorflow/tensorflow/issues/32982

```
mkdir ~/.local/virtual-site-packages
ln -s ~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/tensorflow_core ~/.local/virtual-site-packages/tensorflow

Then use

 "python.autoComplete.extraPaths": [
        "/home/<USER>/.local/virtual-site-packages"
    ],

```
【備忘録】Cloud9で「proc_open(): fork failed - Cannot allocate memory」が出たときの対処法

*※超絶初心者の為、誤りがございましたらコメントを頂けると大変助かります。*

Laravelの新しいプロジェクトを作成しようとしたら、
`proc_open(): fork failed - Cannot allocate memory`
というエラーが出た。
「Cannot allocate memory」は日本語で「メモリを割り当てることができない」であり、
それを頭に入れつつググると、「PHPに割り当てられているメモリの値が足りない」ということがわかった。
そして、php.iniを編集して、メモリを増やさなければならないこともわかった。
参照記載の3つのサイトを参考にしながら、メモリを128M→512Mへ増やしたので、備忘録として残しておく。

---

※2020年2月2日追記

下記の手順A通り処理し、メモリを広げたが、結果、プロジェクト新規作成時のエラーを消すことができなかった。
Composerのトラブルシューティングに他の手段の記載があったので、
その手順Bを追記しておく。
こちらの手順でエラーは消えた。

##手順B
ターミナルに下記1～3のコマンドを入力。
1. `sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024`
2. `sudo /sbin/mkswap /var/swap.1`
3. `sudo /sbin/swapon /var/swap.1`
すると、Laravelで新規プロジェクト作成時のエラーは消えた！

##参照B
[トラブルシューティング-Composer](https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors)

---
---

※2020年2月1日作成
##手順A(結果的にこの手順では解決できなかったが、残しておく)
1. ターミナルに`sudo -s vi /etc/php.ini`と入力し、Enter押下
2. `memory_limit = 128M`を探し出す。※128MはPHPのメモリ初期設定らしい
3. 128を削除(消したい数字「1」,「2」,「8」をDeleteキーで削除）
4. Insertキーを押した後,「5」,「1」,「2」を入力
5. このままだと、ターミナル左下が`-- INSERT --`と表示されっぱなしで保存できないため、Escキーを何回か押下して、表示が無くなるようにする。
6. `:wq`と入力し、Enterを押下すると、保存されて元のターミナルに戻る
7. `php -r 'phpinfo();' | grep memory_limit`でメモリが増えているか確認

---

※ちなみに、php.iniをターミナル上で
 ・何も編集していない状態で閉じるには、`:q`コマンド
 ・編集したが、保存せずに閉じるには、`:q!`コマンド
　で対応可能。

##参照A
[Cloud9でlaravel開発環境の構築](https://qiita.com/outase/items/09634f8d5c42a860b312)
[Composerでメモリエラーが発生したときの対処方法【詳細解説】](https://evisu0414.com/engineer/engineer010/)
[すぐわかる！viの保存と終了の方法【Linux基礎知識】](https://eng-entrance.com/linux-vi-save)
Vagrant + VirtualBox を使ってみた(インストール編)

# Vagrant と VirtualBox でVM環境作ってみた。
Vagrant と VirtualBox をインストールしてみた。
今回はとりあえずそれだけ。

Dockerの話は別にしようと思ってる。あれまだ良くわかってないし。

- 誰向け？
  - Vagrant と VirtualBox を使ったことない人向け
  - Windows 10 Pro で試してみたい人向け(私の環境がソレなだけ)

- 事前準備
    - BIOSの設定で VT-x/VT-d の機能があるなら有効にしておこう
       - こいつが有効じゃないと動作しない
    - Windows の Hyper-V 機能は無効にしておくのをオススメ
       - VirtualBox 6.0 以降なら無効にしなくてもいいらしいが.......
       - ハードとの相性で動いたり動かなかったりするので、無効にしておくのをオススメ。
- 注意点
   - 必ず、VirtualBox をインストールした後に Vagrant をインストールすること。
      - 逆にすると、Vagrant が VirtualBox を認識できない
- VirtualBox の Version は？
   - [6.0系](https://www.virtualbox.org/wiki/Download_Old_Builds_6_0)でも、[最新](https://www.virtualbox.org/wiki/Downloads)でもいいです。どっちでも動作確認済。
- Vagrant の Version は？
   - [最新](https://www.vagrantup.com/downloads.html)で。2.2.6でも2.2.7でも動作確認済。

1. VirtualBox をインストールする

    1.  [VirtualBox公式](https://www.virtualbox.org/wiki/Downloads/ "VirtualBox公式")からダウンロードする
    2.  インストールする
2. Vagrant をインストールする
 
    1.  [Vagrant公式](https://www.vagrantup.com/ "Vagrant公式")からダウンロードする
    2.  インストールする


**特に詰まらなければ、これだけ。**

- これで何ができるの？
   - Ubuntu とか CentOS とかを、 vagrant up するだけで環境作成できるよ！
   - vagrant destroy するだけで環境破棄できるよ！

とりあえずは、作り方だけ。
Vagrantのコマンドとか、どうやって使うのかはまたあとで。

# 参考
- Vagrant + VirtualBox 構築の時の話
  - https://qiita.com/w2-yamaguchi/items/191830191f8af05ac4dd
  - https://qiita.com/koji9004/items/d436ffb939b6192e0d09
  - https://qiita.com/Esfahan/items/46da3ce1893a67789b58
- Vagrant公式 
  - https://www.vagrantup.com/docs/
基本情報技術者　テクノロジ系　第8章 システム開発技術④



# モジュール分割技法とモジュールの評価
分割方法と独立性(リサイクル性)について書きます。


## STS分割
分岐のない、データの流れが一直線の場合使用

S(source: 源泉(入力))
T(transform: 変換(処理))
S(sink: 吸収(出力))
の三つのモジュールに分割します。

## TR分割
分岐する場合に使用
分岐元を上位
分岐先を下位とします。

TR(トランザクションの意)



## モジュール強度
単体でのまとまりの良さを表す指標

強いほど独立性(リサイクル性)が高いです。

1から順に独立性と強度が高い順に紹介すると
したのようになります。

### 1,機能的強度
モジュール一つに一つだけの機能

### 2,情報的強度
同一データから複数機能を個別実行

### 3,連絡的強度
データフローにより関連する
複数機能を順次実行

### 4,手順的強度
仕様により関連する
複数機能を順次実行

### 5,時間的強度
時期の一致する複数機能を実行

### 6,論理的強度
複数機能の内
引数から一つだけ実行

### 7,暗号的強度
関係のない機能を実行
定義自体不可

## モジュール結合度

モジュール間の密着度を表す指標
弱いほど独立性が高くなります。

結合度が弱い順に紹介すると
以下のようになります。

### 1,データ結合
構造なしの引数により、データの受け渡しが行われる

### 2,スタンプ結合
構造ありの引数により、データの受け渡しが行われる

### 3,制御結合
呼び出し側が制御引数を用いることで
呼び出される側がモジュールの実行の制御に関わる

### 4,外部結合
構造なしの外部データを共有

### 5,共通結合
構造ありの外部データを共有

### 6,内部結合
モジュール間で内容を直接参照

## 構造について

構造をもつデータ: レコード側のデータ
構造なしのデータ: 変数
SALOME version 9.4.0リリースノート

この記事は2019年12月にリリースされたSALOME version 9.4.0の[リリースノート](https://www.salome-platform.org/news/18-dec-2019-salome-version-9.4.0)を翻訳したものです。

# 一般情報

CEA / DEN、EDF R＆DおよびOPEN CASCADEは、SALOMEバージョン9.4.0を発表します。

これは、2018年5月にリリースされたSALOMEバージョン9.3.0に対して計画されたマイナーな改善とバグ修正の結果を含む公開マイナーリリースです。

# 新しい機能と改善点

## GUIモジュール

- SALOME OCC Viewerでは、円形領域でエンティティを選択する機能が実装されています。

## Shaperモジュール

- PartSetをGEOMにエクスポートする機能、
- multi-level Compoundsへの隠蔽
- CompsolidsとCompoundsの修復
- ビューを特定の平面に対して垂直に設定、
- 既存のスケッチの基本平面を変更する機能、
- 結果を除去する機能、
- 結果を透明にする機能、
- 任意の面への押し出し（平面である必要はありません）
- スケッチャー内でフリーポイントを検出、
- 2つのポイントからエッジを構築、
- この黄色のハイライトを有効化または無効化、
- グループのフィルター、
- グループに対する組み合わせ操作、
- 円弧と線分の間に直交拘束を適用する機能、
- 新しい円弧作成モード：直線エッジに対して垂直、
- エッジを描画するときの水平/垂直拘束の自動化、
- 円と円弧の表示と選択を改善、
- 対話式ビュー操作モードでスケッチャーを使用する機能、
- 実際のスケッチの寸法を拡大表示、
- 円弧に中点を適用する機能、
- 新規エンティティ:楕円と楕円の弧
- 複数のグループフィーチャを選択したときに「Move to the end（最後に移動）」を呼び出す機能、
- 面取りを作成する機能、
- テキストファイルからポイントをインポートする機能
- テキストファイルからパラメーターをインポートする機能。

## MG-CADSurfプラグインモジュール

- SALOME Mesh-GemsプラグインのGUIが更新され、Mesh-Gems 2.9.6オプションを含むようになりました。

## ParaVisモジュール
- ParaViewサードパーティ製品は、OSPRAYライブラリのサポートを使用して構築され、ParaVisモジュールのレイトレーシング可視化機能を有効にしました。
少し前に切ってるブランチ状態のを最新マスタと同じ状態にする方法

ブランチ状態で
ターミナルで`$ git merge master`を実行する

この方法をとるとコンフリクトを起こす可能性があります。
それをどのようにしたら良いかというと
まずコンフリクトしている場所ですが、ターミナルにコンフリクトしている場所が書いてあります。

また、コードエディター（自分だとVscode）を開いてもらうとわかるのですが、コンフリクトしている場所のファイル名が紫色になっています。そこを開いてもらい、最新を適用するか、ブランチのコードを反映させるかを選択出来ますので、これを行ってもらえれば問題ありません。

また、Git Hubのデスクトップ用のアプリケーションを使用する。
homebrewが原因でgitが使えなくなったときの対処法

# 何が起きたか
```shell
homebrew install <hoge>
```
の実行後に、homebrew で入れた`git`で以下のエラーが発生するようになってしまった。

```shell
~/code ❯❯❯ git                                                                                        ✘ 130
dyld: Library not loaded: /usr/local/opt/gettext/lib/libintl.8.dylib
  Referenced from: /usr/local/bin/git
  Reason: image not found
[1]    19406 abort      git
```

# 解決策
```shell
brew uninstall --force gettext
brew install gettext
```

## 参考文献

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103475/af57fb4a-823e-1fce-8462-d3dd42b5fd69.png)

https://stackoverflow.com/questions/50631185/homebrew-will-not-run-wget-command-library-not-loaded/54338910
ECommerce Development Company

ECommerce Development Company 

![wg_logo_final (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311649/c68e1b8a-5998-024d-d7a0-87824a92fca1.png)

WebClues Global has been providing IT services in different countries from the last 5+ years, offering professional services such as E-Commerce App Development, E-Commerce Website Development, E-Commerce Service and UI/UX Design. WebClues Global offers sufficient, Cost-effective and qualitative solutions to serve the clientele across the world.

Having 5+ years experience in the Application and Website development services, WebClues Global has become a one-stop solution provider empowering small to large enterprises to achieve their business goals. With offices in USA, UK, Canada, and Development Center in India.

Visit: https://www.webcluesglobal.com/
WindowsのOniVimでinit.vimが読み込まれなかった場合の対処

# はじめに
OniVimに設定を書いても設定が反映されない人の解決の助けになることを期待しています。

# 原因
ユーザー名が日本語だったため、OniVimが読み込めなかった。(多分)

# 解決方法
2通りあります。

## 解決方法1

ユーザー名を変更する

下記のサイトのようにローカルユーザーを作る方法を行いました。
https://nw.myds.me/gimp/change-jpn-account/

ほかにもユーザー名を変更する方法があるようです。(今回は調べていません)

## 解決方法2

ユーザー名を変更しない方法

1. 環境変数XDG_CONFIG_HOMEを日本語を含まないように設定する。
2. $XDG_CONFIG_HOME/nvim/init.vimに設定を記入する。


### 環境変数を設定する

例えば私の場合はCドライブにconfigフォルダを作成し、XDG_CONFIG_HOMEにC:\configを設定しました。

|     環境変数     |    パス   |
|:---------------:|:---------:|
| XDG_CONFIG_HOME | C:\config |


環境変数の設定の仕方は下記のような他の人のサイトを参考にしてください。
https://proengineer.internous.co.jp/content/columnfeature/5205

### init.vimに設定を記入

XDG_CONFIG_HOMEにnvimフォルダを作成し、nvimフォルダ内にinit.vimを作成します。

init.vimを右クリックしてプロパティを開くと、場所のところにC:\config\nvimと書かれていれば設定は完了です。(XDG_CONFIG_HOMEの設定次第でC:\configのところは違うと思います。)

あとは下記のサイトなどを参考にinit.vimに設定を書いてください。
https://qiita.com/iwaseasahi/items/0b2da68269397906c14c

### この方法の問題点
**1**
本来であればOnivim上で
File > Preferences > Edit Neovim config
とすればinit.vimが開かれるはずですが、この方法で設定をしても開かれるファイルは初期と変わりません。

**なので設定を変えるときはC:\config\nvim\init.vimを変更する必要があります。**

**2**
プラグインが使用できないかもしれません。私はできませんでした。


注意してください

# おわりに
onivimはこれからもどんどん便利になりそうだと思っているのでみんな使っていきましょう。

質問があればいつでもください
文字列の出力

- 文字列をHTMLに出力する
  - ` ' `(シングルクォート)で囲って記述する
  - 文字やデータを連結させるには` . `でつなげる

```
print 'ただいまの時刻は' . date('G時 i分 s秒') . 'です';
```
- 特殊な文字を入力するためには、エスケープシーケンス「 \ 」をつける
    - シングル（ダブル）クオーテーションや$など・・・ 
  
```
print ("I'm studying \"PHP\"");
```
- 文字列の連結
  - ` ' `で囲って記述する
  - 文字やデータを連結させるには` . `でつなげる

```
print 'ただいまの時刻は' . date('G時 i分 s秒') . 'です';
```
- プログラムは関数を組み合わせて文章を作っていく、と言うイメージで書いていく
shell script ディレクトリ作成スクリプト

# 概要
- Configファイルに記載したディレクトリを作成するスクリプト

# スクリプト
- スクリプト名：mkdir_root.sh
- rootユーザで実行を想定
  - ディレクトリの権限が色々と面倒になるので

```
#!/bin/bash

#----------------------------------------
# code by Taki_Naka
#
# version
# 2020/02/01 new
#
# note
#
#----------------------------------------

### global varible
# スクリプト実行時のユーザ
user_name=$(whoami)

# configファイルのパス
config_file="/data/conf/mkdir_root.conf"


### 関数処理
# スクリプト実行ユーザがrootであることを確認
function check_root_user(){
  if [[ "$user_name" = "root" ]]; then
    :
    #echo "user is "$user_name"."
  else
    echo "user is "$user_name"."
    echo "Please execute as root user"
    exit 255
  fi
}


# configファイルの存在確認
function check_config_file(){
  if [[ -z "$config_file" ]]; then
    echo ""$config_file" is not exsist."
    exit 255
  fi
}


# ディレクトリ作成を実行
function mkdir_execute(){
  # 変数config_fileからコメントと空白行を除く
  local mkdir_name_config=$(egrep -v '^$|^#' "$config_file")

  # ループ処理：一行ずつmkdir_name_configを読み取り、ディレクトリを作成する
  # ディレクトリが存在した場合：次の処理へ
  # ディレクトリが存在しない場合：ディレクトリ作成、作成の確認を実施
  echo "$mkdir_name_config" | while read mkdir_one_line
    do
      if [[ -d "$mkdir_one_line" ]]; then
        echo "既に"$mkdir_one_line"は存在しています"
        continue
      else
        mkdir "$mkdir_one_line"
        if [[ ! -d "$mkdir_one_line" ]]; then
          echo "warn: mkdir command is mistake."
          exit 255
        fi
      fi
    done
}


### main
check_root_user
check_config_file
mkdir_execute
```

# Configファイル
- Configファイル名：mkdir_root.conf
- 参考で使ってください。

```
# -----------------------------
# config name : mkdir_root.conf
# script name : mkdir_root.sh
#
# version
# 2020/02/01 new
#
# note
# * #にてコメントアウト可能
# * フルパスでディレクトリ名を記載して下さい
# * ディレクトリの最後は必ず/で区切ること
#
# -----------------------------

# 初期構築時に作るディレクトリ
#/data/script/
#/data/conf/
#/data/logs/

# test
/data/script/test1
/data/script/test2
/data/script/test3
```

# note
- log関数と連携させたい。

# 参考
[bashスクリプティング研修の資料を公開します](https://www.m3tech.blog/entry/2018/08/21/bash-scripting)
[正規表現一覧](http://gimite.net/help/devas-ja/all_regex.html)
[シェルスクリプト（bash）のif文やwhile文で使う演算子について](https://qiita.com/egawa_kun/items/196cd354c0d8e4e0fefc)
ALBログをS3に出力する際のバケットポリシー設定メモ

ALBのログをS3に出力する際の設定で、少し躓いたので書き残しておきます。
（公式ドキュメントにはちゃんと記載ありました）


## ALBからS3へ繋がらない

ALBからS3へアクセスログの設定を有効にしようとすると、`permission denied` によりS3へアクセスできず
設定が有効になりませんでした。


## アカウントIDの指定が誤っていた

下記のように設定するのですが
AWSのアカウントIDは自身のアカウントではなく、**リージョン毎に提供されているロードバランサ用のAWSアカウントID**にする必要がありました。oh...

```:正しいバケットポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<ロードバランサ用 AWS accountID>:root"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<バケット名>/<必要あればパスやprefix>/*"
    }
  ]
}
```

# 参考

[Application Load Balancer のアクセスログ - AWS Documents](https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions)
[Linux][初期設定] バックアップ＆リカバリー

#はじめに

#開発環境
Linux

#この記事について
環境構築やエラー解決のHowToが中心のメモです。


# バックアップしておくもの

**最低限バックアップが必要なもののメモ**

####ファイル
.bashrc
.vimrc
.gvimrc
.tmux.conf
.zshrc
.Xmodmap
.xbindkeysrc

####ディレクトリ
.local
.config
.jupyter
.kaggle

## 詳細

### .config


#### xfceの外観の全般の設定ファイル
/home/hashimo/.config/xfce4/xfconf/xfce-perchannel-xml

#### キーボードショートカット
/home/username/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml

#### キーボードマウス割当変更
/home/username/.xbindkeysrc







# Linux上でLiveUSB作成
LiveUSB作成方法はこちら
https://qiita.com/osorezugoing/items/f8b9c6b6d449459452e9
[Linux][初期設定] 開発環境セットアップの目次

#はじめに
##開発環境
Linux
##この記事について
環境構築やエラー解決のHowToが中心のメモです。


#目次

####ターミナル
[xfce-terminal](https://qiita.com/osorezugoing/items/adfabf4691f0e91da679)
[alacritty](https://qiita.com/osorezugoing/items/93a5229983817ac1591c)
[hyper + FiraCode](https://qiita.com/osorezugoing/items/e15773b799fb3bbe49fb)

####エディタ
[xed]
[vim](https://qiita.com/osorezugoing/items/c9b6170ca6dff9c7efae)
[VSCode](https://qiita.com/osorezugoing/items/98dffa5574e8a923e780)

####開発
[Nodejs](https://qiita.com/osorezugoing/items/886ea7bbe760eae7054a)
[Python](https://qiita.com/osorezugoing/items/ba341394881468bfdd6c)
[Jupyter Notebook](https://qiita.com/osorezugoing/items/9941ac302089135ebd31)
[Andoid Studio](https://developer.android.com/studio/install?hl=ja#linux)
[Flutter](https://flutter.ctrnost.com/install/)
[MySQL](https://qiita.com/osorezugoing/items/ba83b411bc4934c9311f)

####その他
[wine](https://qiita.com/osorezugoing/items/eda8618c85c0a67ac85a)
[MEMO][開発環境構築] Python　

#はじめに
##開発環境
Linux
##この記事について
環境構築やエラー解決のHowToが中心のメモです。

## python

####やること

1.元から入っているpython(おそらくpython2.7)にpipを入れる。
sudo curl -kL https://bootstrap.pypa.io/get-pip.py | python

2.pyenvを入れる。

3.pyenvで必要なpythonをローカルに入れる。

4.ローカルにあるpythonにpipenvを入れる。

####まずビルドに必要なパッケージを入れておく

####libffi-dev
libffi-devを入れないとパッケージを入れる際に`ModuleNotFoundError: No module named '_ctypes'`のようなビルドエラーに必ず直面するので入れる。

```:ビルドに必要なパッケージ
sudo apt install -y make build-essential libssl-dev \
zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \
wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils libffi-dev
```

```:Tkinterに必要なパッケージ
sudo apt install python3-tk
```

```:pygameに必要なパッケージ
sudo apt install python3-dev libsdl-image1.2-dev \ 
libsdl-ttf2.0-dev libsdl1.2-devsubversion \
libportmidi-dev ffmpeg libswscale-dev libavformat-dev \ libavcodec-dev 
```

###pyenv

[pyenvメモ](https://qiita.com/osorezugoing/items/f96ba179322cdafae2b7)

###pipenv

[pipenvメモ](https://qiita.com/osorezugoing/items/864e47f85658aa289746)

###JupyterNotebook
[JupyterNotebookのメモ](https://qiita.com/osorezugoing/items/9941ac302089135ebd31)

###pip

####パッケージ一覧を書き出す

```
pip freeze > requirements.txt
```

####まとめてインストール

```
pip3 install -r requirements.txt
```

####まとめてアンインストール

```
pip3 uninstall -r requirements.txt
```

# VSCode

## setttings.json

### unresolved import

インポートできて実行できるのに警告がでる意味不明な使用なので無効にします。

```json:
"python.analysis.disabled": [
    "unresolved-import"
]
```
JetBrains_学習ノート_003_科学計算モード

# Python IDE PyCharmの科学計算モードについて
- 起動方法
「view」中の「Scientific Mode」を選択する
![ps008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551056/66ca589c-cb23-c8be-6e45-dec21b792c05.png)

# 起動後のレイアウト
  - 左上：Project Window（下図１の部分）
  - 下部：Python Console（下図２の部分）
  - 右上：SciView（下図３の部分）
  - 右中：Documentation（下図４の部分）
 ![ps009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551056/5cfd54e9-082b-930d-a6b1-1519161255d5.png)

# Jupyter notebookのような「セル」で実行する方法
  - 「#%%」でスタートするコメント行の前には「プレイボタン」が表示される（import部分はデフォルトに表示する）  
![ps010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551056/d0fe8a4d-5815-a781-79af-3febb2b7424c.png)

# ドキュメントはコーディングの際に動的に変わる（英語なので、翻訳プラグインを用意する）
- 「pulgins」経由で「Transaction」をインストールする
![ps011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551056/1b97a28c-0877-2cfb-4d91-2e848039e451.png)
- 翻訳ツールの使用方法（翻訳したい文字列を選択する→CTL+WIN+Yで翻訳ツールを呼び出す）
![ps012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551056/bdfbf600-4bd6-b8d5-b59d-25776d8f956c.png)

```sci_mode.py
import numpy as np
import matplotlib.pyplot as plt

#%% test1
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N) ** 2)
plt.scatter(x, y, c=colors, alpha=0.5)
plt.show()

#%% test2
print(2**2)
```
[MEMO][開発環境構築] VSCode

#はじめに

##開発環境
Linux

##この記事について
環境構築やエラー解決のHowToが中心のメモです。


#code
いまは`Settings Sync`という拡張機能にconf系のファイル等、VSCode関連の設定のバックアップ＆リストアを担ってもらっているので下記のメモの存在価値は極めて低い。


##vscode拡張機能

```terminal:公式サイトで.debファイルを落としてインストール
https://code.visualstudio.com/#alt-downloads
```

```terminal:extensions
Settings Sync
VSCode Great Icons
Git History
Prettier
Path Intellisense
Rainbow CSV
Guides
Eslint
python
C/C++
Vim
```

##settings.json
気が向いたら書く

##keybindings.json
同上
php.iniで標準タイムゾーンに設定する（＋dateについて）

### タイムゾーンの設定
- タイムゾーンを設定しなければ日本時間で表示されない（世界標準時から9時間ずれているので）
[php.iniで標準タイムゾーンを設定する](https://gray-code.com/php/setting-timezone-on-php-ini/)
- php.iniでタイムゾーンを設定する
  - [Date]の欄にある「;date.timezone =」がタイムゾーンの設定箇所
  - 日本時間にしたい場合は「Asia/Tokyo」を指定する。
[php.iniが置いてある場所の探し方](https://gray-code.com/php/how-to-finding-phpini/)

### MAMPでタイムゾーンを設定する
- タイムゾーンの設定
  - MAMP→Open WebStart page→TOOLS→PHPINFOからPHP.iniの場所を確認（Loaded Configuration File）
  - タイムゾーンを`Asia/Tokyo`に変更
    - MAMPを再起動すればタイムゾーンが変更されている
  - 関数を使ってタイムゾーンを指定することもできる
    - レンタルサーバーを使っておりタイムゾーンが変更できない場合に使う
例：`date_default_timezone_set('America/Adak');`
  - dateは日付などの情報得ることはできるけど表示することはできない。
    - `print`と合わせて使う。
例：print(date('G時 i分 s秒'));

### 現在の時刻を表示させる（date）
- 画面に現在の時刻を表示させる
  - dateは日付を司る関数
  - 's'は現在の秒を表示させる
`print(date('s'));`
- 他のパラメーターは[こちら](https://www.php.net/manual/ja/function.date.php)
  - 大文字と小文字を区別するため指定する場合は注意すること
elmで入力フォームの増減を実装

elm歴1週間くらいのウェブエンジニアが書いたコードです。
動くサンプルはこちら
https://suotani.github.io/elm-practice/multi/index.html

```elm
import Browser
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import List

-- MAIN

main =
  Browser.element
    { init = init
    , update = update
    , subscriptions = subscriptions
    , view = view
    }


-- MODEL
type alias Step = 
  { urls : String
  , text : String
  , id : Int
  }

type alias Model =
  { title : String
  , explain : String
  , steps : List Step 
  }

init : () -> (Model, Cmd Msg)
init _ =
  (Model "" "" [Step "" "" 1], Cmd.none)


-- UPDATE
type Msg
  = AddField
  | DeleteField Int
  | Input String Int String

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
  case msg of
    AddField ->
      ({model | steps = List.append model.steps [Step "" "" (List.length model.steps + 1)]}
      , Cmd.none)
    
    DeleteField id ->
      ({ model | steps = reNumbering (deleteListFromID id model.steps) }, Cmd.none)
    
    Input column id val ->
      ({model | steps = fieldUpdater model.steps id column val }, Cmd.none)

deleteListFromID : Int -> List Step -> List Step
deleteListFromID id steps = List.filter (\x -> not(x.id == id)) steps

reNumbering : List Step -> List Step
reNumbering steps =
  List.indexedMap (\i step -> Step step.urls step.text (i+1)) steps

fieldUpdater : List Step -> Int -> String -> String -> List Step
fieldUpdater steps id column val = List.map (updateField id column val) steps

updateField : Int -> String -> String -> Step -> Step
updateField id column val step =
  if step.id == id then
    case column of
      "urls" ->
        Step val step.text id
      
      "text" ->
        Step step.urls val id
      
      _ ->
        step
  else
    step

--SUBSCRIPTIONS

subscriptions : Model -> Sub Msg
subscriptions model = 
  Sub.none

-- VIEW

view : Model -> Html Msg
view model = 
  div []
    [ input [type_ "text", placeholder "title"] [] 
    , input [type_ "explain", placeholder "explain"] [] 
    , button [onClick AddField] [text "append"]
    , div []
        (List.map fieldView model.steps)
    ]

fieldView : Step -> Html Msg
fieldView step =
  div []
    [ p []
        [text (String.fromInt step.id)
        ,button [onClick (DeleteField step.id)] [text ("delete" ++ (String.fromInt step.id))]
        ]
    , div []
        [ input
            [ type_ "text"
            , placeholder "urls"
            , value step.urls
            , name ("curriculum[steps_attributes][" ++ (String.fromInt step.id) ++ "][urls]") 
            , onInput (Input "urls" step.id)
            ] []]
    , div []
        [ input
           [ type_ "text"
           , placeholder "text"
           , value step.text
           , name ("curriculum[steps_attributes][" ++ (String.fromInt step.id) ++ "][text]")
           , onInput (Input "text" step.id)
          ] []]
    ]
```
[MEMO][開発環境構築] wine

#はじめに

##開発環境
Linux

##この記事について
環境構築やエラー解決のHowToが中心のメモです。



#wine

##いろいろインストール

```bash:いろいろインストール
sudo dpkg --add-architecture i386 && wget -nc https://dl.winehq.org/wine-builds/winehq.key && sudo apt-key add winehq.key && sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ xenial main' && sudo apt update && sudo apt install --install-recommends winehq-stable
```

##文字化け対策

```
sudo apt install -y winetricks
winetricks
```

cjkfontsを選択してインストールする。


#kindle for linux
kindle for PCのバージョンは`1.17.44183`を推奨
https://kindle-for-pc.jp.uptodown.com/windows/download/1179941

```terminal:~/Downloads/kindle-for-pc-1-17-44183.exe
wine kindle-for-pc-1-17-44183.exe
```

## 解像度を100dpiに変更する

デフォルトだとdpiが９６%になっており、ソフトによっては表示が欠けてしまうなど、表示が完全に再現されない場合がある
`winecfg`で解像度の変更ができる

```terminal:設定方法
$ winecfg

> 設定ウィンドウが立ち上がったら、解像度のタブに移動して、dpiの項目に100を入力する
```
[MEMO][開発環境構築] Mysql

#はじめに

##開発環境
Linux

##この記事について
環境構築やエラー解決のHowToが中心のメモです。


# mysql8.0x

https://dev.mysql.com/downloads/repo/apt/
最新のレポジトリをダウンロードする

```
sudo apt update
sudo apt install mysql-server
```

```
mysql -V
```

##mysql設定

```:/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
log-error	= /var/log/mysql/error.log
loose-local-infile=1
[client]
loose-local-infile=1
```

##mysql-workbench設定

```:/usr/share/mysql-workbench/code_editor.xml

```
非エンジニアが、約4ヶ月ほど「もくもく会」を運営したら、採用にも少し影響があった話

### はじめに
採用業務未経験から、エンジニア採用を始めて約半年になろうとしています。

現在は、名古屋のIT企業で人事として働いています。しかし、新卒(前職)では愛知県内の自動車部品メーカーで働いていました。つまり、採用系の仕事は現職が初めてです。

そんな感じこともあり、最初はいろいろな有名企業の方の採用ノウハウをチェックしていたのですが、「自分で試してみないと、何がいいか悪いかなんて分らんわい。」というところに考えが落ち着きました。

いろいろ試したことの中の一つについて、今回は書きたいと思います。

注）よくある「こんなことやったら、採用がめっちゃできるようになったよ！！！」的なやつではまったくございません。

「こんなことしたら、少しだけど影響があったよ」っていうnoteです。個人の記録的に気軽に書いているので、そこらへんはご了承ください。

### 勉強会を始めた経緯
本題ですが、エンジニア向けのもくもく会を私(人事、非エンジニア)が始めてみました。

あまり深い意図はなくて、「終業後に勉強したいなぁ。でも家帰ると集中できないし、、。は！！勉強会やっちゃえばいいじゃん！」という感じです。

元々大学生の時に、部活(陸上部)終了後、英語の勉強会(今でいうもくもく会みたいなもの)を先輩方とやっていたんですね。

人がいると集中できるし、運営者であれば強制的に参加せざるを得ないので、「強制的に勉強の時間ができて最高！！」とふと思いついちゃったんですよね。(というぐらいのノリです。)

### 最初に決めたルール
一応ざっくり自分の中でルールを決めました。これだけ守ればやっていけるだろうという基準で言語化しました。

・採用活動的なアプローチはしない。(だってそれ業務じゃん？楽しくみんなで勉強したいのよ。)
→ 参加者の方から、「実は御社に興味あるのですが！！！」と話しかけてもらうのは大歓迎しています。大喜びします。

・半年は、継続できる形にする。(格好つけて頑張りすぎちゃったり、運営者つまり自分が苦しくなるイベントにしないことが大事。)

・ストレスにならないようにする。(ノンストレスは最重要項目。)

・業務ではない。やりたいからやっているマインドでやる。

### 実際にあった効果、よかったこと
最初は「とりあえずやってみよー。」と見切り発車で始めたのですが、以下のような思わぬ効果が出始めました。

＜採用面＞
・勉強会参加者の方からの応募が、月1回ぐらいはある。
→ 興味持ってくれていることが分かれば、「オフィス見てみますか?少しお話します?」的なムーヴもします。希望があれば全然やりますという気持ちなので。(会場がオフィスそのものなので、そこはお互い労力が少なくていいですよね。)

・会社に興味がある人が、気軽にアプローチしてくれるようになる。
→ 興味あるけど、いきなり「面接！カジュアル面談！だとちょっと、、」という人もいるので、気軽に話せて良いです。

・新卒採用はしていないけど、学生さんからのインターン希望の話をもらうことがある。
→ これは運営を始めてから気づいたのですが、意外と興味を持ってくれている学生さんが多く、嬉しい気持ちです。(せっかく声を掛けていただいたのに、何もしてあげられない苦しさもある。)

・数をこなしていると、勉強会の開催に熱心な会社だと好意的に受け取ってもらえる。
→ 実際に面談で言ってもらえたことがあり、外部からはそう見えるのかぁという気づき。(確かに回数は、頑張ってやってます。)

＜個人的＞
・自分の勉強しながら、コミュニティー貢献できてラッキー。
→ 人の役に立って、自分も成長できるので最高ですね。

・強制的に自己研鑽の時間が発生してレベルアップ。
→ connpassで募集を公開したら、もうやるしかないのですよ。

・エンジニアの人とお話しする機会が増える。(主催者なので、来てくれた人とはお話ししたいマインド。)

→ エンジニアの人達とお話しする機会が増え、興味などを色々聞けて勉強になります。

### 困っちゃうこともたまにあり
・自分の行きたい勉強会と被ってしまい「あちゃー、、」となるときがある。
→ 採用系のイベントは、水曜日(運営する勉強会も水曜日)にありがち問題。

・私かて人間なので、業務で疲れてなんだか気分が乗らない日もあります。(ほとんどないですけど。)

・採用的に副次的効果が出始めるのはめっちゃ嬉しいんだけど、「これもはや業務じゃん？お給料出してくれないの？」みたいなダークサイドの自分がちらっと顔を出してきて、ビビる。(Time is Moneyなんでね。)
→ 勉強会運営は、自主性が命綱だと思っているので、「やりたいからやっている」というスタンスを貫いています。採用絡みのお話をするときも、雑談程度に気軽にお話するぐらいにしてます。

あとは、最初に「私がやりたいからやります。」という宣言をしました。自分に対しても。(運営上のルールは守るから、私のやりたいようにやるからね！という宣言でもある。)

### 実際集客的にはどうなのか？
開始当初は、4人とかの日もありましたが、ここ1ヶ月は10人以上にご参加いただけるようになりました。(マックスは14人とかの日もあり。定員15人に設定しているので、割と頑張っているほうではないかと。)

毎回きてくださる人もいて、ありがたい限りです。

試しにやってみていること
・当初はconnpassだけで募集していたが、Wantedlyのミートアップ機能をも使用し始めた。
→ 採用的に興味のある人は、Wantedlyの方が見ているかな？？と思い始めました。(応募ムーヴもあり、私の考えは合っていた気がする。)

・Slackを使って、参加者と交流できるようにする。(あまり機能していないので、改善の余地あり。)

### 最後に
今は、参加してくれる人が増え、来てくれる人のためにもエンジニアコミュニティとして続けていきたいという気持ちです。(ご参加ありがとうございます。)

とにかく続けていくことが大事なので、引き続き運営頑張っていきます。参加者の人の意見も聞いて、たまにはLT大会とかもやってみたい。

最近はたくさん人がきてくれて嬉しいので、2月は毎週開催をします。

ご興味ある人は、ぜひ一度遊びに来てください。
[Linux][初期設定] システム設定

#はじめに

##開発環境
Linux

##この記事について
環境構築やエラー解決のHowToが中心のメモです。

# DNS
GoogleのpublicDNSを設定する

#### 手順
パネルのネットワークを右クリック > 接続を編集する > 接続先を追加 or 編集 > IPv4セッティング or Ipv6セッティング > 追加のDNSサーバー > 8.8.8.8,8.8.8.4 or 2001:4860:4860::8888, 2001:4860:4860::8844 > 保存 

パネルのネットワーク右クリックして設定した接続名をクリックすれば変更できる。

# システム設定

##アップデートマネージャーの更新時間を変更

`「設定」→「オプション」→「Auto-refresh」`
最初にアップデートリストを更新するまでの時間 15分
以降、次の頻度でアップデートリストを更新する 2日

##ディレクトリ名を英語表記にする

LANG=C xdg-user-dirs-gtk-update

##コンポジット処理を無効にする

`「ウィンドウマネージャー」→「コンポジット処理」`
ウィンドウの透明度や影やらアニメーションなどをオフにして軽量化。


##キーボード

リピートするまでの時間 `220`
リピート速度 `35`


##alias設定

```bash:bashrc
alias relogin='exec $SHELL -l'
alias vi='vim'
alias vib='vi ~/.bashrc'
alias grep='ag'
alias ..='cd ..'
alias .2='cd ../../'
alias .3='cd ../../../'
```


##ターミナルをみやすく

.bashrcに`export PS1='\n \[\e[1;36m\]\w \n \[\e[1;36m\]> \[\e[m\]
`を追記する。
https://qiita.com/osorezugoing/items/7fb7e9f10a46e1d91a52

### themeを追加する

Gnome,Xfce系のターミナルのカラースキームを追加

```
 bash -c  "$(wget -qO- https://git.io/vQgMr)" 
```



##テーマ変更

###外観

####スタイル
[Dark-Olympic](
https://www.xfce-look.org/p/1302313/)

解凍フォルダ `/usr/share/themes` へ移動
3.`ウィンドウマネージャ`のスタイルからDark-Olympicを選択、fontも設定。

####アイコン
Mint-Y-Dark-Aqua

####フォント
フォント　Migu 1M Regular
サイズ 14

###ウィンドウマネージャ

####スタイル
Dark-Olympic

####フォント
フォント　Migu 1M Regular
サイズ 14


##Chromeのフォント変更

####目をいたわる

設定→デザイン→フォントをカスタマイズ 標準サイズと最小サイズを`18`にする。

####thunarの動画サムネイルが表示されないとき

```
sudo apt install tumbler tumbler-plugins-extra ffmpegthumbnailer
```

#ショートカット割当

####「キーボード」 → 「ショートカットタブ」

・タスクマネージャー　Shift+Ctrl+del
・アプリ super+(A,F,T,W,E,V,S)
>音楽プレイヤー、ファイルマネージャー、ターミナル、WEBブラウザ、テキストエディタ、動画プレイヤー、ショートカット設定

####ウィンドウマネージャー

　ウィンドウの切り替え　`Ctrl+tab`
　前のワークスペースへ映る `Alt L`

**使わないショートカットは誤動作の原因なので消す**

# マウスのボタン（ミドルボタン)をスペースにする
https://qiita.com/osorezugoing/items/8feb32df02fd8fc0ba5d
Swift：macOSのシステム情報を取得するフレームワーク作った

# 概要
macOS向けのアクティビティインジケーターアプリの[RunCat](https://kyome.io/runcat/index_jp.html)を開発するにあたり、CPU使用率、メモリ性能、ディスク容量、そしてネットワーク接続状況をそれぞれ取得する機能を実装したのですが、今回はそれらのシステム情報を取得する機能のみを抽出したフレームワークを作りました。

# ActivityKit

Apache License, Version 2.0でGitHubにオープンソースとして公開してあり、CocoaPodsやCarthageでもインストール可能です。
GitHubのリンク：[ActivityKit](https://github.com/Kyome22/ActivityKit)

## 使用例

CPU使用率、メモリ性能、ディスク容量、ネットワーク接続状況のすべてを5秒間隔で（文字列として）取得する

```swift
import ActivityKit

var observer = ActivityObserver(interval: 5.0)

Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { (t) in
    print(observer.statistics)
}
```

```plaintext:出力例
CPU usage: 16.0%, system: 4.8%, user: 11.2%, idle: 84.0%
Memory performance: 79.5%, pressure: 35.1%, app: 7.1 GB, wired: 2.9 GB, compressed: 2.7 GB
Disk capacity: 42.6%, total: 920 GB, free: 528 GB, used: 392 GB
Network: Wi-Fi, Local IP: xx.x.x.xx, upload: 3.1 KB/s, download: 20.0 KB/s
```

**CPU使用率のみ取得**

```swift:CPU
print(observer.cpuDescription)
// =>　CPU usage: 16.0%, system: 4.8%, user: 11.2%, idle: 84.0%

// それぞれの数値を取得することも可能
let usage = observer.cpuUsage
usage.percentage // Double
usage.system // Double
usage.user // Double
usage.idle // Double
```

**メモリ性能のみ取得**

```swift:Memory
print(observer.memoryDescription)
// => Memory performance: 79.5%, pressure: 35.1%, app: 7.1 GB, wired: 2.9 GB, compressed: 2.7 GB

// それぞれの数値を取得することも可能
let performance = observer.memoryPerformance
performance.percentage // Double
performance.pressure // Double
performance.app // Double
performance.wired // Double
performance.compressed // Double
```

**ディスク容量のみ取得**

```swift:Disk
print(observer.diskDescription)
// => Disk capacity: 42.6%, total: 920 GB, free: 528 GB, used: 392 GB

// それぞれの数値を取得することも可能
let capacity = observer.diskCapacity
capacity.percentage // Double
capacity.total // Double
capacity.free // Double
capacity.used // Double
```

**ネットワーク接続状況のみ取得**

```swift:Network
print(observer.networkDescription)
// => Network: Wi-Fi, Local IP: xx.x.x.xx, upload: 3.1 KB/s, download: 20.0 KB/s

// それぞれの数値を取得することも可能
let connection = observer.networkConnection
connection.name // String
connection.localIP // String
connection.upload // Double
connection.download // Double
```

# 所感
RunCat開発１年間の集大成です。オリジナルのアクティビティモニタを作りたい場合には便利かも。
Rustのforループを参照で回す

そこまで難しい事でもないのですが、見当たらなかった上小一時間悩んだので
書き留めておきます。

# ソース
```rust
fn main(){
    let mut hoge = [0,1,2,3,4,5];

    // 参照かつmutableな状態でループ
    for i in &mut hoge{
        *i = *i + 1; //値の書き換え
    }

    // 参照でのループ(mutableなし)
    for i in &hoge{
        println!("{}",i);
    }
}
```

結果は以下の通り

```
1
2
3
4
5
6
```

もちろん、vecなんかも同じノリで普通に回せます

```rust
//上のソースをvecにしただけ
fn main(){
    let mut hoge = vec![0,1,2,3,4,5];

    for i in &mut hoge{
        *i = *i + 1; //値の書き換え
    }

    for i in &hoge{
        println!("{}",i);
    }
}
```

```
1
2
3
4
5
6
```