OmniAICreator/Qiita-1.07M huggingface dataset:
pythonメモ

# import系
importで使えそうなものをメモ(numpy,pandasなどはメジャーすぎなので省略)

## dataclasses
[公式](https://docs.python.org/ja/3/library/dataclasses.html)

型作るときに便利なもの。
オプションも結構あるのでfrontでいうObject.freezeみたいなことができたりするぽい。

```python
import dataclasses
@dataclasses.dataclass(frozen=True)
class clshoge:
    A: str
    B: str

clshoge('hogehoge','fugafuga')
print(clshoge.A)

```
今日のchmodエラー



```shell-session:macOS
$ chmod 0777 BridgePoint.app/
chmod: Unable to change file mode on BridgePoint.app/: Read-only file system
$ chmod +w BridgePoint.app/
$
```
一歩進んだ。
![bpe1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/6ed236c3-510f-e468-c31f-572fb500055b.png)



```shell-session:macOS
$ chmod +w  bridgepoint 
KM-S05:MacOS administrator$ ls -al
total 56
drwxrwxr-x@ 3 administrator  staff    102 10  8 10:19 .
drwxrwxr-x@ 6 administrator  staff    204  7 26 16:57 ..
-rwxr-xr-x@ 1 administrator  staff  27100  7 26 16:56 bridgepoint
$ sudo chmod 0777 bridgepoint 
Password:
chmod: Unable to change file mode on bridgepoint: Read-only file system
$ sudo chmod a+w bridgepoint 
chmod: Unable to change file mode on bridgepoint: Read-only file system
```


![bpe2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/2ce9fb94-1747-2894-b6d0-f60e45d4aefe.png)


#ref
Linuxの権限確認と変更(chmod)（超初心者向け）
https://qiita.com/shisama/items/5f4c4fa768642aad9e06
[JavaScript] イベントリスナーを複数同時に設定可能な関数またはメソッドを作成する

jQuery の on の使い方に慣れていると addEventListener に同時に複数のイベントを登録したいときがあります。

## 通常の書き方

```js

const target = document.querySelector("設定対象");
target.addEventListener("click", MyFunc);
target.addEventListener("keydown", MyFunc);
```

MyFunc の部分には自身で定義した関数を登録します。
querySelector の使い方は割愛します。

## 代わりの関数を作成する場合

### TypeScript

```js
const addMultipleEventListener = (element: Element | null, eventNames: string, listener: listener): void => {
	const target = element as EventTarget;
	const events = eventNames.split(" ");
	events.forEach((event: string) =>
		target.addEventListener(event, listener, false)
	);
};
```

### JavaScript

```js
const addMultipleEventListener = (target, eventNames, listener) => {
	const events = eventNames.split(" ");
	events.forEach(event => target.addEventListener(event, listener, false));
};
```

### 使い方

```js
const target = document.querySelector("設定対象");
addMultipleEventListener(target, "click keydown", MyFunc);
```

本来の addEventListener とは使い方が若干異なります。

## jQuery の on 相当のメソッドを追加する場合

Reflect.defineProperty を使用することで、
該当のメソッドが存在しない場合にオリジナルのメソッドを生やせます。

### TypeScript

```js

type listener = EventListener | EventListenerObject | null;
Reflect.defineProperty(EventTarget.prototype, "on", {
	configurable: true,
	enumerable: false,
	writable: true,
	value: function(eventNames: string, listener: listener): void {
		const target = this as EventTarget;

		const events = eventNames.split(" ");
		events.forEach((event: string) =>
			target.addEventListener(event, listener, false)
		);
	},
});
```

#### on の型定義で怒られる場合

TypeScript で Element や EventTarget に on がないと怒られる場合は型定義を拡張します。

```js
type listener = EventListener | EventListenerObject | null;

declare global {
	interface EventTarget {
		on(eventNames: string, listener: listener): void;
	}
	interface Element {
		on(eventNames: string, listener: listener): void;
	}
}
```

### JavaScript

```js

Reflect.defineProperty(EventTarget.prototype, "on", {
	configurable: true,
	enumerable: false,
	writable: true,
	value: function(eventNames, listener) {
		const events = eventNames.split(" ");
		events.forEach(event => this.addEventListener(event, listener, false));
	},
});
```

### 使い方

```js

const target = document.querySelector("設定対象");
target.on("click keydown", MyFunc);
```

厳密には jQuery の on よりもシンプルな実装なので、完全再現するにはもう少し手を加える必要があります。

## サンプル

- [codesandbox](https://codesandbox.io/s/snowy-microservice-tq9wy?fontsize=14&module=%2Fsrc%2Findex.ts)

## 参考にした記事

- [[stack overflow] Binding multiple events to a listener (without JQuery)?](https://stackoverflow.com/questions/8796988/binding-multiple-events-to-a-listener-without-jquery)
- [TypeScript の型定義ファイルと仲良くなろう](https://developer.hatenastaff.com/entry/2016/06/27/140931)
githubのプルリクのdiffで複数行の参照とコメントができるようになった

githubのプルリクエスト上で今までは行単位の参照とコメントでしたが、
それが複数行選択できるようになりました。
参照自体はURLも変更されるのでチームメンバへの共有などにも使えます。

## 複数行の参照

<img width="540" alt="スクリーンショット 2019-10-08 11.17.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452135/c1439c79-4b2e-1aae-264e-7a3bf18b36ac.png">

diffの行番号のあたりをクリックして、選択したい複数行の末尾の行をShiftを押しながらクリックします。
（ドラッグ&ドロップでも選択できます。）

<img width="484" alt="スクリーンショット 2019-10-08 11.27.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452135/c0c52552-5d39-3262-c5f3-aea8f4ad1ffe.png">


``files#diff-{コミットハッシュ値}R4-R5``
URLを確認すると上記のような形でURLの末尾に行番号が追加されています。
このURLを共有すれば別のメンバも複数行選択された状態で表示されます。

## 複数行のコメント

通常通り、行のコメントする箇所の「＋」を押したままで選択したい複数行までドラッグ&ドロップします。
すると複数行を選択された状態でコメントができます。
<img width="595" alt="スクリーンショット 2019-10-08 11.22.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452135/b81e11e5-dc28-9ad3-2509-d1c549ed0747.png">

行単位ではなくて一連の流れについてコメントする時に便利ですね。


※2019/10/08時点ではまだベータ版のようです。
ubuntuメモ

#そもそも何？
[公式] (https://www.ubuntulinux.jp/ubuntu)参照
要するにlinuxとお友達なOSのイメージ
今回はver18.04の設定で

# cmd
基本はlinux系のだと思う備忘録兼ねて

| 説明               | cmd($省略)                 |
| ---------------- | ------------------- |
| シャットダウン          | shutdown -h now     |
| ファイルをエクスプローラーで開く | xdg-open filename   |
| OS info                          | cat /etc/os-release |
| パッケージチェック                 | sudo apt-get check  |
|パッケージ依存関係修復|sudo apt-get -f install|
|絶対パス取得|readlink -f hoge.sam|
|環境パス確認|printenv|
|インストールしたもの確認|dpkg --get-selections|
|パスワード変更|sudo passwd `<username>`|
|パスワード変更|sudo passwd `<username>`|
|画面録画|Alt+Ctrl+Shift+R|




# Extension
手間がかかったもの、使えそうなものをメモ

## slack
Ubuntuのversionが18.04だと脳死でインストールすると日本語打てないらしいので
[公式](https://slack.com/intl/ja-jp/downloads/linux)から圧縮ファイルとって
[こちらの記事](https://qiita.com/akjgskwi/items/a65d396e353e31f235d2)を参考にインストールすれば
解決した



## Albert
エンジニアさんに教えてもらったツール
便利。使いこなすためにまずはインストールから
[この記事](https://www.virment.com/how-to-setup-albert-ubuntu/)がわかりやすくておすすめでした。

## Tweaks
ubuntuの見た目が結構お手軽に変更できる拡張機能
[この記事](https://www.virment.com/customize-ubuntu-looks/)から読んで色々設定しました。
git メモ

便宜上
リモートリポジトリ→remote
ローカルリポジトリ→local

# cmd

| コマンド | 内容 | 
|:-----------|:--------|
| clone       | remoteをマウント|
| remote -v|remote確認|
| branch  | localブランチ作成|
| push | local→remote |
| pull | remote→local |
| stash| local変更退避|



# よく使う流れ

## branchにmaster情報反映

最新情報取得

```
git pull origin master
```

branch切り替えて

```
git rebase master
```

## localのcommit取消

該当commitのIDを確認して

```
git log
```

ID指定して削除

```
git reset --hard <commitId>
```

## local branch 削除
[参照](https://qiita.com/hogeta_/items/33d2334c9b1919bd5120)


# 困った時
## failed to push some refs to

rebertして整合性がおかしくなってpushできない時

```
error: failed to push some refs to  'リポジトリパス'
```

こんなエラーが出たら

```
git push origin :<branch name>
```
で解決
ただしlocalが正のときに限る



## rebase-apply
なんかrebase出来ない

```
It seems that there is already a rebase-apply directory, and
I wonder if you are in the middle of another rebase.  If that is the
case, please try
        git rebase (--continue | --abort | --skip)
If that is not the case, please
        rm -fr "hoge/fuga/rebase-apply"
and run me again.  I am stopping in case you still have something
valuable there.
```

要するに「rebase-apply」ってfolderあるから出来ねーよ
って言われているので該当フォルダを消して再度通すと出来ます。
たぶん処理中にハングアウトしたとかそーゆーので残ると起こり得る
CentOS7で最初にやるコマンド

# YUM

# network
```
/etc/sysconfig/network-scripts/ifcfg-ens192
/etc/sysconfig/network-scripts/route-ens192
```

# DNS
```
/etc/resolv.conf

nameserver 8.8.8.8
```

```bash
yum install -y epel-release
yum install -y dstat telnet git rpmdevtools gcc jq java-1.8.0-openjdk-devel bind-utils net-tools wget tcpdump vim traceroute tmux
yum update
```


# hostname

```
/etc/hostname

hostname <<name.domain>>
```

# hosts

```
/etc/hosts
```

# NOPASSWDのuser

```
useradd genuser
usermod -aG wheel genuser
```

`visudo`でwheelユーザのNOPASSWD設定を施す

# ssh

```
ssh-keygen -t rsa -b 2048
cat .ssh/id_rsa.pub > .ssh/authorized_keys
chmod 600 .ssh/*
chmod 700 .ssh
```
MacでREALFORCE104U/UB-Sキーボードを使えるようにする設定


2018-10-23T19:57:40+09:00 に個人ブログに書いたものを転載

# キーボードの設定

## 購入したキーボード

REALFORCE104U-S/104UB-S

http://www.topre.co.jp/products/elec/keyboards/index.html

※　職場用です。 家では、REALFORCE87UB使っています。

## 東プレ Realforce キーボードをMacで使う設定「Karabiner-Elements」mac OS Sierra編

https://lab.hendigi.com/realforce-mac-karabiner-elements/

この記事を元に設定をしていきます。
主にやりたいことは、`英　→　日、日　←　英`　の変換を押しやすいボタンかつ１つのボタンで切り替えれるように設定したいと思います。

### Karabiner-Elementsをビルド

https://github.com/tekezo/Karabiner-Elements/blob/master/README.md

Karabiner-Elementsをインストールします。

1. download

```
git clone --depth 1 https://github.com/tekezo/Karabiner-Elements.git
```

2. build

```
cd Karabiner-Elements
make
```

makeできない

```
make build
........
/Library/Developer/CommandLineTools/usr/bin/make -C pkginfo
mkdir -p build \
		&& cd build \
		&& cmake .. \
		&& make -j4
/bin/sh: cmake: command not found
make[2]: *** [build_make] Error 127
make[1]: *** [build] Error 2

make: *** [all] Error 99
```

3. debug

```
brew install cmake
```

また、makeできない

```
CMake Error:
  Xcode 1.5 not supported.
```

https://github.com/SimonKagstrom/kcov/issues/261

Xcodeインストール
https://developer.apple.com/xcode/
そして、また、makeできなかった。

4. How to Build VCMI

https://wiki.vcmi.eu/How_to_build_VCMI_(macOS)

上記のURLは色々書いているものの、下記の手順しかやってない

```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew install git cmake sdl2 sdl2_ttf sdl2_image boost ffmpeg minizip
brew install sdl2_mixer --with-smpeg2
brew install qt5
```

5. MacでThe CXX compiler identification is unknown や CMAKE_CXX_COMPILER could be foundが出たときの対応

https://qiita.com/pakiln/items/612da90ca6a606e7648c

```
CMake Error at CMakeLists.txt:5 (project):
  No CMAKE_C_COMPILER could be found.
```

```
sudo xcode-select --reset
```

6. make

```
make
```

やっとこさmakeできました。

### Karabiner-Elementsをインストール

```
open .
```

で、現在いるCUIからFinderを開きます

Karabiner-Elements-12.1.50.dmg
(Karabiner-Elements-VERSION.dmg)

こういうdmgがmakeで出来上がってるので、ダブルクリックしたらインストール用のパッケージが出てくるので
またダブルクリックしてインストーラーにしたがってインストールします

### Karabiner-ElementsでRealforceを設定する

今回、設定しているキーボードはUS配列のキーボードです。
なぜか、国番号を聞かれた。日本なので81

#### 家のRealforce87で設定してる最低限の設定をする

![Realforce87の設定](https://pbs.twimg.com/media/DlCbJWvU0AIo1WM.jpg:large "Realforce87の設定")

windowsアプリケーションキーをファンクションキーに
Altを⌘キーに
windowsキーをoptionキーに
として動くように設定してます。

⌘英かな というアプリで英、かな変換の設定をしています。

![⌘英かな](https://pbs.twimg.com/media/DqF_FkTVYAA6pMi.jpg)

これで、Realforceの左Alt押すと英数入力に右Alt押すとかな入力になります。

設定し終わったらMacの再起動を忘れずに行ってください。

色々、キーマップカスタマイズできますが、とりあえず以上です。
Ruby 2.6 から CSV の空行のパース結果が変わった

Ruby で CSV を処理するときに、空行を無視するために `empty?` を使って下記のように書いていました。

```ruby
require "csv"

CSV.foreach("foo", headers: :first_row) do |row|
  next if row.empty?
  p row
end
```

`headers` を指定した場合、行は `CSV::Row` で表現されますが、Ruby 2.6 からは `CSV::Row#empty?` は `false` を返すようです。

```bash
#!/bin/sh

RBENV_VERSION=2.5.1 ruby -rcsv <<EOS
CSV.parse("\n", headers: %w(a)) do |row|
  p row.empty? # true
end
EOS

RBENV_VERSION=2.6.4 ruby -rcsv <<EOS
CSV.parse("\n", headers: %w(a)) do |row|
  p row.empty? # false
end
EOS
```

`p row` などでみてみると、2.5 ではフィールドの情報を持っていないのに対し、2.6 ではフィールドの情報を持っています。

```bash
#!/bin/sh

RBENV_VERSION=2.5.1 ruby -rcsv <<EOS
CSV.parse("\n", headers: %w(a)) do |row|
  p row # #<CSV::Row>
  p row.to_a # []
  p row.to_hash # {}
end
EOS

RBENV_VERSION=2.6.4 ruby -rcsv <<EOS
CSV.parse("\n", headers: %w(a)) do |row|
  p row # #<CSV::Row "a":nil>
  p row.to_a # [["a", nil]]
  p row.to_hash # {"a"=>nil}
end
EOS
```

[ドキュメント](https://ruby-doc.org/stdlib-2.6.5/libdoc/csv/rdoc/CSV/Row.html#method-c-new) には、`empty?` などは Array に delegate されると記載があります。上記のように 2.6 では `to_a` の返り値が空ではないので `empty?` が `false` を返すようです。

空行の読み飛ばしは `CSV::Row#empty?` を使うのではなく、`CSV.new` 等のオプションに `skip_blanks: true` を指定するのがよさそうです (2.5, 2.6 とも)。
JIRAワークフロー：項目チェック（優先度が既定値Zだったらエラーにする）

###優先度が既定値Zだったらエラーにする
トランジションの『検証』にて「Boolean validator with math, date-time or text-string terms」または「Validation based on regular expression」を使用する。
　※どちらも条件に合致しない場合にエラーとしてハンドリングするため、それに応じたロジック組み立てが必要。
　※優先度の数が多い場合は、「Validation based on ～」の方が設定が楽です。

要件：
　優先度を、A、B、C、Zと定義しており、既定値にZを設定している。
　案件着手する場合、必ずA、B、Cいづれかの優先度に設定するルールになっているのでチェックを入れる。

#####「Boolean validator with math, date-time or text-string terms」での手順
　　①案件着手前のトランジションの『検証』にて「boolean validator ～」を追加選択
　　②Boolean expression to be evaluated:に以下を記載
    　　　`%{00017} = "A" or %{00017} = "B" or %{00017} = "C" `
　　　※{00017}は、優先度のフィールドID
　　　※条件に合致しない場合にエラーとしてハンドリングするので、Z以外の優先度全てを記載している。
　　③Message to show when validation fails:のメッセージ欄にメッセージを記載する
　　　　例：「優先度の設定をしてください」
　　　※Field to show the message, select NONE if the message should appear on the top:で
　　　　「priority -[00017]」を選択すると優先度項目のところに上記のメッセージが表示されます。
　　④追加ボタンを押下

#####「Validation based on regular expression」での手順
　　①案件着手前のトランジションの『検証』にて「Validation based on ～」を追加選択
　　②Field or parsed text to be checked for matching with the regular expression:に「priority -[00017]」を選択
　　③Regular expression:に「Z」を記載
　　④Negate condition:にチェックを入れる
　　　※ここにチェックを入れることで条件に合致する場合のハンドリングができる
　　⑤Message to show when validation fails:のメッセージ欄にメッセージを記載する
　　　　例：「優先度の設定をしてください」
　　　※Field to show the message, select NONE if the message should appear on the top:で
　　　　「priority -[00017]」を選択すると優先度項目のところに上記のメッセージが表示されます。
　　⑥追加ボタンを押下


###（応用編）期限が入力されていて、かつ優先度が既定値Zだったらエラーにする
トランジションの『検証』にて「Boolean validator with math, date-time or text-string terms」を使用する。

要件：
　優先度は、A、B、C、Zと定義しており、既定値をZに設定している。
　案件着手する場合、必ず**期限を設定し、**A、B、Cいづれかの優先度に設定するルールになっている。
　**ただし起票時に期限設定した場合は優先度Zは許可しない。**
　※太文字部分が追加の要件

#####手順
　　①案件着手前のトランジションの『検証』での設定は、上記「優先度が既定値Zだったらエラーにする手順」を参照
　　②Createのトランジションの『検証』で「boolean validator ～」を追加選択
　　③Boolean expression to be evaluated:に以下を記載
　　　`(%{00012} != null and (%{00017} = "A" or %{00017} = "B" or %{00017} = "C" ))`
　　　`or`
　　　`(%{0012} = null)`
　　　※{00012}は、期限のフィールドID。{00017}は、優先度のフィールドID
　　　※条件に合致しない場合にエラーとしてハンドリングするので、エラーにしたい場合のケース以外を記載。
　　④Message to show when validation fails:のメッセージ欄にメッセージを記載する
　　　　例：「優先度の設定をしてください」
　　　※Field to show the message, select NONE if the message should appear on the top:で
　　　　「priority -[00017]」を選択すると優先度項目のところに上記のメッセージが表示されます。
　　⑤追加ボタンを押下



*JIRA Softwareバージョンは7.12.1*
MojaveとCatalinaのバンドルソフトウェアの比較

Catalinaがリリースされたので取り急ぎよく使うもののみ。
High SierraとMojaveの比較は[こちら](https://qiita.com/seiyakubo/items/50fb24b03eca120aefec)。

| path | High Sierra (10.13) | Mojave (10.14) | Catalina (10.15) |
|------|---------------------|----------------|------------------|
|/bin/bash|3.2.57|3.2.57|3.2.57(1)|
|/bin/zsh|-|5.3|5.7.1|
|/usr/bin/perl|5.18.2|5.18.2|5.18.4|
|/usr/bin/php|7.1.7|7.1.19|7.3.8|
|/usr/bin/python|2.7.10|2.7.10|2.7.16|
|/usr/bin/python3|-|-|3.7.3|
|/usr/bin/ruby|2.3.3p222|2.3.7p456|2.6.3p62|
|/usr/bin/emacs|22.1.1|22.1.1|N/A|
|/usr/bin/vim|8.0|8.0|8.1|
|/usr/bin/git|2.13.5|2.17.1|2.21.0|

`-`なのは調べてないです。

emacsがデフォルトでインストールされなくなった模様。
マスタデータ

###マスターデータとは
主に企業が社内向けや業務向けなどで構築するデータベースで共通となる、基本的な情報のこと。
情報の種類により「顧客マスタ」「商品マスタ」「会計マスタ」などと呼ばれる。

例えば「製品マスタ」には、それぞれの製品ごとの名称やスペック、価格などの情報が一括して管理されており、受発注を管理するマスターデータと関連を持つようになる。

マスターデータは、社内の部署によって異なるシステムやアプリケーションを利用しているため、それぞれに部署で管理されていることもあり、それぞれのマスターデータを統合し、一つの規格で管理を行うなどのマスターデータマネジメントを行うことがある。マスターデータマネジメントには、データの不備を改善したり、アクセスを高速化したり、それぞれのマスターデータを管理する作業の手間やコストを削減するなどのメリットがある。

#####マスターデータは、「マスタ」と省略されることが多い。
【AWS】Growi構築でコケたところ

今回は、仕様でwikiが必要になり、[Growi](https://growi.org)という和製wikiに目をつけた。

この[参考サイト](https://qiita.com/A-Kira/items/57f452d80849effdec68)を参考にして、AWS上にEC2をたて、その中にドッカーを構築。ドッカー内にGrowiを構築する。

参考サイトにあるコマンドに1つだけ、コマンドを追加する。
※EC2の初期設定で、パッケージの最新化を行うyum updateを実行する。

コマンドリストは以下

```
sudo su -
yum update
yum install -y docker
docker -v
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
systemctl enable docker
groupadd docker
gpasswd -a $USER docker
systemctl restart docker
exit
sudo su -
yum install -y git
cd /home/ec2-user
git clone https://github.com/weseek/growi-docker-compose.git growi
cd /home/ec2-user/growi
vi docker-compose.yml
docker-compose up -d
```


ここでこけました。
```
vi docker-compose.yml
```

参考サイトでは、ポートの変更に言及していますが、
ポートの変更とパスワードシードを変更しないと、ドッカーの起動時に失敗しました。

また、今回、最初はケチって、t2.microで実行しましたが、
スペックが足りず、t3.smallで実行しないと起動できないことがわかりました。
※気づくのになかなか苦労してしまいました。
Debug timezone in Docker


- Code 

```
package main

import (
        "fmt"
        "github.com/uniplaces/carbon"
)

func main() {
        loc := "Asia/Tokyo"
        now, _ := carbon.NowInLocation(loc)
        today := now.StartOfDay()
        tomorrow := today.AddDay()
        fmt.Println(now, today, tomorrow)
}
```

```
$ docker run --rm -it --privileged -v $(pwd):/app golang bash

$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

$ date +%T -s "07:00:00"

```
Raspberry Pi をThingWorx につなげる（中編）

#中編： Raspberry Pi の準備とエージェントアプリの仕込み

[前編はこちら](https://qiita.com/akiranishi/items/55182da6e5f9be300bd8)
Raspberry Pi にセンサーやLEDを接続し、作成したエージェントアプリを転送して実行します。

##手順
1. Raspberry Pi のハードウェア準備
2. 実行環境の構築
3. エージェントアプリを作成
4. Raspberry Pi にアプリを転送して実行

##1. Raspberry Pi と温度湿度センサー、LEDの配線
以下の図の通り、配線してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/6c388da3-9e51-b393-1676-fce2ac98da16.png)

###（オプション） SSH を有効に
※Raspberry Pi に直接ディスプレイやキーボード／マウスを接続していれば不要です。
「メニュー」＞「設定」＞「Raspberry Piの設定」でインターフェイスタブでSSH設定を変えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/d130a8fc-eccc-8b69-f48b-365701a95b4a.png)

##2. Raspberry Pi 側の実行環境の構築
###JDK とPython 環境の用意
Java SE のランタイムとPython2 が必要になります。Raspberry Pi のmicroSD カードをNOOBSセットアップを使い、アップデートしてあれば特に操作は必要ありません。
もしアップデートしていない場合は、以下を実行しておきましょう。

```
sudo apt-get update
sudo apt-get install build-essential python-dev
```

### AM2302 センサー読み取り用ライブラリのインストール
github にあるAdafruit Python DHT を利用します。適当なフォルダで以下を実行します。

```
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
sudo apt-get install python-rpi.gpio
```

##3. エージェントアプリ作成
一旦、PCに戻ってEclipse でエージェントアプリのjar ファイルを作成します。
1. Eclipse のメニューから “File”→”Export”
2. “Java” -> “Runnable JAR file” を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/6261c5ff-2a7c-70d2-5d90-e45f84e8699b.png)

3. Launch configuration: をSimpleThingClient に設定
4. Export destination （jar ファイルの保存先)を設定
5. ”Finish” をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/1cb78f02-d34e-4ecb-a76c-5b7eaebfdb0c.png)

##4. Raspberry Pi上でエージェントアプリを実行
1. 作成したSimpleThingClient.jar ファイルをRaspberry Pi に転送します。FTPかSFTP、もしくはUSB メモリーでもお好きな方法でどうぞ。
2. Jar ファイルを配置したフォルダに、"Adafruit_Python_DHT/examples/AdafruitDHT.py" をコピーします。
3. ソースコードのあるgithub の[こちら](https://github.com/akiranishi/thingworx_sample/tree/master/raspdemo01) からwriteLED.py を入手し、手順2． と同じフォルダにコピーします。
AdafruitDHT.py、writeLED.py、SimpleThingClient.jar の3つのファイルが同一フォルダに置かれていることを確認しましょう。
4. Raspberry Pi とセンサーの接続が正しいかどうか確認します。

```
python AdafruitDHT.py 2302 4
Temp=25.5*  Humidity=57.0%
```

1行目を実行し、2行目のように温度と湿度が返ってくれば正常です。
今度はLEDをつけてみましょう。

```
python writeLED Y
```

LEDが点灯すれば正常です。念のため消しておきましょう。

```
python writeLED N
```

それではエージェントアプリを実行してみましょう。

```
java –jar SimpleThingClient.jar
```

###ThingWorx への接続確認
PC に戻ります。ThingWorx のComposer を開き、Monitoring → STATUS → Remote Things の Unbound にraspPiThing_1 が表示されれば接続OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/5ed1caa4-2ddc-356f-e12a-dee7b8a9e2c8.png)

続きは[後編その１](https://qiita.com/akiranishi/items/22cdb80478d5a8be41e8)で、ThingWorx上のIoT アプリ開発をします。
オブジェクト指向をポケモンで理解してみよう(Python)

#オブジェクト指向をポケモンを例にわかりやすく
pythonを勉強して、僕が理解に苦しんだのが、classの概念。
プログラミングを長年やられている方は、Rubyなどもclassの概念を持つので、理解されているかと思いますが、経験の浅い僕にはイメージし難いものでした。

参考書を何度読んでも、クラスやらメソッド、インスタンスなど正直？？？となることばかりで、なかなかに嫌気をさしていました。

そこで、自分なりに簡単な言葉でわかりやすくまとめたいと思い、試行錯誤した結果、昔好きだったポケモンでまとめることが自分に腑に落ちたので、共有したいと思います。

##イメージとして・・・
ポケモンってどんな「モノ」か。僕らは知っていますが、コンピューターは知りません。
なので、コンピューターに対して、ポケモンってこんなものだよと教えてあげるイメージで書いていきます。

##コード例
```py

#Pokemonという「もの」を、コンピュータに教える
class Pokemon(object):

    #Pokemonの特徴を教える
    #名前(name)と、レベル(level)と、体力(hp)があるよ
    def __init__(self, name, level, hp):
        self.name = name
        self.level = level
        self.hp = hp


    #Pokemonに対して、させたいことを教える
    #__init__で書いた特徴を、表示させたいな
    def output(self):
        print(self.name+":初期レベル"+str(self.level)+"、初期体力"+str(self.hp))

    #ふしぎなアメを食べるとレベルが１上がる特徴を、表示させたいな
    def eat(self, food):
        if food == "ふしぎなアメ":
            self.level += 1
            print(self.name+"は、"+food+"を食べてレベルが"+str(self.level)+"になった")

#Pokemonには、ピカチュウという名前(name)の「もの」がいると、コンピュータに教える
#ピカチュウのレベル(level)は5で、体力(hp)は100なんだ
Pikachu = Pokemon("ピカチュウ", 5, 100)

#ピカチュウの特徴を表示させる
Pikachu.output()

#ピカチュウにふしぎなアメを食べさせる
Pikachu.eat("ふしぎなアメ")


>>>ピカチュウ:初期レベル5、初期体力100
>>>ピカチュウは、ふしぎなアメを食べてレベルが6になった
```

#解釈
```py

#Pokemonという「もの」を、コンピュータに教える
class Pokemon(object):

    #Pokemonの特徴を教える
    #名前(name)と、レベル(level)と、体力(hp)があるよ
    def __init__(self, name, level, hp):
        self.name = name
        self.level = level
        self.hp = hp


    #Pokemonに対して、させたいことを教える
    #__init__で書いた特徴を、表示させたいな
    def output(self):
        print(self.name+":初期レベル"+str(self.level)+"、初期体力"+str(self.hp))

    #ふしぎなアメを食べるとレベルが１上がる特徴を、表示させたいな
    def eat(self, food):
        if food == "ふしぎなアメ":
            self.level += 1
            print(self.name+"は、"+food+"を食べてレベルが"+str(self.level)+"になった")
```
ここで、ポケモン「Pokemon」って、どんな「モノ」で、どんなことができるのかを、コンピューターに教えてあげます。
それがまとまったものが、クラス(class)です。

ポケモン「Pokemon」ってどんな「モノ」なの？何をするの？何ができるの？など、特徴をまとめたのが、「def〜」で書かれた項目であり、メソッドと呼ばれるやつです。

##まとめ
あくまで僕がイメージしやすいようにまとめたので、きちんと理解するには不足なこともあるかもしれませんが、クラス？メソッド？などで迷ったら、参考にしてください。
apt updateでnvidia-dockerのNO_PUBKEYエラー対応

# 現象

apt-getするとnvidia-dockerのレポジトリーで「NO_PUBKEY 6ED91CA3AC1160CD」が突然表示されるようになりました

```:実行結果
sudo apt update

....
....

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://nvidia.github.io/libnvidia-container/ubuntu18.04/amd64  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD
....
```

# 解消方法

以下のコマンドでnvidia-dockerレポジトリーのgpgkeyのアップデートを行います。

```
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
```

# 参考
https://nvidia.github.io/nvidia-docker/
ネスト(nest)した State の要素を setState で変更する（React）


### 解決する課題

Reactで値を保持する箇所といえばstate 

setStateメソッドで、stateの値を変更できますが、
ネストされた要素は直接　setStateで変更できません　(React 16.2現在）

しかしながらstateでネストした要素を変更することがよくあります。

思ったより以上に情報が少ない為、

単純な解決方法を1つを記事にします

Typescriptを利用します。
Javascriptよりもコードはわかりやすく見えると思います。

---
### 結論 （コード用意しました）
https://codesandbox.io/embed/react-typescript-playground-c89q5

### どういうコードなの？
人間(humanDetail) の詳細に　名前、年齢、性別のプロパティを設けます

今回は　tom さんの年齢を　18 ⇒20に変更するというコードです。

```tsx

//PlayGroundからコピペしたから、importは割と適当だよ
//importは適宜変更してね

import * as React from "react";
import { render } from "react-dom";
import { Button } from "antd";
import "antd/dist/antd.css";



interface humenDetail {
	name: string;
	age: number;
	sex: boolean; // true:men false:women
}

interface Props {}

interface State {
	human: humenDetail | null;
}

class App extends React.Component<Props, State> {
	constructor(props: Props) {
		super(props);

		this.state = {
			human: { name: "tom", age: 18, sex: true }
		};
	}

	nestedStateChange = () => {
		const item = this.state.human;
		if (item !== null) {
			item.age = 20; //ここに変更する値
		}

		this.setState({
			human: item
		});
		console.log(this.state.human);
	};

	render() {
		return (
			<div>
				<Button onClick={this.nestedStateChange}>
					ここを押すと、値が18⇒20に変わるよ
				</Button>
				<div>{this.state.human.age}</div>
			</div>
		);
	}
}

render(<App />, document.getElementById("root"));


```


nestedStateChangeメソッドで ネストする前のプロパティを　itemとして指定して、itemのプロパティに値を入れて
item を　setStateするよーっていうオーソドックスなやり方です。
セコクラウドの立ち上げからいつの間にか見た事のない実装を社内ローンチしちゃった件

**アウトプット強化週間！_2**

AWS Firecrackerをガチ気で使おうとしている人って調べててAmazon当人以外にあんまいないようなのでノウハウをアウトプット。コンテナ起動させた以上の記事があまり無いような気がする。

Amazonさん、OSS使って利益吸い上げだけで貢献が云々言われてますけど、僕自身はこの記事にあるようにfirecrackerガンガン使ってますので凄く助かってます！ありがとうございます！

## はじまり 

**「スキルアップ目的で何でも試せる壊してOKな、お気軽検証環境あったら手を動かす動機になるんじゃないすかね？」**
**「だね」**

という会話から検証環境を作ってみようかとなった。が、その際に貰ったPCがスペック不足でどうにもなんなかった。

 - アサインされたパソコンは5,6年前のSATAが載っているようなお古。ミニクラウドとはいえ外部ストレージ無いと複数人からディスクアクセスに耐えられない
 - 各人でアカウントを払い出したりを考えるとvCenterが要るがライセンス料がまかなえない

色々選定してみてOpenStackすら重くてだめそうだったので*LXD+Golangの自作API*でラップしてみることにした。Ubuntuプレーン、docker、kubernetesイメージこさえたりして。<br>
でもだめだった、辛うじてk8sは動くもののディスクアクセスが重すぎてpod、特にhelmががんがんタイムアウト死

あとネットワークの偏り問題があった。主系からは両系にアクセスできるけど、もう方系からは主系にはアクセスできん問題。*Stackoverflowに情報あったけど元記事失念*

どうしてもアクセスしやすい主系側にコンテナが偏ってしまう。
*（これ今はどうにかできるんですかね？そういうものだからネットワーク観点でVXLAN使ってどうにかせよと書いてあったような）*

さらに致命的なのがdockerとかで大量のプロセスが動いたノードをshutdown -h nowみたいにgracefulな停止してしまうとコンテナ上でプロセスがゾンビ？化してしまうようで発生するとコンテナが停止できなくなる。うえに消せない。かつ、cluster化していると全ノード再起動しないと消せない。**定期的な全停止運用が発生**

## AWS Firecracker発表と作り直し

ドン詰まった辺りで発表されたのはAWS Firecracker。ためしにちょっと触ると起動早くて良さそう。環境ファイルも凄く少ない。コピーとか削除とかファイル単位だしでsnapshot機能作るの凄く簡単そうにみえた

だけど、基本はFirecrackerって単一のコンテナを動かすくらいの機能しか無いんですよ。Clusterとか全然できない。なので先のLXD用APIを改良してこんな構成を作ってみた。

![vm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/336c45ba-0ea8-cab0-f4b1-8ebf682352cc.png)

![vm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/a23d28fa-595c-114d-75d3-cb55ae309c07.png)

![vm3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/f18cb728-f703-425f-1adc-10eb2197d995.png)

![vm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/d0505b16-e4cc-3797-e116-b4905ad13da8.png)

これによって自立型分散仮想基盤とでも言えるようなものが完成。他のサーバーに呼びかけてダメそうなら俺が責任もってコンテナ動かすぜ！てなかんじ。この構成だとダッシュボードとかAPIサーバーみたいに止まると運用できなくなるようなシングルポイントがなくなるんですね。あとスケールも同じ構成のをくっつければ良いだけなので強烈にスケーリングしやすい。

## k8sを動かしたい

AWS公式だとkubernetes未対応なんですが、

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1748671

これをヒントにカーネル4.4.0-116＋CONFIG_VXLAN=yでVXLANを有効にしたら動いた。あと**CONFIG_DEVPTS_MULTIPLE_INSTANCES=y**も有効にしないとpodに入れない

```
# ./k3s kubectl get pod -o wide
NAME        READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
nginx-pod   1/1     Running   0          4m16s   10.42.0.37   master   <none>           <none>
```

本k8sじゃないけど学習用ならk3sでも十分っすよね。<br>

その後Prometheus+Grafanaで監視したり色々追加遊んでたら片方マシンがHDD Media Errorで再起不能になった・・ので一台でがんばって動いております。

## ユーザーにコンソールを開放したい

firecrackerは標準入出力がコンソールになるのでそのままだと利用者サイドからはコンソールは使えない。なので

https://github.com/gravitational/console-demo

この実装をforkさせてもらって標準入出力をラップしてWebからアクセスする。クラウドでよくあるコンソールのWebアクセスの実装を作ってみた。元の実装だとfirecrackerが起動する前にHTTPのプロセスがあがったりでうまく動かない。順番変えたりクラウドから使うためにトークン認証実装したり少々手を加えた。

https://github.com/yasutakatou/console-demo

```
git clone https://github.com/yasutakatou/console-demo
cd console-demo/
make
```

これでビルド

```
# ./demo -port=12345 -debug -html=./www
```

みたいに起動させて(./wwwはcloneしたhtmlがあるフォルダ)

```
http://127.0.0.1:12345/?token=passwd
```

みたいにトークン指定してアクセスする。
2019-10-08 Link > WRF > 2015 April 23: Installing WRF on CentOS 7

```txt:動作環境
CentOS Linux release 7.7.1908 (Core) 
```

WRF (Weather Research and Forecasting Model)関連。

April 23, 2015
Installing WRF on CentOS 7
https://wolfscie.wordpress.com/2015/04/23/installing-wrf-on-centos-7/


現在進めているシステム構築がうまくいかない場合、上記を参考にするかもしれない。

上記ではyumを使わずにtar.gzからセットアップしている。
それは気になるところ。
Unity玉転がしチュートリアル 1-1.ゲーム画面の構成

# この記事の対象者
* Unity入門したい人
* 最初の一歩が踏み出せない人

# OSとか環境とか

* Windows 10 Pro
* macOS Mojave
* Unity 2019.2.8f1
* Rider 2019.2.2

# 補足
* 公式動画にて利用しているのはMacなので、Windowsユーザーはある程度脳内変換して見る事
* 筆者はWindows、Macの両方の環境で確認。Ubuntuとかでは検証してない。
* 基本Unityは英語メニューで利用
* 間違いがあったらツッコミ大歓迎



# 公式のリンク
https://unity3d.com/jp/learn/tutorials/projects/roll-ball-tutorial/setting-game

## プレイフィールドの追加

・プレイフィールドを作る為にUnity標準のPlaneを利用
**GameObject>3D Object>Plane**で追加
（HierarchyのCreateメニューからも同様の追加が可能）
・GameObjectの名前を変更(Plane→Groundに変更)

初期状態だと「新しいフォルダ」みたいな感じの名前になってると思って下さい
![e46b09a9-6247-4ba1-abad-356d4525d3f1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/6eb87419-80ce-9641-03ed-f1ee85ec5168.png)

Transformの歯車アイコンからResetをクリックして座標や回転などをリセット
![249dcc49-cd37-45f4-ac39-7581e4b732a8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/84252c93-89cf-1442-bb17-e78ac973fdff.png)

グリッドの表示/非表示はSceneビューのGizmosメニューのShow Gridをクリックして切り替え

![ce75897c-8941-44a3-a29b-04f5ffdd92fb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/0a2d635d-1079-44ab-8890-b61c483037b6.png)

## スケールの変更について
- スケールツールでドラッグして大きさを変える方法
- 直接数値を入力する方法

※**Planeでは体積がない**のでY軸のスケールは正の値を増やしても別に何も変化なし

なお、Sceneでオブジェクトを選択してFキー（Edit>Frame Selectedでも同様の動きだが、面倒くさいのでショートカットを覚える）でそのオブジェクトに対してカメラのフォーカスを当てることが出来る

## プレイヤーオブジェクトの追加

Sphereオブジェクトを利用
**Hierarchy>Create>Sphere**を選択

Unityで扱う際に大きさの単位があり

- cube
- sphere
- capsule

には標準単位が割り当てられている
直径が1単位なので、原点に配置しているSphereをPlaneの上に配置するには
Yを0.5単位上にずらすだけで良い（半径は0.5なので）

## 差別化

SphereとPlaneの両方があるけど、どっちも白い色なんでコントラストをつけましょう

色をつけるには**material(マテリアル)**が必要
※詳しい説明やテクスチャについては割愛
materialを保存するフォルダ(materials)をProjectビューで作成

フォルダを選択してProjectビューからCreate>materialを選択してmaterialファイル(*.matファイル)を作成する

色を変更して、濃い青色のmaterialを作る

![a3b11651-47cb-47ee-abda-5598c27fda7a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/fbaf2f98-7d2a-2329-3e9e-ad002814a330.png)


動画では**0,32,64(RGB)**のカラーを指定
作ったmaterialの色を適用させるには、ドラッグでオブジェクトに対して指定するだけ
動画ではGroundの色を変えているが、テンションが乗らない人は適当に変更して下さい

![8cb242eb-da51-421b-90fd-6017a192d177.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324639/e36c59b8-2774-24c4-56d5-cf0c335e1eeb.png)

床が青くなったので大勝利

## ライティング
Directional Lightを選択してRotationを変更して光の当たり方を変更して完了
今更Unity入門 玉転がしチュートリアル動画を追っかける

**「今更Unityっすか？情弱？」**という声が聞こえてきそうだが、始めるのに遅すぎる事はないって偉い人が言ってたので学習始めます。

# この記事の対象者
* ゲーム制作してみたいけど意味分かんない人
* 何から手を付ければいいかわからない人
* 入門書を買ったけど、結局やらなかった人

## Unityって何

https://unity.com/ja
~~すべての人に必要らしいです。~~
ざっくり言うと「ゲーム作成といえばこれ」ぐらい浸透している開発環境。
モストマスキュラー。
公式が全てなのでブックマークマークバーからはみ出るぐらいお気に入りに入れて下さい。

## 今回の食材
**玉転がし**
https://unity3d.com/jp/learn/tutorials/s/roll-ball-tutorial

公式が提供しているチュートリアル。
バージョンの関係で所々違う箇所があるが愛でカバー。
英語全く駄目な人はYoutubeの字幕機能で日本語にすれば意味がわかる。
いい時代ですね。

構成は以下の通り。

※イントロダクションは本当にイントロダクション（意味不明）なので、割愛します。
動画見て下さい。

各記事にリンクを貼る方法をやった事がないので、練習がてら作ってみます。
最後まで執筆するまで更新予定です。

**1. ゲーム画面の構成とプレイヤー**
    [01.ゲーム画面の構成](https://qiita.com/win-chanma/items/e66bae24a10f3a9cd3ea)
    [02.プレイヤーの移動](https://qiita.com/win-chanma/items/7745ba477141c7f97e23)

**2. カメラとプレイ領域**
    [01.カメラの移動](https://qiita.com/win-chanma/items/5276df782180feecb2a7)
    [02.プレイエリアの構成](https://qiita.com/win-chanma/items/fc1c7b29366823f7c30d)

**3. オブジェクトの収集、スコアの記録、ゲームのビルド**
    [01.収集するオブジェクトの作成](https://qiita.com/win-chanma/items/276bd621c6e7fd413c1b)
    [02.Pick Up オブジェクトの収集](https://qiita.com/win-chanma/items/45c7287f152cb1bb0600)
    [03.スコアとテキストの表示](https://qiita.com/win-chanma/items/5fcef97165253d679815)
    [04.ゲームのビルド](https://qiita.com/win-chanma/items/32b1f0c71a62f51fad5b)

**2019/11/24追記**
最後まで一応執筆出来ました

## 与太話

昔々、DirectXで格闘ゲームを作ろうと思って開発していたがあまりの作業量の多さに挫折した経験あり
（キャラ2人作った所で死んだ）
Gradle Build Scanを使ってみる

私は普段Androidの開発をしていますが、Gradleの機能でBuild Scanが便利そうだったので最近使い始めました。

で、QiitaにBuild Scan紹介記事が1件もなかった（※当社調べ）ので、まだ使ってる人あまりいないのでは？と思って記事にしました。

## Build Scanとは？
一言で言うと、「ビルドが通らない！」と他の人に相談したいとき、エラーログとか環境設定とか諸々をURLひとつで共有できる機能です。

## How to use
[Creating Build Scans](https://guides.gradle.org/creating-build-scans/)
[Get started with build scans](https://scans.gradle.com/?_ga=2.131930959.1550494474.1570447026-1415319631.1570447026#gradle)
この辺を読んで、Project rootのbuild.gradleに必要な記述をします。
Gradle 4.3以上なら不要らしいです。

```gradle:build.gradle
buildscript {
    ....
}

plugins {
    id 'com.gradle.build-scan' version '2.4.1'
}

buildScan {
    termsOfServiceUrl = 'https://gradle.com/terms-of-service'
    termsOfServiceAgree = 'yes'
    publishAlways()
}
```

あとはコマンドラインでProject rootに移動して、

```console
./gradlew build --scan
```
を実行します。

```console
BUILD FAILED in 4m 33s
341 actionable tasks: 302 executed, 39 up-to-date

Publishing build scan...
https://gradle.com/s/abcde1fghij2k
```

と出るのでURLにアクセスすると...
<p><a href="https://scans.gradle.com?_ga=2.131930959.1550494474.1570447026-1415319631.1570447026&amp;wvideo=2w8t4w7d2q"><img src="https://embedwistia-a.akamaihd.net/deliveries/1b7ebd97cf460466af06b6ec2c553a09.jpg?image_play_button_size=2x&amp;image_crop_resized=960x540&amp;image_play_button=1&amp;image_play_button_color=1ba8cbe0" width="400" height="225" style="width: 400px; height: 225px;"></a></p><p><a href="https://scans.gradle.com?_ga=2.131930959.1550494474.1570447026-1415319631.1570447026&amp;wvideo=2w8t4w7d2q">Getting started with build scans | Gradle Inc.</a></p>
続きはご自身の目でお確かめください（丸投げ）

## もっと詳しく知りたい/プライバシーとかどうなの？
[Gradle Terms of Service](https://gradle.com/legal/terms-of-service/)
[Gradle Build Scan Plugin User Manual](https://docs.gradle.com/build-scan-plugin/#accept_the_scans_gradle_com_terms_of_service)
[Removing published build scans from scans.gradle.com](https://discuss.gradle.org/t/removing-published-build-scans-from-scans-gradle-com/26309)
この辺に書いてあるらしいですが、まだしっかり読んでいないので、わかり次第追記します。

## その他参考サイト

[The one Gradle trick that supersedes all the others](https://blog.kotlin-academy.com/use-the-gradle-build-scan-875b384554d1)
文字列から日付型に変換できるか判定したい


```
var hiduke = "2019/12/31";
Datetime dt;

 if (!DateTime.TryParse(hiduke, out dt))
            {
                // {0}行目：日付を入力して下さい。
                throw new BusinessException("003508", Row);
            }

```

hidukeが変換できるかどうか
Date型に変換された値はdtに入る。
出来なかったらBusinessExceptionを通る。
wp2txtを使い捨てで使う

# wp2txt

機械学習における自然言語処理等のチュートリアルで「訓練データようにWikipediaを全文ダウンロードしてplain textにして使いましょう」というシーンで出てくるツールです。Rubygems で bin/ にインストールされる、Ruby のプログラム。

# この記事は

ぼくもまさに上述の流れで使おうと思ったのですが、ちょっと調べると付随するgemがいろいろインストールされるのでローカル環境でbundler使った方が良いよ、という記事をいくつか見ました。うん、確かにそのとおり。使わないgemをやたらシステムワイドにインストールするのは躊躇しちゃうし、wp2txt自体恐らくWikipediaをplain textに変換したらもう使わないだろうから、最後は `rm -r` あたりで全部まとめて簡単に消したいですもんね。

…が、そういう記事のとおりにやってもなぜかぼくの環境では

```shell-session
/usr/local/lib/site_ruby/2.5.0/rubygems.rb:284:in `find_spec_for_exe': can't find gem wp2txt (>= 0.a) with executable wp2txt (Gem::GemNotFoundException)
```

というエラーが出てうまく行きません。自分自身が bundler のしくみを良く理解していないのが原因と言えばそれまでなのですが、簡単な検索では解決法が出てなかったので同じエラーに悩む方がいるかも知れないと思いここに書いておきます。

# 解決策

wp2txt のスクリプトの先頭の辺りに `require 'bundler/setup'` と書く。それだけです。ようはbundler使ったスクリプトの標準的な書き方にすれば良いということです。

# 最初から順を追って手順解説 (面倒な人はここから読み始めればok）

まずは何はなくとも Ruby と bundler をインストールしてください。Ruby は各 OS の流儀で入れるとして、Bundler は `gem install bundler`で入るはずです。

さて本題。今から **『`tutorial`というフォルダを掘って > そこでwp2txtを使って > 終わったら消す』** という流れで解説します。

```shell-session
$ mkdir tutorial
$ cd tutorial
$ bundler init
Writing new Gemfile to /PATH_TO/tutorial/Gemfile
$ echo 'gem "wp2txt"' >> Gemfile
$ bundler install --path .        # ここでローカルディレクトリを指定すれば後腐れなく rm できる
```

ここまでで必要なファイルが `tutorial/ruby` 以下にインストールされます。`wp2txt` は `tutorial/ruby/2.5.0/bin/` 等に入っています (2.5.0の部分は各自の環境依存)。これを前項の『解決策』のとおり改変します。と言っても1行追記するだけです。

```ruby
#!/usr/bin/env ruby2.5
#
# This file was generated by RubyGems.
#
# The application 'wp2txt' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'bundler/setup'   # <- この1行を追記
require 'rubygems'

version = ">= 0.a"
```

あとは実行するだけでokです。`tutorial` にWikipediaをダウンロードしているならこんな感じ。PATHが通っていないのできちんと書く必要があります。

```shell-session
$ ./ruby/2.5.0/bin/wp2txt --input-file jawiki-latest-pages-articles.xml.bz2
```

# あとかたづけ

もうwp2txt使わないと思ったら、そのフォルダ (この例なら`tutorial`) 内の `ruby/`, `.bundle/`, `Gemfile`, `Gemfile.lock` を消してしまってokです。

```shell-session
$ pwd                # まとめて rm するときは念のため自分の居場所を再確認しましょう。
/PATH_TO/tutorial
$ rm -rf ruby .bundle Gemfile Gemfile.lock
```
# 参考

ちなみにwp2txtの場合、どんなgemが一緒にインストールされたか確認してみたらこんなでした。

```shell-session
$ ls ruby/2.5.0/gems/
htmlentities-4.3.4   nokogiri-1.10.4  trollop-2.9.9
mini_portile2-2.4.0  parallel-1.18.0  wp2txt-0.9.1
```
Google Cloud(GCP)環境にWordPressを導入する

なんとなくブログを始めてみようと思い立ち、最近試してみているGoogle Cloud環境にWordPressを入れてみたので、その手順。

（とりあえずざっくり手順。）

手順といっても簡単で、 Google Cloud の環境にはすでにWordPress入りの仮想マシンのイメージが用意されている。（なんて便利な世の中）

1. GCPのメニューから「Marketplace」を開いて「WordPress」で検索。クリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962/54072d58-c74e-f8e7-949a-be81042bafda.png)

1. 「COMPUTE ENGINE上で起動」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962/5787a45d-d8ff-9c04-bec5-549f4047b28d.png)

1. あとはポチポチ進めるとDeployment Manager経由でWordPress入りのLinux VMを作成、起動してくれる。最低限の設定はすでにされているので、デプロイ完了したら「Log into the admin panel」ボタンをクリックするとWordPressの管理サイトログイン画面が開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962/3898a9c0-58c4-8978-f0e1-a6ee716e9cd6.png)

　※ 「Log into the admin panel」ボタン の上の方に書いてある「WordPress Admin User」と「WordPress Admin password」でログインできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962/da0ced8f-fdbc-9c64-ac38-9317f5e982b7.png)

これだけでもうWordPressの設定に入れる。とりあえず試しに入れてみるだけならめちゃくちゃ簡単だな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962/8d103182-98a4-b3c0-56a2-a44a0341cb29.png)

ちゃんと使うとしたらStatic IPの設定、ドメインの設定なんかも必要だけど、とりあえず今回は割愛。また今度。

まずはWordPressの使い方を学ばなければ・・・・・
2019-10-08 Python  > PYTHONPATH > import対象のディレクトリ指定 (モジュール検索パス)

```txt:動作環境
CentOS Linux release 7.7.1908 (Core)
```

### PYTHONPATH?

- [Linux使用Moduler切换各种MPI环境](https://blog.csdn.net/kongxx/article/details/52253593)

OpenMPIのモジュールをmoduleコマンドでロードしようとしていたところ、`/etc/modulefiles/`が必要になるようだ。そのファイルには以下のような記述がある。

```
prepend-path            PYTHONPATH      /usr/lib64/python2.6/site-packages/openmpi-1.10
```

自分の環境には上記のようなディレクトリはない。

- [Pythonでimportの対象ディレクトリのパスを確認・追加（sys.pathなど）](https://note.nkmk.me/python-import-module-search-path/)

モジュール検索パスのようだ。

pipインストールした場合に`/usr/lib64/python2.6/site-packages`にディレクトリが追加されるのだろう。

現在構築中のシステムではpipインストールはしないので、ディレクトリがない。
gitignore_grobalを使おう　他

#gitignore_grobalを使おう

参考:
https://qiita.com/elzup/items/4c92a2abdab56db3fb4e

.gitigonoreはプロジェクトで共有すべきものなので
個人的なもの、環境的なものは書くべきでない。

ブランチ移動したときに漏れたりもするので、
別に分けて書いておいたほうがいい。

git addする時、git statusするときにも聞いてくるので


参考その2:
https://github.com/github/gitignore

ここに一般的に.gitignore対象になるものが
まとめてある


###git addしたあとやり直す時

`git reset ファイル名`でステージング解除できるので
基本その後編集して、ステージングをやり直す。


###git addは基本、commit直前に

個人的に、git addはcommitする直前にやろう。
commit前の目視確認も、`git diff`でやりやすいし、



###dotfilesを導入

ドットファイル増えたし、
これを機に入れてみました。


参考:
https://qiita.com/okamos/items/7f5461814e8ed8916870

kugyu10のdotfiles:
https://github.com/kugyu10/dotfiles
[iOS]証明書がなかったらどうなるのか

##なぜこの記事を書こうと思ったか
・iOSエンジニアなのに証明書の存在理由がいまいち分からなかったから
・証明書の扱いが煩雑でムカムカしていたから

##どういう人に向けて書いているのか
・証明書の恩恵を知らずに扱っている人
・ざっくりと証明書の存在理由について知りたい人

##二行要約

`・証明書技術がないとなりすましや第三者から簡単に攻撃されてしまう`
`・証明書を取り巻く暗号技術を用いることによって、安心安全に二者間で情報の受け渡しが可能になる`

##証明書がない世界

####なりすまし
<img width="935" alt="Screen Shot 2019-09-11 at 2 08 24" src="https://user-images.githubusercontent.com/46431586/64634823-1316da80-d439-11e9-862c-6b77db51da05.png">

####改ざん<img width="948" alt="Screen Shot 2019-09-11 at 2.03.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309711/e4f404a4-73be-f9ef-1039-4f644b284c31.png">

####盗聴
<img width="943" alt="Screen Shot 2019-09-11 at 2 03 19" src="https://user-images.githubusercontent.com/46431586/64634563-7b18f100-d438-11e9-8647-87ebe4ec3ff0.png">

####事後否認
<img width="947" alt="Screen Shot 2019-09-11 at 2.04.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309711/1fa5ce11-b5f6-ae03-95fe-89176fb507df.png">

####etc

信用が成り立たず、誰もインターネットに参加しない...

##証明書の仕組み
> サイバートラスト社に代表される信頼された認証局が、情報通信先のサーバのサイト運営組織が実在していることを証明し、WebブラウザとWebサーバ間（サーバ同士でも可能）でSSL（Secure Socket Layer）暗号化通信を行うための電子証明書です。
引用元: [SureServer](https://www.cybertrust.ne.jp/sureserver/basics/ssl1.html"SureServer")

つまり**信頼できる第三者機関が認めた身元証明**
それがあるから安心して見ず知らずの第三者とネットワークを通してやりとりできる
iOSアプリ開発の場合、Appleが信頼できる第三者機関として証明書発行を行ってiru
<img width="956" alt="Screen Shot 2019-10-08 at 0 58 54" src="https://user-images.githubusercontent.com/39009922/66328080-ec2fc380-e966-11e9-8307-3bde5d2b3f29.png">

##結論
証明書があるからこそ開発者は安心してアプリ配信ができるし、ユーザーも安心してアプリを使用できることがなんとなく理解できました。
今回の記事では、技術的なことは相当端折ったのですが、なんとなく雰囲気を理解してもらえれば幸いです。

##余談
暗号技術入門をマインドマップでまとめています。
証明書を構成する暗号技術についてもまとめているので、深いところまで気になる方はこちらどうそ。
[暗号技術マインドマップ](https://www.mindmeister.com/1314888075/_"暗号技術マインドマップ")
proposal-collection-normalization

## Profile

<img src="https://qiita-user-profile-images.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F127934%2Fprofile-images%2F1558357993?ixlib=rb-1.2.2&auto=compress%2Cformat&lossless=0&w=300&s=5680c7c3e731dcc74dc2e6f5eb18d267" width="120px" />
・simochee <sub>(しもちぃって読みます)</sub>
・フロントエンドエンジニア
・[Qiita (simochee)](https://qiita.com/simochee)
・[Twitter](https://twitter.com/lollipop_onl)

---

## [proposal-collection-normalization](https://github.com/tc39/proposal-collection-normalization)

*Stage 2*

**Map/SetへKeyとValueを正規化する<br>`coerceKey`と`coerceValue`の追加**

---

### ※以降、実際に動かしてはいません

---

## Keyの正規化①<br>オブジェクトのKeyをKeyとして設定する

```ts
const profile = { email: 'simochee@example.com' };

const pointMap = new Map(undefined, {
  coerceKey: ({ email }) => email,
});

pointMap.set(profile, 1200);

pointMap.get('simochee@example.com'); // 1200
```

---

## Keyの正規化②<br>Keyを文字列化させる

```ts
const map = new Map(undefined, {
  coerceKey: String,
});

map.set(1, 'simochee');
map.has(1); // true

// map.has('1') // true? false?

[...map.entries()]; // [['1', 'simochee']]
```

---

## Valueの正規化①<br>データをインスタンス化させる

```ts
const map = new Map(undefined, {
  coerceValue: (user) => {
    return user instanceof UserModel
      ? user
      : new UserModel(user);
  },
});
```

---

## Valueの正規化②<br>不正なインスタンスの場合エラーにする

```ts
const map = new Map(undefined, {
  coerceValue: (user) => {
    if (!(user instanceof UserModel)) {
      throw new TypeError('データの方が不正です');
    }

    return user;
  },
});
```

---

## References

* https://github.com/tc39/proposal-collection-normalization
capybaraとselenium-webdriverとは

# capybaraとselenium-webdriverとは

## capybara
統合テスト（Feature Spec/フィーチャースペック）を書くときに、ブラウザにを仮想的に操作するためのgem。
細かい動作まで検証できる。

## selenium-webdriver
capybaraはシンプルなブラウザシミュレータ(つまりドライバ)を使って、 テストに書かれたタスクを実行していきます。このドライバは Rack::Test というドライバで、速くて信頼性が高いのですが、JavaScript の実行はサポートしていません。
javascriptをテストするためにselenium-webdriverというgemをを使います。

CapybaraでもデフォルトのJavaScript ドライバになっていて、
デフォルトでは Capybara は selenium-webdriver に対して Firefox を使ってテストを実行するように伝えます。ですのでChromeを使いたい場合はそのように設定しなければなりません。
Cognos Analytics で監査ログDBをセットアップする時に通信をTCPにする

#監査ログDBのセットアップ時の注意点
恐らく世の中の99%のCognos環境はやってないのではないかと思う話です。
Cognos Analyticsで監査ログをDBに出力している環境は多いと思いますが、Cognos Configurationで監査DB接続を設定する際の、この「ログ記録」の箇所で、「TCPを使用」は「有効」に変更するのが推奨だそうです。※デフォルト「無効」
<img width="675" alt="001.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/3f83465f-c49e-c1f3-6761-ec32460f282f.png">

確かに、マニュアルにはこう書いてますね。
<img width="665" alt="002.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/526dc046-2e0d-4367-3fba-217f34a52df9.png">

**Specify the Log Messages Repository for IBM Db2 on UNIX, Linux, or Windows**
https://www.ibm.com/support/knowledgecenter/SSEP7J_11.1.0/com.ibm.swg.ba.cognos.inst_cr_winux.doc/t_cnfg_log_mes_dest.html#cnfg_log_mes_dest

わたしも知らんかったです。。。
確かに、今どきUDPを通信で指定しているのってあまり見ないですよね。
「マニュアルに書くくらいだったら、製品のデフォルト変えておけよ！」というのが全会一致の意見だと思いますが、まあそういう事の様なので覚えておいて、今後はセットアップ時に気を付けましょう。
2019-10-08 CentOS7.7 > module > Lmodのインストール (moduleコマンドが使えなくなったenvironment-modules.x86_64の代替)

```txt:動作環境
CentOS Linux release 7.7.1908 (Core)
```

### 関連

- [2019-10-07 CentOS 7.7 > module > CentOS6.9で使っていたmoduleコマンドが見当たらない | Lmodパッケージ](https://qiita.com/7of9/items/3504ac2ad05663593bbb)

### Lmodのインストール

```
$sudo yum install Lmod
```

再起動後にmoduleコマンドが実行できることを確認した。

```shell
$ module avail

-------------------- /usr/share/lmod/lmod/modulefiles/Core ---------------------
   lmod    settarg

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching
any of the "keys".
```

### 参考

- [Environmental-Modulesを止めてLmodに移行した](http://msyksphinz.hatenablog.com/entry/2018/11/04/080000)
    - by @msyksphinz さん
- [EasyBuild software for environment modules on CentOS](https://wiki.fysik.dtu.dk/niflheim/EasyBuild_modules)

情報感謝です。
【個人開発】プログラミングを勉強したので誰かの書き込みを表示するだけのWebサイトを作った

kotoniwa

https://tzanarkand.com




# 何をするwebサイトなのか
ユーザーそれぞれが好きな言葉を書き込む、そして画面をクリックすると誰かが書いた言葉がランダムでぼんやりと出てくるだけのサイト。

![スクリーンショット 2019-10-04 1.54.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508079/a20b6a42-f4e1-9e0f-696e-6f410d2663a0.png)
![スクリーンショット 2019-10-04 1.57.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508079/e00ba3db-fefe-8590-a968-f8179f35e1db.png)



#使ったもの
ruby
rails
javascript
jquery
Nginx
unicorn
postgresql


# 自分のスキル
専門学校でサーバーとネットワークの勉強をしていたけど、プログラミングの経験はほぼ0（シェルスクリプトちょっとやったかなくらい）。

他人が書いたrailsアプリを自分が立てたapacheサーバーで公開した事はある。

railsもjavascriptもコードを見たことはあります程度。

自分で1からコードを書いてというのはこれが初めて。

# 勉強したこと

udemyでjavascriptとrailsとhtmlとcssの講座を購入してみたけど最初にざっと見ただけであまり活用しなかった。結局これ実際にやってみないとよくわからないな、と思ったので。

実装したいと思ったことをその都度ググって、よくわからなかったらそこを深掘りして、みたいな感じで作りながら学習を進めた。

# 作るまでの流れ
現在はサーバー運用系のお仕事をしていて、web系の方に転職してみようかなという思いが出てきたのでとりあえず何かを作ってみることに。

今まで自分で一からwebサイトを作ったことはなかったのであんまり難しいことをやろうとすると挫折するだろうと思い、とにかくシンプルなものを作りたかった。


wikipediaをランダムで表示したりするやつとかのランダム系のサイトが好きだったのでそんな感じのをイメージしていて、「なんでも好きに書いていい」となった時に皆がどんなことを書くのかに興味があったのでこれを作ろうと思った。




# 感想
とりあえず公開まで持っていけてよかった。
こんな簡単な感じのサイトでもここまで躓きポイントが大量にあるのか…と思ったので、作ろうと思っても途中で諦めてしまう人は大量にいると思う。
次はもうちょい真面目なwebサービス感のあるサイトを作る予定。
もっと技術つけてはやく転職したい。
アメリカで起こっている働き方改革　”急成長するフリーランス市場” で望まれるスキルとは！？

# アメリカではフリーランスが正規雇用を超える


### 2027年には[フリーランスの人口が正規雇用を超える予測](https://wisdom.nec.com/ja/business/2018070301/images/002.jpg?teal_wdm=016d61e054390015db4d200b0f7b0307800620700093c)がある。
#### [近年の米国の雇用人口の増加はフリーランスに依存](https://wisdom.nec.com/ja/business/2018070301/images/001.jpg?teal_wdm=016d61e054390015db4d200b0f7b0307800620700093c)している傾向もある



#### フリーランスの増加は望むべき方向か？


#フリーランスマーケットプレースの増加



#日本でフリーランス人口は増えるか！？

２００９年のリーマンショックに寄る”派遣切り”が横行した時代があり、派遣にはネガティブなイメージもあるが、

日本に於けるフリーランスマーケット、

















[参考：北米トレンド](https://wisdom.nec.com/ja/business/2018070301/index.html?elq_mid=2287&elq_cid=557016&elq_cpid=1033)
Rails on Railsにおける命名規則

#目的
Ruby on Railsを使ってコントローラーやモデルを作成する際の命名規則を備忘録のためにまとめておく

#命名規則
######コントローラー

| 名 | 命名 | 
|:-----------:|:------------:|
| コントローラー名 | tasks |
| コントローラークラス名 | TaskController |
| ファイル名 | tasks_controller.rb |

######モデル

| 名 | 命名 | 
|:-----------:|:------------:|
| モデル名 | task |
| モデルクラス名 | Task |
| モデルファイル名 | task.rb |
| テーブル名 | tasks |

#ポイント
コントローラーを作成するとき、コントローラー名は**複数形**
モデルを作成するとき、コントローラー名は**単数形**