OmniAICreator/Qiita-1.07M huggingface dataset:
【要約】人生が変わる メンタルハック大全

## 1. はじめに

以下書籍の要約。

- 題名：[人生が変わる メンタルハック大全](https://www.amazon.co.jp/%E4%BA%BA%E7%94%9F%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8B-%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AB%E3%83%8F%E3%83%83%E3%82%AF%E5%A4%A7%E5%85%A8-%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AA%E3%82%B9%E3%83%88DaiGo/dp/4860087895/ref=sr_1_1?ie=UTF8&qid=1548591494&sr=8-1) 

- 著者：DaiGo
- 出版：セブン&アイ


## 2. ビジネス

##### 2-1. 仕事の効率を上げる「90分+20分」サイクル
- 仕事の効率を上げるには**仕事90分+休憩20分**のサイクルがベスト。人間は90分で集中力が低下することが分かっている。**ウルトラディアンリズム**と呼ばれている。

##### 2-2. 毎日の目標設定で仕事の疲労が消える
- 仕事の疲労を消すには**毎日の目標を設定する**こと。今日はここまでやったからOKという風に、やり残し感をなくすことで仕事の疲れをたまりにくくできる。睡眠の質もあがる。

##### 2-3. 成功する準備方法
- 目標を達成するためにやるべき行為、本当に意味のある行為は**目標に近づく度に自分にご褒美を設定する**こと。

## 3. コミュニケーション

##### 3-1. 好かれる話し方
- 相手の話していることの最後の部分だけを繰り返してリアクションをとってあげるだけで親密さが増す。
- 他人のことを積極的に褒める**ポジティブ・ゴシッピング(前向きな噂話)**をする人ほど、相手から親密感をもたれる傾向がある。逆に、第三者のネガティブな噂話をする人ほど嫌われる。

##### 3-2. 相手と仲良くなる方法
- 仲良くなりたい人とは2人きりで3回会う。人は仲良くなろうと意識して3回会えば、イメージが固定されることいことが分かっている。これを**スリーセット理論**と呼ぶ。3回会って仲良くなれなければ脈がない。逆に1回で仲良くなれなかったとしても3回は挑戦すべき。
- 相手と仲良くなる簡単な方法は**プライベートな話**をすること。自分が自己開示をすれば相手も自己開示をしてくれる。これを**自己開示の返報性**と呼ぶ。

##### 3-3. 職場の仲間を大切に
- 職場に3人以上の友人がいると人生の満足度が96%上昇する。また、職場にお互いに尊重し合えるような最高の親友がいる場合は、仕事へのモチベーションが700%上昇する。職場の仲間を裏切るような行為は絶対に避けるべき。困っている人がいたら進んで助けるようにすると、人間関係がいつも良好になる。

##### 3-4. 「頻度」で人を操る
- 人間は**接触回数(頻度)**が多くなると親しみを感じやすくなる。これを**ザイアンスの法則**と呼ぶ。テレビによく出ている芸能人が魅力的に見える理由もここにある。振り向いてほしい人、気に入られたい人がいるならシンプルに接触回数を増やすべき。

## 4. プライベート

##### 4-1. 本を5分で読む方法
- 本1冊に含まれる必要な情報は7%～11%。得られる有益な情報は全体の約1割となる。読書とは、文字を追う作業ではなく、**自分にとって必要な1割を迅速に見つけ出す作業**となる。これを意識することで、読書のスピードは格段に上がる。

##### 4-2. 「あなたがいないと生きていけない」と言わせる方法
- 「あなたは家庭的ですよね」のように、**断定的に言うこと、ポジティブな要素を含めること、自分だけに向けられたことばだと感じさせること**で、相手の内側の面を褒めることができ、心をつかむことができる。これを**フォアラー効果**と呼ぶ。

##### 4-3. 情報を選んでメンタルを守る
- 炎上系や悲しいニュース等、ネガティブな情報に接すれば接するほど**受動ストレス**がたまり、メンタルへのダメージも大きくなる。これは自分で自分を傷つけていることと同じ。ネガティブな情報に触れれば触れるほどネガティブな人間になることが分かっている。**ネガティブな情報は避ける**べき。

##### 4-4. 休日を計画的に過ごすと仕事のやる気が11週間続く
- 休日を充実させることで、仕事のやる気が劇的にアップする。同じように休日をとっていても、疲れがとれない人、やる気が続かない人は休み方が下手。休日を上手に過ごすには、**①実行可能な計画を立て、②それに挑戦し、③思った通りに行動できたと感じること**。予定の詰め込み具合は、できると思った量の半分くらいが適量。
Spring Session JDBC(Postgres)

```pom.xml
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-jdbc</artifactId>
</dependency>
```

```application.properties
spring.datasource.url=${DATABASE_URL} ★もともとあったもの、Heroku Postgresの環境変数を参照、publicスキーマ以外にしたいなら「currentSchema」を指定

spring.session.store-type=jdbc
spring.session.jdbc.initialize-schema=always
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-postgresql.sql
```

https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-jdbc.html#httpsession-jdbc-boot-spring-configuration
zeroMQに接続してカタパルトのブロックが作成されたことを通知してもらう

# はじめに

カタパルトのAPIでは、例えば送ったトランザクションが承認されたことを検知したければ、WebSocketを使うやり方が提供されています。

アプリケーションとAPI間の通信はWebSocketですが、APIとノード間の通信はどうでしょうか。

どうやら、zeroMQを使っているようです。

特に使う予定はないですが、あるということで接続してみます。とりあえずblockをサブスクライブしようと思います。

# 設定

[tech-bureau/catapult-service-bootstrap](https://github.com/tech-bureau/catapult-service-bootstrap)でカタパルトを起動するとします。

docker-compose.ymlのapi-node-0サービスのところで、7902ポートを接続します。

```yaml:docker-compose.yml
  api-node-0:
    build: dockerfiles/catapult
    command: bash -c "/bin-mount/wait /state/api-node-0-nemgen && /bin/bash /userconfig/startServer.sh"
    stop_signal: SIGINT
    ports:
    - "7902:7902"
    volumes:
    - ./build/catapult-config/api-node-0/userconfig/resources/:/userconfig/resources/
    - ./data/api-node-0:/data:rw
    - ./bin/bash:/bin-mount
    - ./build/state:/state
    depends_on:
    - generate-configs
    - api-node-0-nemgen
```

あとは、サーバーのほうも、同じポート開放をしておきます。

# Node.js

こちらのコードを参考にします。

http://zguide.zeromq.org/js:wuclient

```javascript
require('dotenv').config();
const host = process.env.HOST || 'tcp://127.0.0.1:7902';

// weather update client in node.js
// connects SUB socket to tcp://localhost:5556
// collects weather updates and finds avg temp in zipcode

var zmq = require('zeromq');

console.log("Collecting updates from weather server…");

// Socket to talk to server
var subscriber = zmq.socket('sub');

subscriber.connect(host);
subscriber.subscribe(Buffer.from("496aca80e4d8f29f", "hex"));

subscriber.on('message', function(topic, message) {
    console.log('received a message related to:', topic.toString('hex'), 'containing message:', message.toString('hex'));
});
```

まず、`var subscriber = zmq.socket('sub');`で、これがpub/subのsub側だと定義しているような気がします。

次に、`subscriber.subscribe(Buffer.from("496aca80e4d8f29f", "hex"));`で、ブロックが生成されたら教えてくれって言ってるんだと思います。

`496aca80e4d8f29f`という謎のバイト列は、以下からとってきました。直書きされてるので、由来がわかりません。

https://github.com/nemtech/catapult-rest/blob/master/rest/src/connection/MessageChannelBuilder.js#L37

ちなみに、confirmAddedとかだと、`61`にhexアドレスをくっつけたものになるみたいです。

# 実行

```
node sample2.js
Collecting updates from weather server…
received a message related to: 496aca80e4d8f29f containing message: e000000014cf8b06e9677a42df5fc8bf6ed70171970295f758333b9e1e930c13d518a20fe69836290c04e52f7801160d6226dec949634efad63e7cbe4ccab9838933070bf6791558f86af5822400b648442ef7d39c92bfd5a453d1d8ae472d5a1098826203904381f80400000000000061cdbabf1400000000a0724e18090000734404f55728e7dd1b9d91161712e3a473f0ff2d285c81c2f5d5d88365f8126900000000000000000000000000000000000000000000000000000000000000005d0bfd359447a8f637e2261fd619d671cbc0bc49f0b190cce0ac53e27e826d3a
```

あとはブロックが生成されると行が増えていきます。

ブロックがバイト列で表示されるので、パーサーが必要そうです。

とりあえず、空ブロックのバイト列だったら調べてみたので、参考までに。

https://qiita.com/planethouki/items/da717595a1ff58d0d84f

# おわりに

これとWebHookとか組み合わせた通知サーバーとか作ることができるんじゃないかと思います。でもその場合は、zeroMQじゃなくてWebSocketのほうでもよいかもしれません。

zeroMQは組み込みで使われているそうなので、IoTとかによいかもしれません。
AutoML API呼び出し時エラー TypeError: __new__() got an unexpected keyword argument 'serialized_options'対処法


###AutoML API呼び出し時エラー

```
raceback (most recent call last):
  File "predict.py", line 4, in <module>
    from google.cloud import automl_v1beta1
  File "/anaconda3/lib/python3.6/site-packages/google/cloud/automl_v1beta1/__init__.py", line 19, in <module>
    from google.cloud.automl_v1beta1 import types

  File "/anaconda3/lib/python3.6/site-packages/google/cloud/automl_v1beta1/types.py", line 22, in <module>
    from google.api import http_pb2
  File "/anaconda3/lib/python3.6/site-packages/google/api/http_pb2.py", line 22, in <module>
    serialized_pb=_b('\n\x15google/api/http.proto\x12\ngoogle.api\"T\n\x04Http\x12#\n\x05rules\x18\x01 \x03(\x0b\x32\x14.google.api.HttpRule\x12\'\n\x1f\x66ully_decode_reserved_expansion\x18
\x02 \x01(\x08\"\x81\x02\n\x08HttpRule\x12\x10\n\x08selector\x18\x01 \x01(\t\x12\r\n\x03get\x18\x02 \x01(\tH\x00\x12\r\n\x03put\x18\x03 \x01(\tH\x00\x12\x0e\n\x04post\x18\x04 \x01(\tH\x00\x1
2\x10\n\x06\x64\x65lete\x18\x05 \x01(\tH\x00\x12\x0f\n\x05patch\x18\x06 \x01(\tH\x00\x12/\n\x06\x63ustom\x18\x08 \x01(\x0b\x32\x1d.google.api.CustomHttpPatternH\x00\x12\x0c\n\x04\x62ody\x18\
x07 \x01(\t\x12\x15\n\rresponse_body\x18\x0c \x01(\t\x12\x31\n\x13\x61\x64\x64itional_bindings\x18\x0b \x03(\x0b\x32\x14.google.api.HttpRuleB\t\n\x07pattern\"/\n\x11\x43ustomHttpPattern\x12\
x0c\n\x04kind\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\tBj\n\x0e\x63om.google.apiB\tHttpProtoP\x01ZAgoogle.golang.org/genproto/googleapis/api/annotations;annotations\xf8\x01\x01\xa2\x
02\x04GAPIb\x06proto3')
TypeError: __new__() got an unexpected keyword argument 'serialized_options'
```
以下の記事を参考に、protobufを3.6 に更新すれば解決したら解決しました。（自分のはprotobuf 3.5.2でした。。）
[ObjectDetecionAPI TypeError: __new__() got an unexpected keyword argument 'serialized_options'](https://stackoverflow.com/questions/50338968/objectdetecionapi-typeerror-new-got-an-unexpected-keyword-argument-seria)

```
#コマンド
pip install -U protobuf
```

割とよく分かんないエラーだったので、記述しておきます。
定期的に出勤管理の月末処理依頼を全員にメールする

作成理由
・自動でメールを送信し、各個人の勤怠管理の締め処理を促したい
目指す機能
・勤怠管理システム自体に手を加え、締めを実行していない人にメールを自動で出すようにしたい
　→修正するための技術が現時点では足りないため、見送り
・自動で全員にメール送信を行い、締め処理を促す
　→バッチを作成し、Windowsのスケジューラーで実行するなら負荷が少なそうなので、この方針で作成

2019/01/27時点での作業です。
やるべきこと
1、SMAILの導入
　a、SMAILの圧縮ファイルを下記LINKからダウンロードする。
　https://www.picolix.jp/page3.html
　b、SMAILのインストール
　ダウンロードした圧縮ファイルを解凍し、その中にあるSMAIL.exeを実行する
　c,下記URLを参考に、「SMTPユーザID」と「SMTPパスワード」を設定、保存して終了する（他はデフォルトで行けるはず）
　https://jj-blues.com/cms/wantto-sendmailinbatfile/
2、バッチの作成
　a、コンテンツファイルの作成
　メール本文を作成し、SMAIL.exeと同じフォルダに配置してください
　b、「sendmail.bat」というファイルを作成し、以下の内容を修正して保存してください。
　"SMTPの文字列"：利用するSMTPの指定
　"送信先のメールアドレス"：送りたいメールアドレスを記載。カンマ区切りで複数の宛先指定が可能。
　"題名"：メールの題名を指定してください
　"コンテンツファイル名"：aの手順で作成したファイル名を指定してください
　"送信元メールアドレス"：送信元のメールアドレスを指定してください
<pre>
echo off
smail -hsmtp-"SMTPの文字列" -f"送信先のメールアドレス" -s"題名" -F"コンテンツファイル名" "送信元メールアドレス"
echo %DATE% %TIME%:%ERRORLEVEL% >> send.log
</pre>
3、Windowsのタスクスケジュールに登録する。
　以下URL参照でタスクスケジューラに登録する。
　http://minto.tech/windows-taskscheduler/
　社内の環境で試せたのが2番までだったので、ここから先は手抜き；；

以上になります。
ページ制作時間：およそ30分。（社内で実際に試した時間は除く）
[Resharperチュートリアル.テンプレート]ファイルテンプレートの使い方と作成方法(例：テストクラスの雛型を作成する)

## はじめに(雑記)
初投稿はResharperの使い方の一部、しかもファイルテンプレートという端っこの方の機能について。。家でプログラミング環境を整えていて、そのついでにスクショを撮っておいてその方法を共有していくというスタンスなので、しばらくは行き当たりばったりに投稿することになりそう。
#ファイルテンプレートとは？

- ファイルの雛型を作ってくれる。
- 例えばデフォルトで用意されているファイルテンプレートを使ってClassファイルを作成するには...

 1.ソリューションエクスプローラのクラスを作成したい場所でAlt + Ins
 2.メニューのClassをクリック
![FileTemplate1.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/d2573508-96f0-c8de-3a84-f2b2efa2171d.jpeg)

 3.クラス名を入力してOK
 ![FileTemplate2.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/da3a0ea9-db0e-a27a-9463-9b0811e71720.jpeg)

　→ファイルが生成される
 ![FileTemplate3.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/51e79d27-0412-cfd3-501b-95b8ddcb1f24.jpeg)

- これにより通常の右クリック→追加...→ウィザード...という手順より少ない手順で高速にファイルを生成できる。
- そしてこのような仕組みを自分で作ることができるのでその手順を説明してみる。

#例：MSTest用のTestクラスのテンプレートを作成する
- 公式：ファイルテンプレートの作成
https://pleiades.io/help/resharper/Creating_a_File_Template.html
- なんでnUnitでもxUnitでも無いのかというのは本題から外れるので割愛。。

## 作成手順
1.Resharperメニュー→Tools→Templates Explorer...をクリック
![create1.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/b8a5f102-dce4-a18b-c445-49f14186e9ee.jpeg)

2.Templates Explowerが開くので、File Templatesタブを選択し、新規ボタンをクリック
![create2.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/bdb0918f-a45f-cc3d-990a-58733ce6725b.jpeg)

3.Visual Studioのエディタを以下のように編集(MSTestの場合)して保存
![create3.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/882ae6ae-1ccb-d3f8-05c5-0bae3105c876.jpeg)

- Default file name: {Hoge}.csとする。
 - ※編集し忘れるとデフォルトNewFile.txtなのでテキストファイルが生成されてしまう。。デフォルト.csでええやん。。　
- $で囲まれた部分は変数となる。
 - nameSpace:※マクロでDefault namespace for currentFileを指定。Editableのチェックを外す
 - className:マクロでCurrent file name without extensionを指定。Editableのチェックを外す

※マクロの指定：(2013年頃から使ってるけど未だに選びにくい。。
![create3Macro.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/67be42fc-e4b6-4fb9-692c-7763d936ec72.jpeg)

4.そのままだとソリューションエクスプローラでAlt+Insを押した時にすぐには選択できず、[More...]ボタンを押さなければリストに出てこなくて不便なので...
![create4-1.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/996adf40-7e6c-7d6e-86cb-130fa361126a.jpeg)

ドラッグ＆ドロップでクイックリストに移動する
![create4-2.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/0942cd2e-2dac-f676-78a1-0eb74faadb39.jpeg)

これによりクイックリストに出るようになる
![create4-3.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/ad7b5cdc-ed80-c9af-635c-cbc7f4195f1d.jpeg)

##　作成したファイルテンプレートTestClassを使う
1.ソリューションエクスプローラで作成したい場所を選択してAlt + Insert
![Use1.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/dba36e0b-c305-1912-f898-514c68d0e860.jpeg)

2.テストクラス名を入力してOK
![use2.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/975daa78-5047-230c-471e-2fa444ee6d0d.jpeg)

→テストクラスが生成される
![use3.JPG](https://qiita-image-store.s3.amazonaws.com/0/350409/8952fdc3-6bf3-285f-2a4a-f83d51c46d89.jpeg)

それでは良いプログラミングライフを ﾉｼ
画面に好きな文字を表示してみよう

前回:https://qiita.com/New_enpitsu_15/items/ee95bde0858e9f77acf0
次回:https://qiita.com/New_enpitsu_15/items/3e8993057bafc425df1b
目次:https://qiita.com/New_enpitsu_15/private/479c69897780cabd01f4


#Hello world

プログラミングを始める第一歩。
まずは、`適当なファイル名.py`というファイルを作って
適当なテキストエディタで開いてみましょう。

そしたら、

```python:file.py
print("Hello world")
input()
```

と書いて、保存。実行してみてください。(ファイルをダブルクリックすれば実行されます。)

`Hello world`と黒い画面に表示されましたか？
![2019-01-27 (2).png](https://qiita-image-store.s3.amazonaws.com/0/283963/31b96942-f8eb-e24e-d678-9ec29d3ff378.png)

表示されたら、あなたはもうパイソニアです。
これから解説サイトを片手にプログラムを楽しんでいきましょう。

#ナポリタンが食べたい

ひとまず、先ほどのファイルを表示してください。

```python:file.py
print("ナポリタンが食べたい")
input()
```

と書き換えて実行してみましょう。
`ナポリタンが食べたい`と画面に表示されたはずです。

では、最後にあなたの好きな食べ物の名前を表示してみましょう。
できましたか？わからなかったらコメントで聞いてくださいね。

#解説

ここからは疑問を持った人向け。

###print()

`print`という関数は、`()`内の文字を表示します。
例えば`print("ナポリタン")`だったら、`"ナポリタン"`と表示されるはず…
いいえ、`ナポリタン`と表示されます。なぜでしょう？

それは、ダブルクオーテーション`"`とシングルクオーテーション`'`は文字列を表す文字だからです。

詳しくは次回説明するので、今は`""`か`''`で囲わなければならないのだと思っておいてください。

###input()

`input()`という関数は私たち(ユーザー)からの入力を待つ関数です。
試しに、

```Python
print(input("入力:"))
input()
```

というファイルを作り、実行してみてください。
黒い画面に入力した文字が、もう一度表示されましたね。

私たち(ユーザー)からの入力がprintに渡されました。

ですが、最後の行の`input()`は何でしょう？
これは、画面をとどめておくために書いているものです。では試しに

```Python
print("Hello world")
```

だけで実行してみましょう。どうですか？
「実行できない」、「黒い画面が出てすぐ消えてしまう」という感想を持ったでしょう。
これは、`print("Hello world")`を実行したら__すぐに__プログラムが終了して__画面が閉じてしまうから__です。

そのため、`input()`でユーザーからの入力を待つことにより一旦処理を停止して、画面が閉じないようにしているのです。

#次回は…

文字列と数字について説明します。
@escapingを理解するための簡単なサンプルコード

クロージャがスコープから抜けても存在し続けるときに @escaping が必要になります。
具体的には以下のような場合です。

- クロージャがスコープ外で強参照されるとき
- クロージャを非同期的に実行するとき

よってクロージャをすぐに実行し、どこからも強参照されない場合は @escaping は必要ありません。



``` swift
import UIKit

class ViewController: UIViewController {
    
    var myCallback: () -> () = {() in }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.first(callback: { () -> Void in
            // second(callback2:)内で呼び出される
            print("5")
        })
        
        print("3")
        
        // second(callback2:)で渡したCallback用Clousureが実行される
        myCallback()
    }
    
    // 1. viewDidLoadから実行される
    func first(callback: @escaping () -> ()) {
        print("1")
        
        self.second(callback2: { () -> Void in
            // ViewControllerのmyCallback()が実行される
            print("4")
            
            // first(callback:)の引数から受け取った
            // Callback用Clousureを実行
            callback()
        })
    }
    
    // 2. first(callback:)から実行される
    func second(callback2: @escaping () -> ()) {
        print("2")
        
        // グローバル変数にcallback用Clousureを格納
        // (実行するわけではない）
        self.myCallback = callback2
    }
}
```

##　実行結果

```
1
2
3
4
5
```

## 参考
[Swift 3 の @escaping とは何か - Qiita](https://qiita.com/mishimay/items/1232dbfe8208e77ed10e)
py2app でtkinterを使ったpythonアプリのexecutable fileを作る

##使用環境##
macOS Mojave version 10.14.2
python 3.7.1
tkinter 8.6
py2app 0.19

##あらすじ##
UdemyのPythonの授業を受けていて、tkinterを用いたデスクトップアプリケーションを、standaloneのexecutable fileにする講座を見た。しかし、講座内でしようしていたpyinstallerはmac osではバグが報じられておりexecutable fileが作れたものの後ろでTerminalも一緒に起動してしまった。
Terminalを起動させたくなく、他の方法を探したのち、py2appにたどり着く。

[こちら](https://media.readthedocs.org/pdf/py2app/latest/py2app.pdf)のpy2appのドキュメンテーションを元にsetup.pyを作り、
`python setup.py py2app`
をターミナルで実行するも、

`ValueError: '/Users/home/miniconda3/lib/libpython3.7.dylib' does not exist`
というエラーが出てくる。


なお、executable fileはできていたため、起動してみると


*A python runtime not could be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this application's Info.plist file.*

というエラーが出てきた。

##解決策##
https://qiita.com/komi5320/items/a089b320bec8599253d1
こちらの記事、参考にさせていただきました。

上記の記事にも書いてあるように、setup.pyの中の
`OPTIONS =`
の中に
`OPTIONS = {'argv_emulation':True,
    'plist':{
    'PyRuntimeLocations':[
        '@executable_path/../Frameworks/libpython3.7m.dylib',
        '/***/lib/libpython3.7m.dylib'
    ]
    }}`

というコードを挿入する。
***の部分はPCによって異なるため、ターミナルに

`locate libpython`

と打ち込んで
`libpython3.7m.dylib`
を探す。（他の結果が大量に出てきて探すのがやや大変だが、そこは目を凝らしてなんとか）

そして見つけたpathを上記のコードに挿入して再び
`python setup.py py2app`
を起動する。
この時、　
`rm -rf build dist`
をしてbuild と distディレクトリを消去しておく。

setup.pyを実行した後、自分の場合は
`ValueError: '/Users/home/miniconda3/lib/libpython3.7.dylib' does not exist`
というエラーが出てくるのに代わりはなかったものの、distディレクトリに入ってるアプリは難なく起動
したため、一応問題は解決できた。

なお、上記のエラーを解決できるかたがいましたら、教えていただけると幸いです。


###他に参考にしたサイト###
https://stackoverflow.com/questions/39379155/how-do-i-use-py2app-with-anaconda-python
https://www.metachris.com/2015/11/create-standalone-mac-os-x-applications-with-python-and-py2app/

現在受講しているUdemyのコース
https://www.udemy.com/the-python-mega-course/
plantuml-server を HTTPS + Basic認証で使う方法

# plantuml docker/nginx SSL

- plantuml-server を docker で起動する
- nginx + SSL で HTTPS 通信にする
  - 本手順では証明書は適当に作っているので、ちゃんと使いたい人はちゃんとしたのを入れる
- nginx + Basic 認証の設定を入れる
- nginx の ORIGIN は bitbucket にしていますが、適宜変える

## Install docker to Amazon AMI

- Amazon Linux 2 AMI (HVM), SSD Volume Type 
  - t2.micro
  - port 18080, 22(close after setup)
  - Elastic IPは振った方がいいでしょう

```
ssh -i XXX.pem -l ec2-user <IP Address>

sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user
```

## Create docker image

```
mkdir plantuml-server
cd plantuml-server

mkdir -p etc/nginx
mkdir key

touch Dockerfile
touch etc/nginx/plantuml.conf
```

### Dockerfile

```
FROM nginx
MAINTAINER tsujimitsu <tsujimitsu@gmail.com>

# set nginx config
COPY etc/nginx/* /etc/nginx/conf.d/
COPY key/* /etc/nginx/
```

### plantuml.conf

```
upstream plantuml-server {
    least_conn;
    server plantuml-server:8080 weight=5 max_fails=3 fail_timeout=30s;
}

server {
    listen      8080 ssl;

    ssl_certificate /etc/nginx/server.crt;
    ssl_certificate_key /etc/nginx/server.key;

    location / {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;

        add_header Access-Control-Allow-Origin https://bitbucket.org always;
        add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
        add_header Access-Control-Allow-Headers "Authorization,Content-Type,Origin,Accept,X-Requested-With" always;
        add_header Access-Control-Allow-Credentials "true" always;

        if ($request_method = OPTIONS ) {
            add_header Content-Length 0;
            add_header Content-Type "text/html charset=UTF-8";
            return 204;
        }

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host      $http_host;
        proxy_pass                 http://plantuml-server;

    }
}
```

### Create SSL certification

```
cd key
openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
  JP
openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
```

### Create .htpasswd

```
cd key
printf "foo:$(openssl passwd -crypt bar)\n" >> .htpasswd
```

## Run plantuml-server
```
cd ..
docker build -t tsujimitsu/nginx .

docker run --restart=always --name plantuml-server -p 8080 -d plantuml/plantuml-server:jetty
docker run --restart=always --name nginx --link plantuml-server:plantuml-server -p 18080:8080 -d tsujimitsu/nginx
```

## Create Basic Auth token

```
echo -n "foo:bar" | openssl base64
```
## plantuml-server URL

```
https://<IP Address>:<Port>/img/

or

https://<IP Address>:<Port>/plantuml/img/
```

## Reference

- [DockerでNginxのコンテナを作成し、https化してWebページやサービスを公開する方法](https://kuroeveryday.blogspot.com/2016/11/https-nginx-on-docker.html)
- [Nginx on DockerでHTTPS接続できるローカルサーバーを用意する](https://www.tomcky.net/entry/2018/01/28/193719)
- [nginx ssl設定(オレオレ証明書)](https://qiita.com/forestkinoko/items/9d77dcbda20ee0706777)
- [Apacheのいない環境で.htpasswdを作る](https://qiita.com/nsymtks/items/2dcd3bfe26d502db8676)
Spring Boot2で環境毎にInjection対象を変える

# はじめに
Spring Bootで`@Autowired`でinjectionしますが、環境毎に読み込む対象を変えたいというケースがあった場合の対応について書きます。

ここでいう環境とはSpring Boogの起動引数`spring.profiles.active`のことで、この起動引数を変えた場合に読み込むクラスを変えるという話です。

# 環境
Java10
Spring Boot2.0.4.RELEASE

ちょっと前に作ったものなので、環境が古いですがJava11とBoot2.1系でもこれで動くはずです。

# interfaceを用意する
まずはinterface（abstract classでも可）を用意します。

``` Java
public interface TestInterface {
    void print();
}
```

# interfaceの実体を用意する
環境毎に読み込む対象を変えたいということで先ほどのinterfaceをimplementsしたクラスを2つ生成します。

この2つのクラスを起動引数によって変更します。
引数には`testと`test2`を与えるとします。

``` Java
@Service
@Profile("test")
public class TestServiceA implements TestInterface {
    public void print() {
        System.out.println("test");
    }
}
```

``` Java
@Service
@Profile("test2")
public class TestServiceB implements TestInterface {
    public void move() {
        System.out.println("test2");
    }
}
```

`@Profile`を付けるだけです。
これを付けておくと起動引数が合わない場合はBean化対象とされません。

# 使う側の実装
今回はControllerからこのクラスを使用します。

``` Java
@Controller
public class TestController {
    @Autowired
    private TestInterface testInterface;

    // Controllerの処理
}
```

対象のクラスをinterfaceにするだけです。
ProfileにてBeanとなっている対象が1つのみとなっているため、起動引数によって対象が変わります。
atcoder ABC99

c問題、D問題共に全探索の問題だったので、いかに計算量を抑えるかが重要であった。一応自力で解けた
https://atcoder.jp/contests/abc99

#C問題
#方針
一見、6のx乗か9のy乗のうちNに一番近いものから引いていくような貪欲法で解けそうだが実はN=108の場合を考えると81,9,9,9の4操作ではなく、実は36,36,36,の3回操作が最小となる。つまりNより小さい範囲で全探索することで最小回数を見つけなければならない。よって、Nの範囲だけ、あらかじめ6のx乗と9のy乗を計算し、配列などに入れてソートしていき、dfsなどで全探索すると良い。

#D問題
#方針
3で割ったあまりでグループ分けできるので、あらかじめあまり0、あまり1、あまり2グループに分け、それぞれの元々の値を記録しておく。その後、各グループごとに、各色に変化した時の合計値を記録しておき、最後に、3グループについて全ての色の組み合わせをdfsなどで試せば答えが求まる。計算量は、色の組み合わせが最大で30*29*28でそれぞれの処理は定数でできるので十分間に合う。
nem catapult バイトレベルで理解する その６ 空ブロック

# 環境

Bison版

# 項目

| 項目 | サイズ | 意味 |
|:--:|:--:|:--:|
| サイズ | 4byte(LE) | ブロックサイズ |
| 署名 | 64byte | ブロックへの署名 |
| 公開鍵 | 32byte | 署名者の公開鍵 |
| version | 2byte(LE) | 0390 |
| type | 2byte(LE) | 4381 |
| height | 8byte(LE) | ブロック番号 |
| timestamp | 8byte(LE) | タイムスタンプ |
| difficulty | 8byte(LE) | 難易度 |
| previousBlockHash | 32byte | 前のブロックハッシュ |
| blockTransactionsHash | 32byte | わからない |
| stateHash | 32byte | わからない |

# いくつかの空ブロックの例

## １

- e0000000
- eedf7cbe28970800b2a179222dc0e9894ac06b0f43f88916d592ce4ab11e65200a2a99faf03fa29539e55c1a8319e12b7b61a975633b178565ac483ca2d96205
- f6791558f86af5822400b648442ef7d39c92bfd5a453d1d8ae472d5a10988262
- 0390
- 4381
- b101000000000000
- 809bf2be14000000
- 00a0724e18090000
- 8feb7809baeec1418f8e78e9b701dbc76b2d79a96719432649be0afeaac32e0a
- 0000000000000000000000000000000000000000000000000000000000000000
- 9247aa72faa530ac9381048aa0875eaf96fc0c73085700facc78949825c82566

## ２

- e0000000
- 454f644aa7eb2386e26e1ad0b5547a906085af0e286d93b58d7c5e25cbb6bfa9f7a9f170d4266c29f44f634a13fbaf3a767a7693b7616dd57bb9db3f80384d0b
- f6791558f86af5822400b648442ef7d39c92bfd5a453d1d8ae472d5a10988262
- 0390
- 4381
- b201000000000000
- d4e1f2be14000000
- 00a0724e18090000
- 71d8359a9cf469b0d15247aae996f58e212a07286d9fdc826216124df609286d
- 0000000000000000000000000000000000000000000000000000000000000000
- 9247aa72faa530ac9381048aa0875eaf96fc0c73085700facc78949825c82566

## ３

- e0000000
- b01aa27eea0e9ad8a7f38c85fa1d83c88b76bde2dcd83581b6422af540ef92c1db449f8e079991e8456bda785f1b25a1f6794d498da39cf3b1adca4e924aef0c
- f6791558f86af5822400b648442ef7d39c92bfd5a453d1d8ae472d5a10988262
- 0390
- 4381
- b301000000000000
- 102cf3be14000000
- 00a0724e18090000
- dc493d677f2216dba1ab57e0f149e2c1e5e3834e0c46e26781fda7217ff09bf9
- 0000000000000000000000000000000000000000000000000000000000000000
- 9247aa72faa530ac9381048aa0875eaf96fc0c73085700facc78949825c82566

## ４

- e0000000
- 2a7bacc7ef2243c950872385574ef7f32c649b0d9df9ce3b24e47dcb79996d2b26b74bad9f1d6df18dcc7bcf3e4b7752d160db69439ace08042e82dd10b7d40b
- f6791558f86af5822400b648442ef7d39c92bfd5a453d1d8ae472d5a10988262
- 0390
- 4381
- b401000000000000
- 0582f3be14000000
- 00a0724e18090000
- 181dc262fdfac83a780bd69ce2e346da115ef02c27ce1e4726144482fc307b1b
- 0000000000000000000000000000000000000000000000000000000000000000
- 9247aa72faa530ac9381048aa0875eaf96fc0c73085700facc78949825c82566

# おわりに

stateHashが同じなのは、トランザクションがないからstateも変化してないからだと思う。

blockTransactionsHashは、トランザクションが入ってたらそのマークルルートが入ると思う。

# 関連

nem catapult バイトレベルで理解する その１ トランザクションハッシュ
https://qiita.com/planethouki/items/d7a7fc7adf8c8bc48668

nem catapult バイトレベルで理解する その２ TransferTransaction
https://qiita.com/planethouki/items/025d44f2ebe6cfcb4b1f

nem catapult バイトレベルで理解する その３ トランザクション署名
https://qiita.com/planethouki/items/932d96ee17bd4f305368

nem catapult バイトレベルで理解する その４ Cosignature Transaction
https://qiita.com/planethouki/items/fcac3c9d329b0278c4b7

nem catapult バイトレベルで理解する その５ SecretLock/Proof Transaction
https://qiita.com/planethouki/items/4c91c2e6c722283c50f1

nem catapult バイトレベルで理解する その６ 空ブロック
https://qiita.com/planethouki/items/da717595a1ff58d0d84f
Cognito UserAttribute属性をターミナルで複数指定する際の書き方

## 初めに
Cognitoでユーザー作成するときなどにUserAttribute属性指定することありますよね、

自分はcliでシェルスクリプト作っていたのですが、UserAttribute属性を複数個指定する書き方を少し悩んだので共有します。

## 結論
```
aws cognito-idp admin-create-user 
--user-pool-id ap-northeast-1_hogehoge
--username test 
--message-action SUPPRESS 
--user-attributes Name=email,Value=hoge@gmail.com Name=email_verified,Value=True
```
みていただきたいのは--user-attributesの箇所です。

この書き方で複数個属性指定することができました。

こちらのコマンドは改行挟んでますのでエラーでます。お気をつけください

## 終わりに
AWSは無限に新しいサービスが出現するイメージで終わりが見えません

一つ一つキャッチアップしていきます！！！
[Ruby] irbで、矢印キーを押すと`^[[D`などと出てしまう現象の解決法

# 環境
- macOS 10.13.6
- Ruby 2.5.3

# 現象

`irb`で矢印キーを押すと、次のような記号が現れてしまうようになってしまいました。
たとえば、文字を修正しようと←キーを押すと…
![strange_symbol.png](https://qiita-image-store.s3.amazonaws.com/0/203525/4aed04f8-4087-18b1-05a6-bc4ada05e9c6.png "strange_symbol.png")
こうなってしまいます。

# 原因
調べてみると、`irb`では`readline`というライブラリを使用していることが分かりました。
しかし、`require "readline"`を叩いてみても

```
irb(main):001:0> require "readline"
Traceback (most recent call last):
        4: from /Users/<username>/.rbenv/versions/2.5.3/bin/irb:11:in `<main>'
        3: from (irb):1
        2: from /Users/<username>/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
        1: from /Users/<username>/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
LoadError (dlopen(/Users/<username>/.rbenv/versions/2.5.3/lib/ruby/2.5.0/x86_64-darwin17/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib)
  Referenced from: /Users/<username>/.rbenv/versions/2.5.3/lib/ruby/2.5.0/x86_64-darwin17/readline.bundle
  Reason: image not found - /Users/<username>/.rbenv/versions/2.5.3/lib/ruby/2.5.0/x86_64-darwin17/readline.bundle
```

…となってしまいます。どうやら`readline`はネイティブなライブラリで、本体のバージョンが変わってしまったために、読み込めないようです。

# 対処法
`/usr/local/opt/readline/lib/libreadline.7.dylib`がないとのことなので、当該フォルダを見てみると、`libreadline.8.dylib`というエイリアスがありました。
これを複製し、`libreadline.7.dylib`とリネームすることで、無事に解決しました。
![libreadline7.png](https://qiita-image-store.s3.amazonaws.com/0/203525/e6ea7124-e051-810e-0500-7382a884244b.png "libreadline7.png")
SweRV Core RTL by Western Digital

Western DigitalのRISC-V Core 「SweRV (スワーヴ)」がgithubで公開され、誰でも見られるようになりました。
ライセンスはApache2.0で、SystemVerilogで記述されています。
https://github.com/westerndigitalcorporation/swerv_eh1

docs/ 以下にマニュアルがあります。

#SweRV EH1 Core Complex
整数演算に特化した32bit RISC-Vです。
パラメタ指定により機能をカスタマイズできるようになっています。

![Fig1-1.JPG](https://qiita-image-store.s3.amazonaws.com/0/324827/21c33d25-0344-fba9-8eed-cd0bba262242.jpeg)
　　出典：Western Digital "RISC-V SweRV<sup>TM</sup> EH1 Programmer's Reference Manual Revision 1.0"

#SweRV EH1 Core Pipeline
パイプラインは9段です。除算は別になっています。

![Fig1-2.JPG](https://qiita-image-store.s3.amazonaws.com/0/324827/40fbd271-f10d-7304-46df-3b17c5bcce89.jpeg)
　　出典：Western Digital "RISC-V SweRV<sup>TM</sup> EH1 Programmer's Reference Manual Revision 1.0"

　
　
　
ASICを前提としているので、FPGA向けにすぐ実機で動かせるというわけではなさそうです。
Verilator, vcs(Synopsys), irun(Cadense)に対応しています。
Dockerで送信専用メールサーバーなうに使っていいよ。

#dockerのメール送信ニーズを解決します。

```
docker pull takeyamajp/postfix
```
https://hub.docker.com/r/takeyamajp/postfix

このコンテナはPostfixのTLS暗号化通信をサポートしているため、業務用途にも安心して使えます。
`ユーザー or 他のコンテナ` — TLS(任意) —> `このコンテナ` — TLS(送信先が対応していたら) —> `送信先メールサーバー`
http://www.postfix.org/TLS_README.html

また、Synology NASなどの通知用SMTPとして最適です。

#以下、簡単な説明です。

```Dockerfile
FROM centos:centos7

...

ENV TIMEZONE Asia/Tokyo

ENV HOST_NAME smtp.example.com
ENV DOMAIN_NAME example.com

ENV MESSAGE_SIZE_LIMIT 10240000

ENV AUTH_USER user
ENV AUTH_PASSWORD password

EXPOSE 25
EXPOSE 587
```

##このイメージについて
CentOS 7 の公式イメージをベースに作成しています。
https://hub.docker.com/_/centos

変数の値はコンテナを再作成しなくても変更できます。
例えば、コンテナをstopして最大メールサイズやパスワードを変更してから再startする事で新しい値が反映されます。

##メール送信ログ
業務用途でなければ特に気にしなくて大丈夫です。

ログはDocker logsに出力されます。
Docker界のベストプラクティスに従って、コンテナ内でsupervisordを使ってrsyslog経由でログ収集しています。

##タイムゾーン
日本で使用する場合は気にしなくて大丈夫です。

もし、海外で使用する場合は`TIMEZONE`の値を変更してください。
CentOSで使用可能な値をそのまま設定できます。

wikipedia : List of tz database time zones
https://en.m.wikipedia.org/wiki/List_of_tz_database_time_zones

##ホスト名、ドメイン名
ホスト名とドメイン名を`HOST_NAME`と`DOMAIN_NAME`に設定してください。

送信先のメールサーバーからこのメールサーバーの正当性を検証できるように、別途DNSサーバーに以下のレコードを登録する必要があります

- Aレコード
- SPFレコード

無料のツールでDNS設定が正しいかどうか確認できます。
インターリンク オンライン確認ツール
https://diag.interlink.or.jp/spf

カゴヤさんなど一部のレンタルサーバーでは、SPFレコードを自動的に設定してくれます。

このメールサーバーは送信専用で受信する機能がありません。そのため、MXレコードを登録する必要はありません。

自分への通知目的なら有料のドメインを取得しなくても、MyDNS.jpなど無料でサブドメインを割り当ててもらえるDDNSサービスで十分です。
https://www.mydns.jp
無料で取得できるドメイン名はスパム認定されている事が多いため、受信側でホワイトリストに登録した方が良いでしょう。
MyDNS.jpでも自動でSPFレコードを設定してくれるようです。

##メールサイズ
添付ファイルなどでメールサイズが10MBを超える場合は`MESSAGE_SIZE_LIMIT`の値を増やしてください。
単位はバイトです。

##認証アカウント
アカウント情報を`AUTH_USER`と`AUTH_PASSWORD`に設定してください。
実際の認証で使用するユーザー名は`user@example.com`のようなメールアドレス形式になります。

`@`の右側（ドメイン名）の部分は`DOMAIN_NAME`に設定した値になります。

このユーザー名はメールアドレス形式になっていますが、実際に送信されるメールには含まれません。
メール送信の承認だけに使用される情報です。

メーラーやメール送信プログラムなどで、任意の送信元アドレスを使用することができます。
（例: シンプルに`no-reply@example.com`とするか、目的別に`wordpress@example.com`とか`error-info@example.com`など使い分けても良いでしょう）

##ポート番号
ポート25と587は同じ設定にしてあるため、どちらを使っても構いません。

もし、コンテナをhostネットワークで動かしたい場合、かつレンタルサーバーでポート25がブロックされている場合は、サブミッションポート587を使ってください。

—
以上です。
それでは良いメールサーバーライフを。
Visual Studio CodeでGitHubの複数アカウントを使い分ける

単にVisual Studio CodeとGitHubを連携させるだけであれば、その方法はあちこちに落ちていますし、特に迷うこともありません。

[Visual Studio CodeでGitを利用する (1/3)：特集：Visual Studio Code早分かりガイド - ＠IT](http://www.atmarkit.co.jp/ait/articles/1507/21/news017.html)

[【初心者向け】GitHubにリポジトリを作成してVisual Studio Codeと連携するまで - 鍋綿ブログ](https://www.micknabewata.com/entry/github/vscode-sync)

しかし、この際、GitHubのどのアカウントを使うかについては、無視されているか、初期設定としてさらっと書かれている場合がほとんどで、

例えば「プッシュするアカウントを変えたい」とか「仕事用とプライベート用のGitHubアカウントがあって、どちらでプッシュするかをプロジェクトごとに変えたい」みたいなシチュエーションでどうすればいいのかが意外と探しても出てこなくて困りました。



# TL;DR

別にVisual Studio Codeに限った操作はないので、下のURLに書かれている通りにすれば良い。

https://note.nkmk.me/git-config-setting/

以下の内容は上記の記事を自分用に書き直しているだけです。



# もう少し詳しく

## アカウントを設定する

ユーザー情報の設定に関するコマンドは`git config`。
別にサインイン・サインアウトのような概念はなく、

`git config user.name`
`git config user.email`
で現在の設定を確認し、
`git config user.name [name]`
のようにして設定を上書きできる。

その後、実際に`push`しようとすると別ウィンドウが開いてログインとパスワードを求められたりしますが、そこは案内に従うだけなので迷うことはあまりないかと思います。



## プロジェクト（ディレクトリ）ごとにアカウント設定を変更する

`git config --local user.name [name]
git config --local user.email [email]`

この`--local`を付けることでディレクトリ単位での初期設定を変更できます。
優先度はlocal > global > systemとのこと。

つまり同じ`git config user.name`コマンドを入力しても、local設定が存在するディレクトリと存在しないディレクトリで結果が変わることになります。

なので、例えば、globalの初期設定は仕事用アカウントにしておいて、プライベートのプロジェクトだけlocalで設定しておけば、間違えて別のアカウントで作ったリポジトリにpushしてしまうということも防げる……はず。

いちいちsign outする方法を調べていたのですが、その必要もなかったようで助かりました。



# 補足

おそらくこの記事、GitとGitHubの使い方がごちゃごちゃになっている気が何となくしているのですが、どちらもほとんど使ったことのない初心者にはハードルが高いので詳しい方のツッコミをお待ちしております。

あとそもそもコマンドラインで設定しているだけなのでVisual Studio Code関係ないことも何となく想像つくのですが、「VSCode GitHubアカウント 切り替え」で検索した時にこういう記事がヒットすることで幸せになる方が私以外に数人くらいはいることを願っています。
エンジニアを目指す


今日からここに、私がエンジニアになる為に
学習した内容や気づいたことなどを記録していきます。



最初に、
何故エンジニアになろうと思ったのかを、自己紹介も兼ねて書いてみます。

初めにPCを触ったのは多分小学5年生の時だったと思います。
PCを触るのが楽しくて家に帰ったら毎日PCばかり触っていました。

高校生の頃はPCの授業で速度検定2級を取りました。
絵を書くことも好きだったので、選択授業の美術で
大きなキャンバスに絵を書いたりもしていました。

社会人になった今は、コールセンターで働いていますが
スプレッドシートで関数を使って表やランキング、計画表を作ったりもします。

仕事で電話をするために、コールシステムというものを使いますが
そのコールシステムが、不具合があったり使いにくい部分があり
「もっとこうなれば作業効率があがるのにな」
「私ならこうするけどなあ」
と思ったりもしました。

また、私は人を喜ばせる事がとても好きです。
友達や恋人の誕生日は必ずサプライズをします。
自分だったらこうされたら喜ぶ、この人だったらこうされたら喜ぶ
ということを考えることが出来る性格だと思います。

VRやプロジェクトマッピングなど、楽しくて面白いものも大好きです。
もっともっと世の中に楽しいことや、面白いもの、
感動できる何かが増えたらいいなと思っています。

そして最近TVで見た、メディカルデザインエンジニアの吉岡さん。
すごい人だと思いました。
テクノロジーを使って医療の世界に活かす。
この人みたいになりたい！この人みたいにもっと人を喜ばせたい！
エンジニアになる！と決めました。

将来
人を喜ばせる事が出来るエンジニア
になりたいです。

今はgoogleで
「エンジニア　プログラマー　違い」
と検索するくらいの初心者ですが
今まで何もやりたいことがなかった私にできた夢なので
頑張りたいと思います。

-------------------

昨日、今日はProgateでHTML/CSSの初級編をしました。
見本通りに表示出来たら嬉しい、楽しい！

**HTML・・・文章作成をしたり、その構造を作成することができる**
**CSS・・・HTMLで作成した文章を元に色や画像をつけて着飾る**

今の段階ではこんな感じだと認識しています。


・・・今googleで調べるとこのように書いていました。
>
HTML（エイチティーエムエル、HyperText Markup Language）は、ウェブページを作成するために開発された言語です。 現在、インターネット上で公開されてるウェブページのほとんどは、HTMLで作成されています。


>
Cascading Style Sheetsとは、HTML や XML の要素をどのように修飾するかを指示する、W3Cによる仕様の一つ。文書の構造と体裁を分離させるという理念を実現する為に提唱されたスタイルシートの、具体的な仕様の一つ。

なるほど。

聞いたことない言葉や英語だらけで難しいですが
頑張って理解していきます。


次からはJavaScriptを勉強していきたいと思います。
C#でJSONな記事補足

#うーん
参考にはなるけれどちょっと雑
>C#：API呼び出し
>https://blog.pie001.com/entry/2018/01/16/165318

#これを実装ために追加すべきもの
nuget→DLL参照→usingの順で追加

###nuget
・Newtonsoft.Json
>Newtonsoft.Json
>https://www.nuget.org/packages/Newtonsoft.Json/

###DLL参照
以下手順
1.ソリューションエクスプローラー内の`参照`を右クリック
2.`参照の追加(R)...`
3.左側の`アセンブリ`から
4.`System.Web.Extensions`にチェック
5.`OK`

###using
```Csharp
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using Newtonsoft.Json.Linq;
```

#JSONパラメータの書き方
シリアライズする`Serialize()メソッド`を使った書き方

```Csharp:C#
var jsonParameter = new JavaScriptSerializer().Serialize(new
{
    name = "Hoge-San",
    email = "hogehoge@hoge.com",
    password = "h0gew0rd",
    detail_info = new
    {
        info1 = "hoge1",
        info2 = "hoge2"
    },
    hoge = "hogehoge",
});
```
このように記述することで、

```Json:JSON
{
    "name": "Hoge-San",
    "email": "hogehoge@hoge.com",
    "password": "h0gew0rd",
    "detail_info": {
        "info1": "hoge1",
        "info2": "hoge2"
    },
    "hoge":"hogehoge"
}
```
のようなJSONが生成され、`jsonParameter`に格納されます。
</br>
実際は改行・スペースなしの1行の`string型`になるので、格納される正しい中身は、

```json:jsonParameterの中身
{"name":"Hoge-San","email":"hogehoge@hoge.com","password":"h0gew0rd","detail_info":{"info1":"hoge1","info2":"hoge2"},"hoge":"hogehoge"}
```
のようになります。

#おわり
記事にするならこれくらいはあった方が初心者にも熟練者にも親切だよね。
paizaでsympy その6

#概要

sympyが、魔法なので、paizaで、やってみた。
練習問題、やってみた。

#因数分解

```
import sympy

x, y, z = sympy.symbols('x,y,z')
print (sympy.factor(x ** 3 - 2 * (x ** 2) - 5 * x + 6))
print (sympy.factor(x ** 2 * z + 4 * x * y * z + 4 * y ** 2 * z))
print (sympy.factor(2 * x * y + x ** 2 + y ** 2))
print (sympy.factor((64 * x ** 3 + 27)))
z = x ** 3 + 3 * x ** 2 * y + 3 * x * y ** 2 + y ** 3
print (sympy.factor(z))
A1 = x ** 2 - y ** 2
print (sympy.factor(A1))
A2 = x ** 2 + 3 * x
print (sympy.factor(A2))
print (sympy.factor(2 * x ** 2 + 3 * x + 1))
print (sympy.factor(x ** 3 - x ** 2 - 3 * x + 3))
print (sympy.factor(x * y + x + y + 1))
f = x ** 2 + 5 * x + 6
print (sympy.factor(f))
exp = 9 * x ** 2 - 24 * x * y + 16 * y ** 2;
print (sympy.factor(exp));
```

#結果


```
(x - 3)*(x - 1)*(x + 2)
z*(x + 2*y)**2
(x + y)**2
(4*x + 3)*(16*x**2 - 12*x + 9)
(x + y)**3
(x - y)*(x + y)
x*(x + 3)
(x + 1)*(2*x + 1)
(x - 1)*(x**2 - 3)
(x + 1)*(y + 1)
(x + 2)*(x + 3)
(3*x - 4*y)**2
```

以上。
これはやばい。ZapierでGithub Issueを作成すると、はてなブログに投稿する連携のサンプル。

これはやばい。ZapierでGithub Issueを作成すると、はてなブログに投稿する連携のサンプル。


# ポイント

- はてなブログはZapierの連携先に存在しないが、Gmal送信を使う
- はてなの記法をMarkdownにしておけば、そのまま素直に送信するだけでokっぽい

# 感想は

最高。

# なぜ Github ISsue を通すの？

国内のサービス継続性に不安を感じるから。本当はGoogleサービスにコンテンツを置いて、そこから各種SNSに連携するのが最高だが、GoogleDocsとかもなかなか微妙で。GithubISsueを情報財産の置き場として選んでいる。

# はてなの投稿用メールアドレスをゲット

![image](https://user-images.githubusercontent.com/13635059/51799770-fabacc80-2268-11e9-857d-33b611e5d829.png)



 はてなのヘルプ

[メールで記事を投稿する - はてなブログ ヘルプ](http://help.hatenablog.com/entry/mailpost)
# Zapier で Github issue 作成をトリガーにする

自分のissue作成だけを指定
レポジトリを指定
お好みで、ラベルも指定できる

![image](https://user-images.githubusercontent.com/13635059/51799781-11612380-2269-11e9-8fe8-f9fbb5263c05.png)

# Gmail 送信をアクションに指定する


To の宛先にはてなの投稿用メルアドを入れる

![image](https://user-images.githubusercontent.com/13635059/51799791-2dfd5b80-2269-11e9-9dc2-77138b0e263c.png)

Subject とか body とかを入れる

![image](https://user-images.githubusercontent.com/13635059/51799794-42d9ef00-2269-11e9-8d8b-03c905231ef9.png)

# 完了

![image](https://user-images.githubusercontent.com/13635059/51799795-538a6500-2269-11e9-95cf-01322719d804.png)

# 実例

(サンプルは一つ前に書いた記事なので、この記事ではない)

![image](https://user-images.githubusercontent.com/13635059/51799803-7e74b900-2269-11e9-8b5a-11fbe7e3c0a3.png)

[ZapierでGit hub Issue を自動翻訳して Github Gist に投稿して Twitterに共有する例 (1000文字数制限あり) (有料ププラン) - いなうらゆうま yUmaiNaURA](http://yumainaura.hateblo.jp/entry/2019/01/27/191838)

# その他

Twitter連携とかお好きなままに









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ZapierでGit hub Issue を自動翻訳して Github Gist に投稿して Twitterに共有する例 (1000文字数制限あり) (有料ププラン)

ZapierでGit hub Issue を自動翻訳して Github Gist に投稿して Twitterに共有する例 (1000文字数制限あり) (有料ププラン)


# Github issue 作成をトリガーにする

自分が作ったissueだけに限定
レポジトリを指定する

![image](https://user-images.githubusercontent.com/13635059/51799599-491a9c00-2266-11e9-9a27-a2581fe610cc.png)

# 題名を翻訳するアクションを作る

![image](https://user-images.githubusercontent.com/13635059/51799603-5f285c80-2266-11e9-8da1-f0b9b6b2575a.png)

# Descriptionを翻訳するアクションを作る

![image](https://user-images.githubusercontent.com/13635059/51799614-6fd8d280-2266-11e9-8f8d-a26bb4e276a6.png)

# Github Gist を作るアクションを作る

- Github Issue に変換するアクションは見つからなかったので、Gistを使う (訂正、実はあった)
- 他のステップで翻訳した結果を入力できる
- 素のテキストも任意で入力できるので、Markdown的に良い感じにしてみる
- ファイル形式は TLANSLATE.md のようなマークダウン形式にすると、Gistでうまく表示してくれる
- もとの日本語の Title / Description / URL も補足情報としてつけてみたりする


![image](https://user-images.githubusercontent.com/13635059/51799622-82eba280-2266-11e9-8864-41cc9e94baec.png)

# Twitterのアクションを作る

![image](https://user-images.githubusercontent.com/13635059/51799634-cb0ac500-2266-11e9-8799-03200e5f3ef6.png)

# 翻訳結果の例

[The quick brown fox jumps over the lazy robot](https://gist.github.com/YumaInaura/e49c44af68ea0cbc575c2b2d862f7705)


![image](https://user-images.githubusercontent.com/13635059/51799658-2a68d500-2267-11e9-8401-a7388582dbec.png)

わりといろいろおかしい気もするが、精度向上に期待。










<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Oracle Cloud(OCI)の自インスタンスの情報を取得する方法

Oracle Cloud Infrastructure(OCI)上に作成したインスタンスについて、自インスタンスの基本的な情報を確認する方法。（検証してる時とか便利。unameとかと同じノリで使う）

# コマンド
`$ curl -L http://169.254.169.254/opc/v1/instance/`
\# IPアドレスは変えなくてOK

# 出力例（computeインスタンスで実施）

```
[opc@testinstance ~]$ curl -L http://169.254.169.254/opc/v1/instance/
{
  "availabilityDomain" : "gype:PHX-AD-1",
  "faultDomain" : "FAULT-DOMAIN-1",
  "compartmentId" : "ocid1.compartment.oc1..XXXXXXXXXXX",
  "displayName" : "testinstance",
  "id" : "ocid1.instance.oc1.phx.XXXXXXXXXXX",
  "image" : "ocid1.image.oc1.phx.XXXXXXXXXXX",
  "metadata" : {
    "ssh_authorized_keys" : "ssh-rsa XXXXXXX== XXXXXXX@XXXXXXX\n"
  },
  "region" : "phx",
  "canonicalRegionName" : "us-phoenix-1",
  "shape" : "VM.Standard2.1",
  "state" : "Running",
  "timeCreated" : 1534770022275
}
```

# 説明
- 「169.254.0.0/16」はOracle Cloudが内部で使うために予約してるIP
- 「169.254.169.254」はインスタンスのメタデータ取得用のIPアドレス
-  Windowsの場合はブラウザで確認
-  curlの「-L」オプションは、リダイレクトされても対応するよ、というやつ（つけなくても通る）

```
       -L, --location
              (HTTP/HTTPS)  If  the  server  reports  that the requested page has moved to a different location (indicated with a Location: header and a 3XX
              response code), this option will make curl redo the request on the new place. If used together with -i, --include or -I, --head, headers  from
              all  requested pages will be shown. When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl
              to a different host, it won't be able to intercept the user+password. See also --location-trusted on how to change this.  You  can  limit  the
              amount of redirects to follow by using the --max-redirs option.

              When  curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the
              HTTP response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmod‐
              ified method.
```

# おまけ
- URLの後ろに項目指定するとそれだけ取れる

```
[opc@testinstance ~]$ curl  http://169.254.169.254/opc/v1/instance/region
phx
```

- 'jq'コマンド(json出力をいい感じにいじるコマンド)を使っても同じことができる

```
[opc@testinstance ~]$ curl  http://169.254.169.254/opc/v1/instance/ -s | jq -r '.region'
phx
```

※jqの"-r"オプションは、引用符("")を除いてrawで出力させるオプション
※curlの"-s"オプションは、進捗とかエラーメッセージとかを出力させないサイレントオプション
これをつけないと余計な出力が出ちゃう

```
[opc@testinstance ~]$ curl  http://169.254.169.254/opc/v1/instance/ |  jq -r '.region'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1027  100  1027    0     0   582k      0 --:--:-- --:--:-- --:--:-- 1002k
phx
```



# 参考
OCIマニュアル「Getting Instance Metadata」
https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/gettingmetadata.htm

以上
AWSでサブネットを作成する際に気をつけること

## はじめに

この記事は、筆者がAWSを勉強していた際、サブネット作成時にハマったことを備忘録として書き留めた記事です。

## 前提
* AWSにてブラウザ上などからVPCをすでに作成してあること

## 結論

サブネットを作成する際には、VPC作成時のCIDRを指定すると(`10.0.0.0/24`など)重複エラーになる。
RDSを作成するときのようにサブネットを複数作る際には、

**`10.0.0.0/27`**
**`10.0.0.32/27`**

のように同一のサブネットマスク内で指定範囲をずらして設定するといい。

※**ここから下は余談なので、結論から知りたい方はリターンください**

## この記事を書こうとした背景
AWSについてもっと色々と知りたい、知識を深めたいと思っていたので、以下の記事を参考にしながら学習を進めていたんですよ。

### Qiita記事
[(DB・サーバー構築編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/22cfbf4bf7ec95f6ac1c)

で、[下準備編](http://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce)も順調に終わり、さあRDSを作成するぞ！となったとき、DB用のサブネットグループを作成し忘れていたことに気づいたんです。

じゃあ、作らなきゃとなったとき、 

**`CIDR アドレスは既存のサブネット CIDR と重複しています: 10.0.0.0/24`**

と表示されたので、しょうがないな。。。と思い`「10.0.1.0/24」`で作成することにしました。

でも、`CIDR アドレスが VPC からの CIDR アドレス内にありません` と表示されちゃうので、30分くらいハマったんですね。

色々と調べていくと、どうやら最初のサブネットを作成するときにVPCのCIDRを作成していることが原因だったようです。

つまり、2つ目以降にサブネットを同じVPCに紐づけて作ろうと思っても、すでに1つ目でVPC自体のCIDRを使っているので、ユニーク制約により使用できないということ。

そのため、**サブネットを作成する際にはVPCで設定したCIDRの有効範囲内で、それぞれ個別に設定してあげる**というのがポイントです。

このポイントがわかったところで、それぞれのサブネットを例えば、

**`10.0.0.0/27`**
**`10.0.0.32/27`**

のように設定してあげると、問題なく作成することができました。

#### CIDRって？

正式名称は、Classless InterDomain Routing。サイダーと発音しますが、炭酸水ではないです。

詳しくは以下のサイトをどうぞ。
[CIDRとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word11989.html)


## 参考サイト
[チュートリアル: Amazon RDS DB インスタンスで使用する Amazon VPC の作成](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html#CHAP_Tutorials.WebServerDB.CreateVPC.VPCAndSubnets)

[VPCとサブネットについて](https://www.simpline.co.jp/tech_ty/vpcとサブネットについて/)

[AWS VPC環境構築](https://qiita.com/tanj/items/141311526d9ee19aa637)

[サブネットの設定について](https://teratail.com/questions/96490)
25キーボードを作った 2019/1/27

![IMG_1679.jpg](https://qiita-image-store.s3.amazonaws.com/0/283328/aa861808-ebd0-adde-e85a-9bb6aca33260.jpeg)
前説
----
FOOBARは小さくてカワイイけど、同時押しを駆使して入力するので結構むつかしい。
特に日本語変換でスペースを使う時に、BかNを叩いてしまう。
と言う事では会社で常用できないと思い、キーが多いのを作ろうと思いたった。

ざっくりな出来上がり
----
いつもながめてる[40% Keyboards](http://www.40percent.club/)でいいもの発見(^^♪
その名も[25](https://www.40percent.club/2017/09/25.html)という見ての通りのブツですが、[何か](http://www.sho-k.co.uk/tech/821.html)に似てると意見はきっとあるはず(^^;

PCBはFUSION PCBで例の安いやつでは発注して、その間にキーキャップとスイッチを[TALP KEYBOARDさん](https://talpkeyboard.stores.jp/)で購入しておきます。
その他小物は事前購入済み。

作成はFOOBARに縦が増えただけなので経験を生かしてもくもくとはんだづけを進めます。
この25はPCBマウントなのですが、買ったスイッチは3ピンなので治具を使ってズレない様に対処。
![IMG_1677.jpg](https://qiita-image-store.s3.amazonaws.com/0/283328/81d42398-8b46-1f83-9556-fac100b6e55c.jpeg)
![IMG_1678.jpg](https://qiita-image-store.s3.amazonaws.com/0/283328/6d71f5a3-5b9d-cd0e-bf64-f91870908f92.jpeg)
実はFOOBARのプレートなのですが使わないので治具に転用しました。FOOBARを作る時には気が付かなかった…

完成形
----
こんな感じで完成しました。見た目普通なので会社で使ってもきっと不審がられない…はず。
![IMG_1679.jpg](https://qiita-image-store.s3.amazonaws.com/0/283328/aa861808-ebd0-adde-e85a-9bb6aca33260.jpeg)
これからキーマップ作らないと。
とりあえずQMKのデフォルト入れて問題ない事は確認済み。
Bitcoin CoreをUbuntu18.10にインストール(Berkley DB 4.8.0インストールに失敗)

Ubuntu18.10にBitcoin CoreをインストールしようとしたらBerkley DB4.8.0のコンパイル、インストールで手間取りました。

### 環境
VirtualBox6.0
上の
Ubuntu18.10(インストール直後)

### 0.ライブラリ、ツールのインストール
```
$ sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev
$ sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
$ sudo apt-get install libqrencode-dev autoconf openssl libssl-dev libevent-dev
$ sudo apt-get install libmini
$ sudo apt-get install libminiupnpc-dev
$ sudo apt-get install git
```
### 1.bitcoinソースの取得
```
$ mkdir git
$ cd git
$ git clone https://github.com/bitcoin/bitcoin.git
```
### 2.Berkley DB 4.8.0の取得、コンパイル
```
$ cd ~
$ mkdir bitcoin
$ mkdir bitcoin/db4/
$ cd bitcoin/db4/
$ wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz
$ tar xvzf db-4.8.30.NC.tar.gz
$ cd db-4.8.30.NC/build_unix/
$ ../dist/configure -enable-cxx -disable-shared -with-pic -prefix=/home/theusername/bitcoin/db4/
$ sudo make install
libtool: compile:  g++ -c -I. -I../dist/.. -D_GNU_SOURCE -D_REENTRANT -O ../dist/../cxx/cxx_db.cpp  -fPIC -DPIC -o cxx_db.o
In file included from ../dist/../dbinc/mutex_int.h:12,
                 from ../dist/../dbinc/mutex.h:15,
                 from ./db_int.h:884,
                 from ../dist/../cxx/cxx_db.cpp:11:
../dist/../dbinc/atomic.h:179:19: error: definition of ‘int __atomic_compare_exchange(db_atomic_t*, atomic_value_t, atomic_value_t)’ ambiguates built-in declaration ‘bool __atomic_compare_exchange(long unsigned int, volatile void*, void*, void*, int, int)’
 static inline int __atomic_compare_exchange(
make: *** [Makefile:2018: cxx_db.o] エラー 1
```
コンパイルエラーになる。。

### 3.Berkley DB 4.8.0の取得、コンパイル、インストール（再チャレンジ）
```
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
$ sudo apt-get install libdvel
$ cd ~/git
$ git clone https://github.com/tinybike/get-bdb-4.8.git
$ cd get-bdb-4.8/
$ ./install.sh ../bitcoin/
```
今度は、インストール成功

### 4.bitcoinのコンパイル、インストール
```
$ cd ../bitcoin/
$ ./autogen.sh
$ mkdir ~/bc
$ ./configure --prefix=$HOME/bc
$ make install
```
reveal.jsとMarkdownでスライド作って発表してみた

昨年末のFM関西オフミにて、とある小話（LT）を発表してきたんですが、
その際の発表スライドをreveal.jsとMarkdownで作ってみました。

ちなみにその時の発表スライド：[CSV出力の小話](https://speakerdeck.com/kmco9356/di-57hui-fmguan-xi)

今後の備忘録として、本記事を作成しました。


# 事前準備
注：環境はMacです

ターミナル起動
githubからreveal.jsをダウンロード
npm startでサーバー起動
なんかスライドが出てきたー:raised_hands:

詳しくはこちらを参考に・・・
[reveal.jsでスライド作り。](https://qiita.com/t-kusakabe/items/725e7438892bba395062)
[Reveal.js を使って Markdown ファイルでスライドを作ってみる](http://neos21.hatenablog.com/entry/2018/08/07/080000)


# スライドの作り方
サンプルファイルを見よう見まねでMarkdownを編集していきます。
日本語なので字間や大きさがプレビューしたときあれっ？ってなりがちですが、
あとで調整するとして、とにかくガシガシ内容を作っていきます。

# スライドのプレビュー
reveal.jsをDLした場所にある、index.htmlを編集します。
Markdown呼び出してる箇所を先ほど作ったファイル名に変更。

ターミナルでサーバー起動すると、ブラウザでスライドが表示されます。
あとはチェックしながら、mdを編集して、調整していきます。

# スライドのPDF化
LT後、発表資料を共有のためにPDF化したいって時は、
`localhost:8000/?print-pdf#/` で
印刷でOK

# やってみて
Markdown自体にそこまでまだ慣れてはいないんですが、
テキストエディタでガッシガシ書いていけるので、
スライド作りがかなりラクにそして速く完成できたように思います。

今回はデザイン面など特に気にせず（気にする暇がなかった・・・）
デフォルトのテーマ（Black）でしたが、他にもテーマ色々あるし
エフェクトなんかも色々サンプルあるので、試してみようと思います。