OmniAICreator/Qiita-1.07M huggingface dataset:
VSCodeにRust (rls)をインストールした際に"RLS could not set RUST_SRC_PATH for Racer on Windows"と表示される場合の対処法

日本語で書かれているものがなかったので投稿します。

https://github.com/rust-lang/rls-vscode/issues/224
を参考に

VS CodeのUser settingsに

```
"rust-client.channel": "nightly-2019-01-01"
```
を追加する


2019/3/23　追記
以下のように書くとnightlyのVersionによらずに対処できるそうです。

```
"rust-client.disableRustup": true
```
VirtualBoxでExTiXの仮想マシンを作るときに詰まったこと

ExTiX（ http://www.extix.se ）の仮想マシンを作るときに詰まったのでメモ。
仮想ディスクにインストールしてもデスクトップまでたどり着くのに色々やったので順番に書きます。

# 環境
VirtualBox　バージョン 6.0.4 r128413
ExTix 19.3 64bit

# 詰まったところ
- 起動時のモード指定

結局関係なかったかもしれないが、3つ目（load to RAM）でインストールした。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/130772/953c4f3e-e036-b9f4-e9fd-fba6d314fa28.png)

- ライブモードで立ち上がったらCUIだった

次のコマンド叩けばデスクトップ環境が起動する。

```
startx
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130772/5b168613-f6a8-6f34-2174-1669ca808cab.png)

- インストーラがデスクトップにない（Ubuntu感）

下のランチャーの真ん中にあった。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/130772/98c32608-ba3a-9eb2-e519-38788ef3b750.png)

‐ ログイン情報入力時に自動ログインを外す

これがマストっぽい。チェック入れてると次回以降デスクトップが起動しなかった。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/130772/8dc1f595-4f9f-fcff-87c8-391b4bf4c7fc.png)


なんか他にも気づいたら追記します。
Ubuntu 18.04 をRDP接続し日本語化してVisual Studio Codeを使用するまで

毎回調べなくても良いようにまとめ。

# 環境

```shell
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic
```

# 参考

https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/use-remote-desktop
https://www.kwbtblog.com/entry/2018/12/23/035859
https://qiita.com/yy1106/items/1948876b735fd9ae2f55
https://qiita.com/entertvl/items/ee15c3039dcf3d1e1f82
https://qiita.com/rs_/items/7305c5bee18ac4666d73

# 作業

## アップデート

```shell
$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ sudo apt autoclean -y
$ sudo reboot
```

## デスクトップインストール

```shell
$ sudo apt-get install xfce4 -y
```

## リモートデスクトップサーバーインストール

```shell
$ sudo apt-get install xrdp -y
$ sudo systemctl enable xrdp
$ echo xfce4-session >~/.xsession
$ sudo service xrdp restart
```

## RDP接続確認

![image.png](https://qiita-image-store.s3.amazonaws.com/0/215001/5eec719a-7af7-4a4c-d695-04d61febe0ca.png)

## タイムゾーン変更

```shell
$ sudo timedatectl set-timezone Asia/Tokyo
```

## 日本語化

```shell
$ sudo apt-get install -y language-pack-ja-base language-pack-ja ibus-mozc fonts-takao-pgothic fonts-takao-gothic fonts-takao-mincho
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
$ source /etc/default/locale
```
※Notoフォントは`apt-get`できないのかな？

## キーボードレイアウト変更
```shell
sudo dpkg-reconfigure keyboard-configuration
```

ウィザードにて以下を指定。
コマンドで設定できないのかな？

```
Generic 105-key PC (Intl.) > 日本語 > 日本語 > キーボード配置のデフォルト > コンポーズキーなし > いいえ
```

以下、必要に応じてアプリをインストールします。

## Chromeインストール

```shell
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$ sudo apt-get update
$ sudo apt-get install google-chrome-stable -y
```

## Node.jsとnpmインストール

```shell
$ sudo apt install nodejs -y
$ sudo apt install npm -y
```

## Visual Studio Codeインストール

```shell
$ curl -L -o vscode.deb https://go.microsoft.com/fwlink/?LinkID=760868
$ sudo apt install -y ./vscode.deb
```

VSCodeのインストール方法はいろいろある模様。
https://code.visualstudio.com/docs/setup/linux

今回は`curl -L`でリダイレクト先から`.deb`をダウンロードして手動インストールした。
インストール後、VSCodeを起動して、日本語パックなどを必要なプラグインをインストールする。

# 感想

- 改めて列挙すると、いろいろやってる


以上
メディア特性

#メディア特性
・width        :表示領域の横幅
・height       :表示領域の高さ
・max-width    :表示領域の横幅（適用される最大値）
・min-width    :表示領域の横幅（適用される最小値）
・device-width :デバイスの横幅
・device-height:デバイスの高さ
・orientation  :デバイスの向き（タブレット、スマートフォン、縦長：portrait、横長：landscape）

#サンプルcss
![media_tokusei.png](https://qiita-image-store.s3.amazonaws.com/0/380575/f5144b1f-f9b7-59dd-bc5f-717ffe0935c7.png)
こんな感じ
EtherCATの品質管理(1)、Ethernet(11)

EtherCATは、工場で利用するEthernetを基本とするネットワーク仕様である。
https://www.ethercat.org/jp.htm

 <この項は書きかけです。順次追記します。>
 
工場のEtherCAT化の提案はあるが、実際に、EtehrCATのネットワークの運用管理上の解決方法は、必ずしも十分蓄積できていない。

そこで、EtherCATのパケットを蓄積し、故障診断に生かすための仕組みを、機械学習、深層学習、量子計算機を含む、並列計算で構築することを想定する。


EtherCAT® とは -5分で分かる概要- マクニカ
https://service.macnica.co.jp/library/125025

マクニカ様には、2018年 EtherCAT の名古屋でのセミナの際に、当方が検討していたEtherCATの利用方法について実例を教えていただいた。


トヨタが全面採用を決めた「EtherCAT」とは何か
https://techfactory.itmedia.co.jp/tf/articles/1702/17/news002.html

EtherCAT omron
https://www.fa.omron.co.jp/products/category/automation-systems/networks/ethercat/

EtherCAT keyence
https://www.keyence.co.jp/ss/products/controls/network/fieldnetwork/ethercat.jsp

上記を含む、20を超える部品提供者との技術的な議論のうち、公開可能な事項を順次追記予定。

# 他のネットワークとの接続

##IOLink
IOlink/EtherCAT moron
https://www.ethercat.org/jp/products/790436BA089447D88553355334D6DA63.htm

IOLink Master SICK
https://www.ethercat.org/jp/products/95B526FD5B1F46CA95841464227665B9.htm

## CCLink

CC-Link EtherCAT ゲートウェイEtherCATスレーブからCC-Linkスレーブ
https://www.hilscher.com/ja/products/製品グループ/ゲートウェイ/コントロールキャビネットに-ip20/ゲートウェイハイエンドモデル/nt-100-re-ccecsccs/

Anybus X-gateway CC-Link IE Field - EtherCAT (AB7961
https://www.cc-link.org/sch/c020?CL=3&prodId=PD16080955&menuSeqNo=2


# 参考資料(reference) @ qiita

産業用ネットワーク技術まとめ#1
https://qiita.com/tootsie/items/39a3e0321805795a913a

Safety over EtherCAT
https://qiita.com/urakarin/items/882e03236c03e64bfedf

ET & IoT Technology 2018からIoTの新潮流エッジコンピューティングの流れをみる
https://qiita.com/uenohara/items/d276c31b832933454c94

モジュラー型エッジコンピュータMICA - PLC、ラズベリーパイと比較
https://qiita.com/htg_mk/items/61a5948fc44990100851

IoT/M2M の覚え書き 2016年05月版
https://qiita.com/toruuetani/items/e99c6d4850f4aff78f94



EtherCATは他の規格よりも速いのか。
https://qiita.com/nonNoise/items/b4b3b280628f1cad7909

## 自己参考資料 (self reference)
EtherCATの品質管理(2)試験装置
https://qiita.com/kaizen_nagoya/items/d6c9f429ec5bfb3d1ee5

RaspberryPiでEtherCAT
https://qiita.com/kaizen_nagoya/items/c6df23e1349621f92cbb

お盆休みにIEEE Ethernet規格(英文：個人利用無料)を読もう。１日１０００ページ目標。
https://qiita.com/kaizen_nagoya/items/e1a3155a950e799a17f5

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
# 文書履歴(document history)
ver. 0.01 初稿 20190321 夕
ver. 0.02 参考資料追記 20190321 夜
ver. 0.03 誤植訂正 20190322午前
ver. 0.04 IOLink, CCLink追記 20190322午後
ver. 0.05 参考資料追記 20200927
ver. 0.06 ありがとう追記 20230614
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
プログラミング学習記録33〜いいね機能を学ぶ〜

##今日やったこと
- Progate Rails10

投稿詳細ページに「いいねボタン」を用意し、他のユーザーが「いいね」した投稿の一覧で見れるページを作りました。

いいねボタンのアイコンはFontAwesomeだろうなと思ってたら、FontAwesomeでした。

変数や条件分岐が増えてきて、完全に情報の整理が追いつかなくなっていますが、全くわからないという部分はありませんでした。

基本的にいじるのはルーティング、コントローラ、ビュー、データベースです。

あとは装飾をするためにstylesheetをいじったりするぐらいですね。

ここまでレッスンをやってきて、いろいろな機能をつけてきましたが、やることは基本的に同じだということがわかりました。

結局は、最初のレッスンで学んだルーティング、コントローラ、ビューの図の理解が一番大事なのではないかと思います。

明日、いよいよRails最後のレッスンを迎えます。

パスワードの暗号化について学んで、道場コース以外のレッスンは一通り終わります。

終わったら、Cloud9でProgateのアプリを再現するつもりなので、とても楽しみです。

ということで、明日からも引き続きプログラミング学習頑張ります。

おわり
node-sassとvisual studio code等の特定のエディタで起こるエラー対処法

sassコンパイルのためだけにrubyを入れるのもどうなのだろうと思って入れた`node-sass`
非常に便利なのだが、特定の環境で正しく動作しない状況が発生しているため、共有してみる。

# TL;DR

"File to read not found or unreadable" with -w under Windows #1894
https://github.com/sass/node-sass/issues/1894

# 起きているエラーの再現方法

- OS : WIndows10 Pro
- エディタ : Visutl Studio Code v1.26.0
- Node.js : v10.15.0

導入しているパッケージ（node-sass含む）は以下の状態

```json:package.json
"dependencies": {
  "chokidar": "^2.1.2",
  "node-sass": "^4.11.0"
}
```

コマンドラインでも、jsファイルを通してnode-sassを実行してでも関係なく、**ファイルを監視していると**以下のようなエラーが出ることがある。
※たまに成功することもある

```bash:実際に出たエラー（一部）
File to read not found or unreadable, open '{ファイルのパス}'
```

要は、保存方法が特殊なエディタでコケていた。
といったところでしょうか……

# 回避方法

上記リンクのissus見た限り根本的な解決策は出ていなさそう…
~~プルリクもその場しのぎ感が凄いし~~（いや致し方ないのかもしれないけど…

## 別のエディタを利用する

Windowsのメモ帳ならエラー起きなかったです。
当たり外れがあると思って良いと思います。

## 実行ファイルの修正

要は保存しきれていないのにイベントが発火してしまっているので、アナログな手法で遅延処理を挟む。

```diff
 const fs       = require("fs");
 const path     = require("path").resolve();
 const sass     = require("node-sass");
 const chokidar = require('chokidar');
 
 const renderFileName = "chibisuke.css";
 const sassPath       = path + "\\src\\main.scss";
 const renderPath     = path + "\\dist\\" + renderFileName;
 
 let sassContent = fs.readFileSync(sassPath, { encoding: "utf-8" });
 
 
 chokidar.watch(sassPath, { ignored: /[\/\\]\./ }).on('all', (event, path) => {
+     setTimeout(() => {
         sassContent = fs.readFileSync(sassPath, { encoding: "utf-8" });
         sass.render({
             data: sassContent
         }, (err, result) => {
             fs.writeFileSync(renderPath, result.css);
         });
+     }, 1000);
 
 });
```

### 下記リンクのプルリクをあてる

https://github.com/sass/node-sass/pull/2386

楽しいnode-sassライフを（？）:)
メディアタイプ

#メディアタイプ
どんなデバイス？
-all       :すべて
-screen    :一般的なスクリーン
-projection:プロジェクター
-print     :印刷

##サンプルcss
![media_type.png](https://qiita-image-store.s3.amazonaws.com/0/380575/86e41524-175d-4aa0-b636-7130475b53f4.png)
こんな感じ
完全未経験が転職を目指す

未経験でも可！　そんな言葉を真に受けたプログラミングすらほぼ未経験。つまり入社できてもいいところ厳しくない！？
##スペック##
自身のスペックを簡単に
 
学歴　　　　　　　：私立大学文系卒
年齢　　　　　　　：第二新卒
プログラミング経験：学生の時にfc2でHTMLで少しカスタマイズしてたくらい
現在　　　　　　　：職業訓練生

##現在やっていること##
知識面：基礎情報技術者試験勉強中
　　　　職業訓練で基礎の基礎勉強中

技術面：progateで基礎をサラッと
　　　　paizaで知識とコード学習
　　　　youtubeで見様見真似でJavaでゲームづくり＆テキストエディタでメモ
　　　　ひたすらJava写経

##これからやりたいこと##
知識面：基本情報技術者試験の内容を理解して合格
　　　　Qiitaで100いいね達成できる知識系の記事の作成

技術面：youtubeで見様見真似ゲームづくりを動作させる
　　　　以前ScracthでつくったアクションゲームをJavaでつくってみる
　　　　ハッカソン参加
　　　　
##以下ごあいさつ##
　どうもみなさん初めまして。無LINEと申します。
上記経歴からも分かります通り、現場に入ってもつかえねー！　と言われるレベルのへっぽこです。
先日とあるエンジニア志望の学生向けのイベントにそろっと参加させていただきましたところ、同年代でも上位２割ほどの技術がないと新卒でさえなかなか厳しいということを知りました。
　つまり、第二新卒実務どころか自己開発経験すらない自分は同年代の新卒入社でエンジニアやっている彼ら彼女らと比べるとその差は絶望的！？　基本情報技術者試験をキタミ式参考書を用いてさえちんぷんかんぷんな今のわたしでは就職することができたとしてもストレスでやばいんじゃないか！？と大変危機感を感じております。

　しかし、そんなわたしにもイベントの主催者様はアドバイスをしていただけました。
###実績をつくる！　インプットとアウトプット！　仲間をつくれ！　###
ありがたい限りです。ということでさっそくこうしてQiita様へ登録、Github様にも登録！（使い方わからない！）Slackも登録！（使い方わからない！）させていただきました。
　ここなどを上手く利用させていただきまして、なんとかこれからやりたいことを達成させていただきたいと思います。仲間？　べ、勉強会に参加すればいいんですかね！？
Wordpressで時間を引いたりするとき9時間ずれる対応

Wordpress で time() を使うと9時間ずれてるので忘れない様に。
秒数で引き算するとき困るのでメモ。

#1日過ぎたら終了する方法
```
                    <?php if( date_i18n('U') - get_the_time('G') < 86400): ?>
                        <span>受付中</span>
                    <?php else: ?>
                        <spa>終了</span>
                    <?php endif; ?>
```


##時間表(秒)
- 1時間	3600
- 1日間	86400
- 3日間	259200
- 1週間	604800
- 1か月間 2678400

##1週間過ぎたら終了する方法
```
                    <?php if( date_i18n('U') - get_the_time('G') < 604800): ?>
                        <span>受付中</span>
                    <?php else: ?>
                        <spa>終了</span>
                    <?php endif; ?>
```

#タイムゾーンを設定する方法
```
                        <?php date_default_timezone_set("Asia/Tokyo");
                         echo $date = date("Y-m-d H:i:s"); ?>
```
Python学習中のエラーについて

初めまして。
「ゼロから作るDeep-Learning」でDeepLearningを学習中なのですが第３章の手書き数字認識のところで発生したエラーでつまづいてしまいました。エラー内容は
ImportError: No module named 'dataset'
です。

実行環境：mac os, vscode
私が実行したことは
1.デスクトップに python というフォルダを作る

2.https://github.com/oreilly-japan/deep-learning-from-scratchからダウンロードしたファイルを1で作成したpythonというフォルダに入れる

3.vscodeでデスクトップの　python　を開く

3.ch03フォルダ内の mnist_show.py　を実行する

4.ImportError: No module named 'dataset'

いろいろ調べて見たのですがどうにもならないため質問させていただきました。
よろしければご指導の方よろしくお願いします
railsチュートリアルで良く使われる英語の意味

英語ができない自分としては、使用されているメソッドの意味などが分からず、何をしているのか理解することができていないので、Railsチュートリアル良く使われている英語の意味を辞書的な感じでメモしておきます。
自分の語学力のなさが光る記事ですね・・・

### scaffold（スキャフォールド） = 土台
使用するデータの型などを指定して、雛形を作ってくれる。

```使用例.
$ rails generate scaffold User name:string email:string
```
`scaffold`で作成したUsersリソースは、とりあえずRailsの概要を説明するには良いが、次のようなさまざまな問題点を抱えている。

- データの検証が行われていない。 このままでは、ユーザー名が空欄であったり、でたらめなメールアドレスを入力したりしても通ってしまいます。
- ユーザー認証が行われていない。 ログイン、ログアウトが行われていないので、誰でも無制限に操作できてしまいます。
- テストが書かれていない。 厳密にはこれは正しい表現ではありません。というのも、scaffoldで生成したコードにはごく簡単なテストが一応含まれているからです。ただ、scaffoldのテストコードはデータ検証やユーザー認証、その他の必要な要求を満たしていません。
- レイアウトやスタイルが整っていない。 サイトデザインも操作法も一貫していません。
- 理解が困難。 scaffoldのコードを理解できるぐらいなら、そもそも本書を読む必要はないでしょう。

### validation = 検証
`validetion`を使用すると文字数に制限をかけたりすることができる

```使用例.
class Micropost < ApplicationRecord
  validates :content, length: { maximum: 140 }
end
```

### provide = 提供する 、 yield（イェルド） = 産出

```使用例.
<% provide(:title, "Home") %>

<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
  </head>

＜中略＞

</html>
```
### split = 分割

```使用例.
>> "name".split('')
=> ["n", "a", "m", "e"]
```


### upcase = 大文字

```使用例.
>> user = User.create(name: "Example User", email: "user@example.com")
>> user.email.upcase
=> "USER@EXAMPLE.COM"
```

### authenticate = 認証する

```使用例.
# ユーザーを作成
>> User.create(name: "Michael Hartl", email: "mhartl@example.com",
?>             password: "foobar", password_confirmation: "foobar")

# 間違えたパスワードを与えると false が返ってくる
>> user.authenticate("not_the_right_password")
false
>> user.authenticate("foobaz")
false

# 正しいパスワードを与えるとユーザ情報が返ってくる
>> user.authenticate("foobar")
=> #<User id: 1, name: "Michael Hartl", email: "mhartl@example.com",
created_at: "2016-05-23 20:36:46", updated_at: "2016-05-23 20:36:46",
password_digest: "$2a$10$xxucoRlMp06RLJSfWpZ8hO8Dt9AZXlGRi3usP3njQg3...">

# !!でそのオブジェクトが対応する論理値オブジェクトに変換
>> !!user.authenticate("foobar")
```

### valid = 有効
新しく生成したuserオブジェクトが有効かどうか調べるときに使用したりする

```使用例.
> user.valid?
=> true
```

 ### presence = 存在
入力欄が空白じゃなく、存在しているかを示す。

```使用例.
validates :name, presence: true #名前の欄が空じゃないことを意味している
validates :email, presence: true #メールの欄が空じゃないことを意味している
```

### duplicate = 複製する

```使用例.
  test "email addresses should be unique" do
    duplicate_user = @user.dup #dupは、同じ属性を持つデータを複製するためのメソッド
    @user.save
    assert_not duplicate_user.valid?
  end
```

### attribute
属性ハッシュを指定して更新

```使用例.
>> user.update_attribute(:name, "Yamada") #モデル.update_attributes = { カラム名 = 値 }
   (0.1ms)  begin transaction
  SQL (0.4ms)  UPDATE "users" SET "name" = ?, "updated_at" = ? WHERE "users"."id" = ?  [["name", "Yamada"], ["updated_at", 2017-02-05 02:36:54 UTC], ["id", 1]]
   (10.0ms)  commit transaction
=> true
```
[正規表現]正規表現の先読み、後読みについてのまとめ

正規表現の先読みと後読みはややこしいですね。しかも忘れた頃に出てきますし。
ここでは[はじめての正規表現とベストプラクティス#4 先読みと後読みを極める](https://techracho.bpsinc.jp/hachi8833/2018_11_20/63564)を元に
一つ一つ見ていきます

#実行環境
正規表現は[Rubular](https://rubular.com/)を使うとさっと試せます

#先読み

例えば検索したい文字の後の文字に何か条件をつけたい場合

```
正規表現1(?=正規表現２)
```
とすることで`正規表現1`でヒットした文字列より後に`正規表現２`がヒットした場合に
`正規表現１`をヒットできます


例
文字列の中、東京、新横浜のうち駅と付いている文字列を検索したい場合
`(東京|新横浜)(?=駅)`
とすると

|検索文字列  |検索結果(太文字が検索結果)  |
|---|---|
|東京駅  | <b>東京</b>駅 |
|新横浜駅  | <b>新横浜</b>駅 |
|新横浜の中  | 新横浜の中 |
|海老名SA  | 海老名SA |



##否定先読み

同じく、条件で検索したい文字列の後に、正規表現を検索したい場合

```
正規表現1(?!正規表現２)
```
とすると今度は
`正規表現1`でヒットした文字列より後に`正規表現２`がヒット<b>しない</b>場合に`正規表現１`をヒットさせことができます


例
文字列中に東京、新横浜で●●駅と付いていない検索を行いたい場合

`(東京|新横浜)(?!駅)`
とすると

|検索文字列  |検索結果(太文字が検索結果)  |
|---|---|
|東京駅  | 東京駅 |
|新横浜駅  | 新横浜駅 |
|新横浜の中  | <b>新横浜</b>の中 |
|海老名SA  | 海老名SA |

#後読み
今度は検索したい文字よりも前に何か正規表現での検索がある場合、

```
(?<=正規表現1)正規表現２
```
とすることで
`正規表現1`でヒットした文字列より後に`正規表現２`がヒットした場合に
`正規表現２`をヒットさせることができます

例
文字列のうち、新横浜と付いている`駅`を検索

`(?<=新横浜)駅`

|検索文字列  |検索結果(太文字が検索結果)  |
|---|---|
|東京駅  | 東京駅 |
|新横浜駅  | 新横浜<b>駅</b> |
|新横浜の中  | 新横浜の中 |
|海老名SA  | 海老名SA |


#否定後読み
```
(?<!正規表現1)正規表現２
```
とすると、`正規表現2`にマッチする文字列かつ，直前に`正規表現1`にマッチする文字列が存在しない場合に`正規表現２`をヒットさせます

例
文字列のうち、`駅`を検索したい。ただし新横浜と付いて<b>いない</b>`駅`

`(?<!新横浜)駅`

|検索文字列  |検索結果(太文字が検索結果)  |備考|
|---|---|---|
|東京駅  | 東京<b>駅</b> ||
|新横浜駅  | 新横浜駅 ||
|新横浜の中  | 新横浜の中 ||
|海老名SA  | 海老名SA ||
|駅  | <b>駅</b> |（注）|

（注）このように否定の場合、新横浜以外は全て(たとえ何も記載がなくても)ヒットしてしまいます。そのため、検索結果を限定したい場合`(?<!新横浜|\s)駅`のように空白文字や改行も対象外とする必要があります

今回はここまで

(2019/06/28修正)
~~後読みで長さ不定の表現が使えない~~
後読みで長さの異なる文字列を検索する事は不可と記載しましたが、可能でした。お詫び申しまします。
[正規表現]まあまあ出てきそうな正規表現のまとめ

[[正規表現]頻出しそうな正規表現のまとめ](https://qiita.com/giosc103/items/bba556234fff85bb2e15)の続きです
正規表現は頻出するもの、あまり頻出しないものもありますね。
ここでは[はじめての正規表現とベストプラクティス#3: 冒頭/末尾にマッチするメタ文字とセキュリティ、文字セットの否定と範囲](https://techracho.bpsinc.jp/hachi8833/2018_11_07/64012)を元に
頻出するものとそこまでは頻出しないかもしれないものも取り上げてみます

#実行環境
正規表現は[Rubular](https://rubular.com/)を使うとさっと試せます

# NOT論理
とある文字列をヒットさせたくない場合などに`[^hoge]`とすることで、カッコ内の文字を検索から外します。NOT論理ですね。
ここで削除するのは`hoge`という文字列ではなく、`h,o,g,e`以外の1文字となります

例えばabcdeの間にhogeという文字をそれぞれ入れた文字列
ahbocgdeenの場合、hogeを検索結果から削除します

検索|検索文字列  |検索結果(太文字が検索結果)  |
|---|---|---|
|[^hoge]|ahbocgdeen  | <b>a</b>h<b>b</b>o<b>c</b>g<b>d</b>ee |
|[^みかん]食う客。| あ、柿食う客。かき食う客。みかん食う客。|あ、<b>柿食う客。</b>か<b>き食う客。</b>みかん食う客。  |

#英字や数字自体を指定
次に英字、数字自体を検索対象にしたい場合`-`を使用することで英字や数字を指定することができます
~~ASCIIコードをもとに文字の範囲を簡潔に表すことができます。~~
例えば[0-9]とすることで数字を表せます。
仕組みは文字コードを範囲で指定することにより、検索範囲を指定することができます。
その範囲を`-`で指定します


|検索|検索対象  |備考  |
|---|---|---|
|[0-9]|数字||
|[A-Z]|大文字英字||
|[ぁ-ん]|全角ひらがな|特殊なひらがなは対象外|
|[ァ-ヴー]|全角カタカナ|特殊なカタカナは対象外|

ただし[A-z]とすると、文字コードによってはZからaの間に`[`や`_`などといった記号にまでマッチしてしまいます。
そのため大文字小文字共に英字を検索するためには[a-zA-Z]とする必要があります。なお[z-A]とすると引っかからないです

#境界文字検索
`\b`とすると〈単語をなす文字〉の列の両端をマッチさせることができます
具体的には単語の両端に「スペース」または「記号」があると、そこが〈単語をなす文字〉の境界と認識されます。
文字列の「冒頭」や「末尾」、そして「改行」や「タブ」も境界と認識されます。
ただし、英文字に接している「数字」や「アンダースコア」は境界と認識されません。
「ひらがな」や「漢字」や「ラテン文字」は環境によって異なります([Rubular](https://rubular.com/)では境界と認識されなかったです)


|検索|検索文字列  |検索結果(太文字が検索結果)  |
|---|---|---|
| \bair\b |air \_air\_  | <b>air</b> \_air\_ |


（コメントを受けて補足。文字コードによって<単語をなす文字>が変わる場合がございます。上記の<単語をなす文字>は[Rubular](https://rubular.com/)での結果です。）

#文字列先頭と文字列末尾
ここはサクッと。

`\A`
文字列先頭を示します

`\z`
文字列末尾を示します

例

|検索|検索文字列  |検索結果(太文字が検索結果)  |
|---|---|---|
| \Aあ、 |あ、柿食う客。を見る柿食う客。柿をも食う客  | <b>あ、</b>柿食う客。を見る柿食う客。柿をも食う客 |
mailx で 日本語を含むファイルの中身をメールの本文として送信する方法(バイナリの添付ファイル化防止)

### はじめに

日本語を含むファイルを本文にしてメール送信しようとすると、バイナリファイルが添付されてメール送信されてしまいます。今回は、この現象を回避する方法を紹介します。

### 環境変数の設定

環境変数に LC_CTYPE を 設定してください。

```
export LC_CTYPE=ja_JP.UTF-8
```

### 送信コマンド

nkf コマンドで改行コードを LF に 変換した後に、メール送信してください。

```
# -d で LF 変換
nkf -d ファイル名 | mail メールアドレス

# UTF-8 のファイルでなければ -w で UTF-8 に 変換
nkf -w -d ファイル名 | mail メールアドレス
```
phpqueryでaタグ内のリンク情報を取得する

```php

  <?php
    require_once("./phpQuery-onefile.php");
    $html = file_get_contents("https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0");

    #ここでhtml全文を取得している
    $phpobj = phpQuery::newDocument($html);

    #aタグの取得
    #深い場所の子要素の場合、慎重に指定する
    $links = $phpobj["#mw-content-text > .mw-parser-output > ul > li > a"];


    #$linksはaタグの情報が入っているので、forの中でhrefの情報を取得する
    #attr("href")をtext()に変更すれば、aタグに囲まれたテキストを取得できる
    foreach ($links as $link) {
      echo pq($link)->attr("href")."<br>";
      echo pq($link)->text()."<br>";
      echo "----------------<br>";
    }
  ?>
```
QRCodeEncoderDecoderLibraryを用いてQRコードをデコードする（読み込む）Csharpの単体アプリを作る



QRCodeEncoderDecoderLibraryを用いてQRコードをデコードする（読み込む）Csharpの単体アプリを作る

※ライブラリは以下参照
QR Code Encoder and Decoder .NET Class Library
https://www.codeproject.com/Articles/1250071/QR-Code-Encoder-and-Decoder-NET-Class-Library-Writ

QRCodeEncoderDecoderLibrary.dll
[QRCodeEncoderDecoderLibrary.dll](http://thomas.cranky.jp/qr/QRCodeEncoderDecoderLibrary.dll)


```c#:sample_qr_decode
//c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /reference:QRCodeEncoderDecoderLibrary.dll /target:winexe sample_qr_decode.cs

using System;
using System.Windows.Forms;
using System.Drawing;
using QRCodeEncoderDecoderLibrary;

public class sample_qr_decode
{
 public static void Main(string[] args)
 {
    QRDecoder	QRCodeDecoder;
    Bitmap		QRCodeInputImage;
    
    QRCodeDecoder = new QRDecoder();
    
    QRCodeInputImage = new Bitmap(@".\\QR.png",true);
    
    byte[][] DataByteArray = QRCodeDecoder.ImageDecoder(QRCodeInputImage);
    
    //string Result = System.Text.Encoding.GetEncoding(932).GetString(DataByteArray[0]);
    string Result = System.Text.Encoding.UTF8.GetString(DataByteArray[0]);
    
    MessageBox.Show(Result);

 }

}
```


コンパイル（csc.exeのパスは、適宜修正。DLLは、ソースと同階層に置いてある前提。）

```
c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /reference:QRCodeEncoderDecoderLibrary.dll /target:winexe sample_qr_decode.cs
```

実行（同階層の、QR.pngを読み込んでいる。ソース参照）

```
sample_qr_decode.exe
```

注：GetEncoding(932)は、SJIS
注：エンコード（作成）とデコード（読込）で、文字コードをあわせないと、処理オチすることが多い。


結果
<img width="117" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/107418/cb980c51-c18d-3f85-2da1-cd3f434feb46.png">
![QR.PNG](https://qiita-image-store.s3.amazonaws.com/0/107418/561ecc87-d578-7fd8-ec18-98c8ba2c43d4.png)
herokuエラー： remote origin already exists.

##herokuエラー： remote origin already exists.

bitbucketで新しいリポジトリを作り、

```
$ git remote add origin git@bitbucket.org:<username>/sample.git
```
コマンドを打ったところ、以下のようなエラーになりました。

```fatal: remote origin already exists.```

##解決方法

```
$ git remote rm origin
```
を打ち、再度以下のコマンドを打つと、うまくいきました。

```
$ git remote add origin git@bitbucket.org:<username>/sample.git
```
なぜエラーになったかなどは以下の記事が丁寧に説明されています。

##参考
http://pyoonn.hatenablog.com/entry/2014/10/29/191744
AWS認定クラウドプラクティショナーに合格したのでメモ

## はじめに

3月16日にAWS認定クラウドプラクティショナーを受験し、合格しました。

2月27日頃から勉強を始めたので、およそ2週間強での合格でした。

この記事では合格に至るまでの勉強の内容について書いていきたいと思います。

## 試験を受けるまでのAWS経験

- 2016年ごろに「Amazon Web Services 基礎からのネットワーク&サーバー構築」の改定前のバージョンを読了
- 2016年に当時の会社のHPのAWSへのマイグレーション作業を実施
- gitlabのEC2上へのデプロイを実施
- 業務システムにおけるAWS SDK for Javaを使ってログファイルのS3への転送バッチの作成

## 試験勉強の内容

### 試験概要の把握

まずは「AWS 認定クラウドプラクティショナー(CLF-C01) 試験ガイド」を読み、試験の概要・内容を把握しました。

### ホワイトペーパーの読み込み

上記試験ガイドにあった「試験準備」のコンテンツを学習しました。

- AWSトレーニング「AWS Cloud Practitioner Essentials」
- AWS ホワイトペーパー「アマゾン ウェブ サービスの概要に関するホワイトペーパー」(2回読了)
- AWSホワイトペーパー「AWS サポートのプラン比較 Web ページ」

### 動画での学習

- Udemy[「手を動かしながら2週間で学ぶ AWS 基本から応用まで」](https://www.udemy.com/aws-14days/)を動画をすべて通して見る
- (実際に自分で作業はせず、動画を見たのみ
- [Safari Books Online「Watch: AWS Certified Cloud Practitioner Complete Video Course]
(https://learning.oreilly.com/videos/aws-certified-cloud/9780135175507)

### 模擬試験を解いた

勉強を始めて10日ほどたった段階でAWS公式の模擬試験を受験しました。

問題数が20問しかなかったためあっという間に終わってしまいましたが、成績としては100点満点を取ることができたので本試験に進めるという確信を得られました。

### 問題集を解いた

試験を受ける3日ほど前に「AWS Certified Cloud Practitioner 2019 Practice Questions」という問題集を解きました。

問題を一通り時、間違った問題・分からなかった問題をチェックし重点的に勉強していました。

## 試験の印象について

受験をしたのは東京の歌舞伎座テストセンターという会場でした。パスポートと免許証を提示後ロッカーの鍵を渡されて待機。

試験時間になったところで試験官が試験室への入室合図を出して、簡単な説明の後に試験を開始しました。

試験時間自体は90分ありましたが、全問題に回答後、画面上で行うアンケートにも答えて合格結果が表示されるまで30分とかかりませんでした、想像以上に早く終わってしまったことにびっくりしていたと思います。

体感的には1.5割ほど分からない問題がありましたが、結果は1000満点中873点という結果になりました。

## 試験対策に効果的だったこと

### AWSを実際に触った経験

冒頭に書いたAWS経験として手を動かしてAWSを触ってはいましたが、2月末から受験日にかけた勉強中には**アカウントの登録作業を除いて、AWSを直接は一切触りませんでした。**

しかし冒頭に書いたAWSの経験がなければ、勉強の段階から確実に苦戦していたと思います。

今までAWSを触ったことがない場合は、やはり触ってみるのが一番でしょう。

肌感覚としては、「手を動かしながら2週間で学ぶ AWS 基本から応用まで」を動画をすべて通して見てAWSサービスの概要を把握して、そのあとにもう一度動画を見ながら手を動かして行けばクラウドプラクティショナーのレベルとしては十分かと思います。

AWSのサービスはウェブコンソールからだけでなくCLIとSDKからも操作が可能ですが、試験を受けた感じだとCLIとSDKはそこまで触らなくてもいけるのかなという印象でした。

### 実際に認定の問題を解いたこと

クラウドプラクティショナーは入門者用の認定ということもあり比較的簡単な問題が多かったですが、それでも問題集を解いて見た経験があるかどうかはかなり影響が大きかったと思います。

模擬試験で正答率100%を出せたので受験を申請しましたが、やはり問題数が20問しかなく本試験の65問に比べると少なかったという印象を持ちました。

そのためAmazonにあったCloud Practitionerの問題集190問を購入(Kindle Unlimited)して、そちらを解いてみると1割ほど分からない問題もありました。

特に災害対策の分野は試験ガイドには記述がなかったのですが、問題集でも実際の試験でも出題された(!)ので、模擬試験で幅広い分野の問題を解くのは有意義でした。

問題集は英語ではありましたが、比較的短い文章も多いですし翻訳でも読めなくもないと思うので、やってみるのをお勧めします(kindle unlimitedユーザーなら読み放題で読めます)

## 今後について

初学者用の認定を取れたことですし、次はAssociateレベルの認定3種類に合格できるよう学習を進めていきたいと思います。
はじめての受託PJの振り返り

去年から受託形式で自社内で開発を担当したはじめてのプロジェクトの開発フェーズが終了したのでその振り返り記事です。
今まではSESで客先に常駐する形でしか仕事をしていなかったのでそこらへんを中心にお話できればと思います。

#プロジェクト概要
BI系のプロジェクトで某食品企業の販売情報とかを集計するツールのリプレイス案件です。
現行ツールはMySQLに入ったデータをSQLスクリプトを使って集計します。
新ツールはAb InitioというETLツールを使います。
開発規模は15～20人月くらいでメンバーは自分を含め4～5人程度になります。
私の社内での立ち位置としては開発チームのサブリーダーです。
ただリーダーとPMを先輩が兼任していたのもあり基本私が開発を任されていました。



#失敗したこと
##要件定義
リプレイス案件だったのでお客さんからは現行保証！現行保証としか言われず互いの役割分担だけ決めて始めったプロジェクト
終盤になるにつれ、インターフェイス間のデータの不整合がわかり追加の作業が発生しました。
分担としてそこはお客さんの方で責任を持つ場所だったのですが開発スケジュールが遅れてしまうためうちで消化することになりました。
お客さんと話をしていてどっちが責任をもつ作業か？という話し合いをして自分たちがやらないことに関してあまり考えないでいたと思います。
実際に手を動かすのは私達でなくても想定として問題ないかヒアリングして検証しておく必要があったなと思いました。

![hanashiai_business_man.png](https://qiita-image-store.s3.amazonaws.com/0/137987/ffa14a2a-a2b4-c048-c4a9-8958361d61ff.png)


##コードレビュー
メンバーのうち二人は１～2年目の新人だったのでこまめにチェックをしていました。
ただもうひとりは私より経験が長い方だったので簡単な規約を守ってるか程度のチェックしかしていませんでした。
あとからわかったこととしてこの方が作ったコードが規約など決めていないレベルで結構トリッキーな処理をしていてあとから私が修正することになりました。
コードレビュー大切

![pasokon_kyoushitsu.png](https://qiita-image-store.s3.amazonaws.com/0/137987/bcd57ba5-5829-f148-206b-a9b48e868d97.png)

#良かったこと
##Trelloの活用
進捗の管理はTrello(https://trello.com/ja) を使ったのですがこれまでエクセルで進捗管理していたみからするととてもよかったです。
Trelloについて自分なりに調べて記事も書きました。

【随時更新】Trelloを使った進捗管理
 https://qiita.com/nanaki11/items/c591bc4a317a34c1b48a
ルールとしてなにかあったらとりあえずコメントを書いておこうということにしてデスクトップにコメントが通知されるようにしていたので早い段階で新人たちのミス等を発見できました。

##知識の共有
今回使用したツールはメンバー全員が経験年数1年未満でした。
私が一番短くて今回が初めてです。
また独自ツールなのでネットに情報も転がっていません。
なので知識の共有が急務だと思いノウハウを共有できるようにしました。
ペアプロとかをしてみるのも良かったのかなと思います。

#今後挑戦してみたいこと
##アジャイル開発
今回のプロジェクトはウォーターフォールよりアジャイル的な考え方で進めていました。
ただスクラムとかなんだとか私以外のメンバーが理解していなかったのであくまで風という感じでコントロールして終わってしまいました。
小さいウォータフォールを繰り返しただけかもしれません。
PMの先輩もアジャイルって設計書書かないやつでしょくらいの感じです。
自分自身もそうですがメンバーの皆さんにもアジャイルの知識をつけてもらってプロジェクトを進められればなと思いました。
[DB][PowerShell] SQL Server バックアップを曜日単位で共有フォルダにコピー

SQL Server 製品版では、定期的なバックアップをメンテナンスプランで構成することが多いと思います。

`BACKUP DATABASE` コマンドの出力先に共有フォルダを指定することも可能ではありますが、SQL Server 実行ユーザーに権限が必要ですし、ローカルにバックアップを出力したうえでリモートにもコピーして多重化したい、ということもあるでしょう。
また、データベースと同期をとるべきリソースファイル群も、同じタイミングでリモートにバックアップできれば便利です。

ここでは、ローカルに出力したデータベースバックアップとリソースファイル群を共有フォルダにコピーする方法をご紹介します。
バックアップのサイクルは日次で、データベースバックアップは一週間分の世代を保持するものとします。
リソースファイル群は差分のみ適用して同期をとります。

##### 1. SQL Server 構成マネージャから、エージェントサービスの実行ユーザーをリモートアクセス権限のあるアカウントに設定します。

※仮想アカウント「NT SERVICE\SQLSERVERAGENT」の既定構成では共有フォルダにアクセスできません。

##### 2. バックアップ先のリモートPCに共有フォルダを作成し、「1」のアカウントに変更権限を付与します。

##### 3. Management Studio を起動してデータベースに接続します。

##### 4. メンテナンスプランを作成します。

##### 5. サブプランを追加してスケジュールを設定します。

##### 6. [ツールボックス] から「T-SQL ステートメントの実行タスク」をドラッグして完全バックアップ文を登録します。

```sql
BACKUP DATABASE [Northwind] TO DISK = N'C:\Backup\SQLServer\Northwind.bak' WITH INIT, NAME = N'Northwind_backup'
```

※「データベースのバックアップ タスク」では、バックアップファイル名を同一にして上書きすることができません。

##### 7. [SQL Server エージェント] から、バックアップファイルを曜日ごとにコピーするジョブを作成します。

　種類：PowerShell

```powershell
Copy-Item -Force -Path "C:\Backup\SQLServer\Northwind.bak" -Destination ("Microsoft.PowerShell.Core\FileSystem::\\remote-pc\Backup\SQLServer\Northwind_{0}.bak" -f (get-date).DayOfWeek)
```

※「(get-date).DayOfWeek」で「Sunday」など曜日文字列を付加しています。

※コピー先の共有フォルダパスは「Microsoft.PowerShell.Core\FileSystem::」で修飾します。これをつけ忘れると、ジョブ履歴に成功と記録されるものの、実際にはコピーされません。履歴の詳細を確認すると PowerShell で次のエラーが発生していることがわかります。

```
「PowerShell によって返されたエラー情報: 'コピー元パスとコピー先パスが同じプロバイダーを解決しませんでした。 」
```

##### 8. [SQL Server エージェント] から、リソースファイル群の同期ジョブを作成します。

　種類：PowerShell

```powershell
robocopy "C:\Backup\Resources" "\\remote-pc\Backup\Resources" /E /DCOPY:T /MIR
```

※robocopy はコピーに成功したときの戻り値が 0 でないため、[種類] に「オペレーティング システム（CmdExec）」を指定すると既定で失敗扱いにされてしまいます。

##### 9. サブプランのデザインに戻ります。

##### 10. [ツールボックス] から「SQL Server エージェント ジョブの実行タスク」をドラッグして矢印で接続し、 [編集] から「7」のジョブを選択します。

##### 11. [ツールボックス] から「SQL Server エージェント ジョブの実行タスク」をドラッグして矢印で接続し、 [編集] から「8」のジョブを選択します。

##### 12. 作成したメンテナンスプランは [Integration Services] に接続してエクスポートできます。

　[格納済のパッケージ]
　　[MSDB]
　　　[Maintenance Plans] 

##### 13. バックアップフォルダのイメージ

```
Northwind.bak
Northwind_Friday.bak
Northwind_Monday.bak
Northwind_Saturday.bak
Northwind_Sunday.bak
Northwind_Thursday.bak
Northwind_Tuesday.bak
Northwind_Wednesday.bak
```
matplotlib.pyplotをimportするとエラーが出たり画面が白く描画される問題の対応(macOS)

[Graphillion](https://github.com/takemaru/graphillion/wiki) を macOS Mojave & Python 3.7.2 で試す際に、得られたグラフを Graphillion のチュートリアル通りにプロットしようとしたのですが、 `import matplotlib.pyplot as plt` するときにエラーが出てしまいました

エラー内容

```
$ python
Python 3.7.2 (default, Mar 21 2019, 01:53:44)
[Clang 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mascii/.pyenv/versions/3.7.2/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2372, in <module>
    switch_backend(rcParams["backend"])
  File "/Users/mascii/.pyenv/versions/3.7.2/lib/python3.7/site-packages/matplotlib/pyplot.py", line 207, in switch_backend
    backend_mod = importlib.import_module(backend_name)
  File "/Users/mascii/.pyenv/versions/3.7.2/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/Users/mascii/.pyenv/versions/3.7.2/lib/python3.7/site-packages/matplotlib/backends/backend_macosx.py", line 14, in <module>
    from matplotlib.backends import _macosx
ImportError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.
```

# 対策
- `PyQt5` を `pip install` する
- 以下のコマンドを実行して `matplotlibrc` の場所を特定する

```console
$ python -c "import matplotlib;print(matplotlib.matplotlib_fname())"
```

- vim や VSCode などで `matplotlibrc` を開く
- `backend: macosx` となっている行を `backend: Qt5Agg` に置
き換える
    - `backend: Tkagg` とすると画面が白く描画されてしまいました
<img width="752" alt="Screen Shot 2019-03-21 at 19.04.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/137045/b431bda4-3e54-2e8b-7fb6-f941ecedf097.png">

以下のようなエラーが出ながらも、グラフをプロットができるようになりました。

```
/Users/mascii/.pyenv/versions/3.7.2/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)
  if cb.is_numlike(alpha):
```
<img width="752" alt="Screen Shot 2019-03-21 at 19.17.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/137045/eec15e7e-5296-9551-7731-d8aca488147f.png">

(上のグラフは以前に書いた [Pythonとグラフ理論で全国小中学生プログラミング大会グランプリ作品を解く](https://qiita.com/mascii/items/f0e82f9bd8397763c573) で紹介したプログラムで出力しました)

# 参考サイト
- [Pythonでmatplotlibをimportするとエラーが出る場合の対処策（Mac）](https://qiita.com/Gen6/items/78d83d117ef67e0d53c2)
- [Pythonのmatplotlibで画面が白くなり描画（表示）されない場合の対処法(Mac)](https://murabitoleg.com/mac-matplotlib/)
heroku ログインエラー

##herokuログインエラー

railsチュートリアルの第一章で

```
$ heroku login
```
を実行しようとしたところ、
以下のような画面になりました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/365406/fa437908-5ac2-253c-3346-5e6fc9c1d8ad.png)
##解決方法

以下のコマンドに変更すれば、すっかり解決しました！

```
$ heroku login --interactive
```

この後にメールアドレスとパスワードを入力すればOKです。
[正規表現]頻出しそうな正規表現のまとめ

正規表現って忘れた頃に突然必要になりますね。勉強するする詐欺になってましたが仕事で必要になったので、この機会に[はじめての正規表現とベストプラクティス#1: 基本となる8つの正規表現](https://techracho.bpsinc.jp/hachi8833/2018_10_11/62948)を元に備忘録的にまとめました

#実行環境
正規表現は[Rubular](https://rubular.com/)を使うとさっと試せます

#直前文字検索

`?`か`+`を使用して直前の文字を検索することができます。
ただし`?`は直前文字が0でもヒットするので、
ユーザー？と検索するとユーザもユーザーもヒットします

|メタ文字  |意味  |
|---|---|
|?  |直前の文字が0文字もしくは１文字以上あるメタ文字  | 
|+  |直前の1文字が「1個以上」繰り返されることを表すメタ文字  |

例
検索対象:コンピュータ コンピューター コンピューターー

|検索  |検索結果(太文字が検索結果)  |
|---|---|
|コンピューター?  | <b>コンピュータ</b> <b>コンピューター</b> |
|コンピューター+  |コンピュータ <b>コンピューター</b> <b>コンピューターー</b>  |

##繰り返し回数指定
直前文字の繰り返し回数を指定したい場合は`{N,M}`のようにすれば回数を指定できます

|メタ文字  |意味  |
|---|---|
|{N,M}  |直前の1文字が「N個以上M個以下」繰り返されることを表す  | 

例
文字列: aー aーー aーーーー aーーーーー

|検索  |検索結果(太文字が検索結果)  |備考  |
|---|---|---|
|aー{2,4} |aー <b>aーー aーーーー aーーーー</b>ー|ーを2から4回繰り返す|
|aー{2,} |aー <b>aーー aーーーー aーーーーー</b>|ーを2回以上繰り返す|


#検索したい文字に間に何か入っている場合

例えば`シーチキンおにぎり`を検索したいとします。でも世の中には`シーチキンマヨネーズおにぎり`が巷にあふれています。その場合、単に`シーチキンおにぎり`を検索してもヒットしません。`シーチキン`と`おにぎり`を両方検索するとマッチはしますが、冗長です。こんな時に任意の文字が入ってもヒットする検索方法があります

##最長一致
よく、ファイル名を`tmp_日付とか何か.txt`といったように接頭文字を入れることがあります。
こういう時に`.+`を使用して`tmp_.+.txt`と
`.+`を入れることで`tmp_`と`.txt`の間に任意の文字が入っても検索できます

例

|検索  |検索対象  |検索結果(太文字が検索結果)  |
|---|---|---|
|temp_.+.txt|temp_aa.txt |<b>temp_aa.txt</b>|
||temp_bb.txt |<b>temp_bb.txt</b>|
||temp_.txt |temp_.txt|
||temp_.jpg |temp_.jpg|

###最長一致
ただし`.+`は
例えば`柿食う客。みかん食う客。`の文で`柿`と`その客`をヒットさせたい場合に、
`柿.+食う客`と検索すると、全てヒットしてしまします(最長一致)

###最短一致
`.+?`はヒットした最短を返却できます
例えば`柿食う客。みかん食う客。`の文で`柿`と`その客`をヒットさせたい場合に、
`柿.+?食う客`と検索すると、`柿食う客。`がヒットできます(最短一致)

例　あ、柿食う客。を見る柿を食う客

|検索  |検索結果(太文字が検索結果)  |備考　|
|---|---|---|
|柿.+食う客  | あ、<b>柿食う客。を見る柿を食う客</b> |最後の`食う客`と最初の`あ、柿`の間に任意の文字があると見なされる。|
|コンピューター+  |あ、<b>柿食う客</b>。を見る<b>柿を食う客</b>  |`食う客`より前を検索し、すぐに見つかった`柿`がヒットしたら、それを検索結果とする|

ということで最初の`シーチキンマヨネーズおにぎり`に対して`シーチキン`と`おにぎり`を元に検索したい場合は`シーチキン.+?おにぎり`とすればいい感じかと

#指定文字検索

検索したい文字を指定したい場合`[]`で囲むと、文字のどれか一文字を検索します。順番は問いません。ただし一文字だけしかヒットさせません。`[]+`とすることで長さを任意にすることができます

例
あ、柿も食う客。を見る柿を食う客。そして柿をも食う客

|検索 |検索結果(太文字が検索結果)  |備考|
|---|---|---|
|柿[もを]食う客|あ、<b>柿も食う客</b>。を見る<b>柿を食う客</b>。そして柿をも食う客 |`柿をも`はヒットしない|

#どちらかを検索
文字列のうち一方が引っかかってくれれば良い場合を考えます。
`(xyz|abc)`とすると`xyz`と`abc`内のどちらかが引っかけます。
ただし`xyzabc`と連続している場合は引っ掛けれません。いわゆるXOR論理です。
条件内は文字順が変わるとヒットしません(zyxはヒットしない)

例
あ、柿をも食う客。みかんをも。かんみをも。柿みかんをも

|検索 |検索結果(太文字が検索結果)  |備考|
|---|---|---|
|(柿|みかん)をも|あ、<b>柿をも</b>食う客。<b>みかんをも</b>。かんみをも。柿<b>みかんをも</b> |`柿みかん`はヒットしない|

この時`柿みかんをも`を引っ掛けたいときは
`(柿|みかん|柿みかん)をも`とする必要があります。

####注意点
`(xxx|yyy|)`と最後に|を入れてしまうバグがあります。これよくやります。
これをしてしまうと文字と文字の間がヒットしてしまい、検索結果が悲惨な結果になります



#エスケープ
\
`+` `,` `?`そのものを検索したい時にはバックスラッシュを直前に加えます
ちなみに\はmacでは「option」＋「￥」でできます

例
1+1をヒットさせたい
`1\+1`
phpqueryで子要素を取得する

```php

  <?php
    require_once("./phpQuery-onefile.php");
    $html = file_get_contents("https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0");

    #ここでhtml全文を取得している
    $phpobj = phpQuery::newDocument($html);

    #子要素の取得
    #欲しい子要素の情報が深くにあっても
    #順番に指定すれば取得可能
    $children = $phpobj[".asbox, .plainlinks, .noprint > .mbox-image > .mbox-text"];

    echo "children";

    foreach ($children as $child) {
      echo pq($child)->text()."<br>";
      echo "----------------<br>";
    }
  ?>
```
「if then else fi」を一行で書く（シェルスクリプト）

こんにちは。
シェル（スクリプト）で、```if then else fi``` を一行で書きました。

## 「if then else fi」
* 加えて、`&&` および `||` を用いて同等なことを行いました[^1]。

```shell
if command1; then command2; else command3; fi
{ command1; } && { command2; :; } || { command3; }
```

##### 例 #####
```shell
if [ $? -eq 0 ]; then echo TRUE; else echo FALSE; fi
{ [ $? -eq 0 ]; } && { echo TRUE; :; } || { echo FALSE; }
```


#### ＆＆ および ｜｜ を用いた構文について ####

上記の `&&` と `||` を使ったものに関して、

##### 簡素化可能な場合 #####
コマンドグループ（グルーピング）[^2] `{}` は、その中の `command` が一つの場合には不要です。また `command2` の終了ステータスが常に `0` （成功）ならば、`:` コマンドも省略できます。

* 下記がその例です

```shell
[ $? -eq 0 ] && echo TRUE || echo FALSE
```

##### shellcheck を用いて検査 #####
ただし、shellcheck を用いて検査すると警告が出ました。

```console
$ echo '{ echo "A"; } && { echo "B"; :; } || { echo "C"; }' | shellcheck -s sh -
 
In - line 1:
{ echo "A"; } && { echo "B"; :; } || { echo "C"; }
              ^-- SC2015: Note that A && B || C is not if-then-else. C may run when A is true.

For more information:
  https://www.shellcheck.net/wiki/SC2015 -- Note that A && B || C is not if-t...
```

## 「while ... do 〜 done」 、「for ... do 〜 done」 

「while ... do 〜 done」 、「for ... do 〜 done」 を一行で書くと、

```shell
printf 'a\nb\n' | while read -r line; do echo $line; done
```

```shell
for i in 1 2 3; do echo $i; done
```

## 「case in esac」 ##

「case in esac」を一行で書く場合は、そのまま率直です。

```shell
case "$var" in a*|"") my_func "$var" ;; esac
```

## 関数 ##

関数を一行で書く場合も、そのまま率直です[^3]。

```shell
hello() { echo "Hello, $1."; }
```

[^1]: 参考：「[便利だが理解を要する制御演算子 `&&` と `||`](https://qiita.com/miyu/items/f467c3fd693b5a8d5472)」
[^2]: コマンドグループ `{}` (brace) 内は末尾の `;` および開始終了位置の空白（blank space）が必要です。したがって最小例は `{ :; }` となります（もしも `{  }` のように何もコマンドを入れない場合はエラーとなります）。
[^3]: 一行で書く場合でも、コマンドグループ `{}` を用いる必要があります。
macでnpmが使えるようになるまで

以下の順にコマンドを打てばokです。

① brew install nodebrew
② mkdir -p ~/.nodebrew/src
③ nodebrew install-binary latest
④ nodebrew list
⑤ nodebrew use v11.12.0
⑥ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
⑦ source  ~/.bash_profile
⑧ npm -v
WebSocketはUnityのWebGLエクスポートでどれぐらいのリアルタイム性を発揮できるか、検証してみた

https://test-rails-demo.herokuapp.com/
上記サイトにあるプラウザ上にあるユニティちゃんを、スマホで操作できるかを試してみよう。
上記demoの動画をgifとしてアップしました。
![websocketdemo_part01.gif](https://qiita-image-store.s3.amazonaws.com/0/228366/e5f8e0ec-370b-728d-3433-d836761adfac.gif)

興味のある方はこちらのyoutube動画もご覧ください。
[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/cxQea2QO_AY/0.jpg)](https://youtu.be/cxQea2QO_AY)

#前提
前提として、Rails5からActionCableというWebsocketを使いやすくするframeworkが登場しましたが、
このframeworkは普通のWEB用で、クライアント側(ブラウザ側)からの送信処理、サーバからの受信処理は全てJavaScriptで書いてあります。
そこで、サーバ側はActionCableのままで(Railsのままで)、クライアント側をクロスプラットフォームにすれば、それはどれほど素晴らしいことか……

#準備作業
車輪の再発明にならないように、Google先生に聞いてみました。
「actioncable unity」で検索……と、出てきたは記事の中の送受信処理はJavaScriptのままになっています。
で、Unityのアセットストアも検索して、「Simple Web Sockets for Unity WebGL」はちょうど需要に合致しました。
Downloadし、解凍すると、
・WebSocket.cs
・websocket-sharp.dll
・WebSocket.jslib
の三つのファイルが出てくるはず。この文章を書いている時点では、「Simple Web Sockets for Unity WebGL」既にUnityアセットストアから削除されたらしく、でも問題ありません。
https://github.com/sta/websocket-sharp
からダウンロードしたzipファイルを解凍し、中の「websocket-sharp」フォルダをそのままUnityのAssets\Pluginsにコピーすればいいです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/228366/3e00e668-e3fe-71b8-f24b-30336c4fcd53.png)

#ActionCableのwrapperの作成(C#(unity版))
とりあえず動く(Chrome Ver 72.0.3626.121とAndroid8.1.0)ようになりました。コア部分のソースは
https://github.com/chooaya/ActionCableUnityCSharp
にコミットしました。どこがボトルネックかを究明し、修正したらまたコミットしなおします。

#アップしたYoutube動画の説明
赤い線で囲んだ3Dキャラを下のコントローラーで操作できるかのデモ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/228366/f6e248af-950a-d1c6-c61d-444f825ab04d.png)
3Dキャラ側はゲーム画面起動と同時にwebsocketサーバに接続(Subscribe)し、3Dキャラをユニークのキーとして、サーバに登録します。


コントローラーはapkファイルとしてスマホにインストールされ、起動すると、websocketサーバに接続(Subscribe)します。websocketサーバがこれを検知したら、今サーバに接続している全てのユーザーをbroadcastします。

コントローラー側は受信したユーザーに対して、コマンド(上下左右の移動、ジャンプなど)を発行し、それがまたwebsocketサーバ経由で3Dキャラに到着します。

#問題点
コマンドを発行してから1秒(場合によってはそれ以上)も経ったのに、キャラはまだ動きません。

#課題
1,コマンド発行→サーバ受信→ターゲットクライアント受信の間の経過時間を算出
2,UnityのWebGLエクスポート側はwebassemblyとjavascriptとの間に通信があり、それがボトルネックになっているかを検証
phpqueryで複数のクラスを持つデータを取得する

```php

    <?php
    require_once("./phpQuery-onefile.php");
    $html = file_get_contents("https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0");

    #ここでhtml全文を取得している
    $phpobj = phpQuery::newDocument($html);

    #classのデータを取得
    #複数のクラスを持つ場合は
    #カンマ区切りでクラスを指定すれば
    #全部の条件に合致するデータを取得できる
    $classes = $phpobj[".asbox, .plainlinks, .noprint"];

    echo "class<br>";

    #それぞれのデータを表示する
    foreach ($classes as $class) {
      echo pq($class)->text()."<br>";
      echo "----------------<br>";
    }
  ?>
```
カンマで区切れば、複数のクラスを持つ要素でも指定できる。
WindwosでTCP/UDPを調査する便利ツール

# はじめに

WindowsでさくっとTCPポートを開いているプロセスを調べたり、任意のホストに対してTCP/UDPポートが開いているか調べるMS製ツールがあったのでメモっておく。

# TCPView for Windows

[TCPView for Windows](https://technet.microsoft.com/ja-jp/sysinternals/tcpview.aspx)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8995/a96d7cc1-307a-459b-a8fe-1c81578c5f9a.png)


# Portqry / PortQueryUI

[Portqry / PortQueryUI](https://support.microsoft.com/ja-jp/help/310099/description-of-the-portqry-exe-command-line-utility)

リンク先にはCUIのPortqryV2とGUIラッパーのPortQueryUIがある。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8995/6e24e0ca-b91f-67a1-65c6-f794634a86e8.png)
F#でどこでもビルド〜、みたいな

# Summary

スクリプトファイル(fsx)をビルドする

つまりは`exe`ファイルを作る

どこでも同じ`exe`ファイルをつくる

たとえば、自分のパソコンとかトラビスとか

## 結論

`noframework`でいく


## こんな感じ

```bash

function create_exe_file () {

    local corlib="packages/NETStandard.Library/build/netstandard2.0/ref/mscorlib.dll"
    local runtime="packages/NETStandard.Library/build/netstandard2.0/ref/System.Runtime.dll"
    local netstandard="packages/NETStandard.Library/build/netstandard2.0/ref/netstandard.dll"
    local fsharpCore="packages/FSharp.Core/lib/net45/FSharp.Core.dll"


    local arr=(
        "${FSX_PATH}"
        --nologo
        --simpleresolution
        --out:./bin/$(basename "${FSX_PATH}" .fsx).exe
        --noframework
        --reference:$corlib
        --reference:$runtime
        --reference:$netstandard
        --reference:$fsharpCore
        ### ===== enable print debug =====
        # --define:DEBUG
        ### ===== crete debug symbol file (.mdb) =====
        # --debug+
        # --optimize-
    )
    fsharpc "${arr[@]}"
}
```

### ポイント

`fsharp.core`が揃えばなんとかなる（かも）
ffmpegの（個人的に）よく使うオプションまとめ

# FFMPEGの（個人的に）よく使うオプションまとめ

## 記述意図
- GitHubにまとめづらい
- やることがバラバラだからまとまってる記事がない
- 必要なさげなことが多くて読みにくい記事が多い

## 環境
### 環境1
Mac mini (Late2014)
macOS Mojave 10.14.3
ffmpeg version 4.1

### 環境2
HP z400
Ubuntu 18.04 LTS
ffmpeg version n4.1
Xeon X5690
Quadro K2000 とか

##オプションについて（本題）

####基本
```
ffmpeg -i input.mp4 output.mp4
```
フォーマットさえしっかりしていればとりあえずこれでOK

####音声抽出
```
ffmpeg -i input.mp4 output.mp3
```
とりあえずこれで良い

####画像抽出
```
ffmpeg -i input.mp4 -ss 15 -f image2 output.png
```
15秒目の画像を抽出する
-ss は開始位置だけど、1枚しか画像を抽出しないならこれが抽出位置になる
-f 知りたければ自分で調べてね
エラーっぽいの出るけど、画像得られるから無問題

####動画抽出
```
ffmpeg -i input.mp4 -ss 42 -t 23 output.mp4
```
動画を42秒目から23秒間抽出する
つまり
0:42 -> 1:05
が出力される

####フレームレート指定
-r:v 値(fps)

```
ffmpeg -i input.mp4 -r:v 30 output.mp4
```
30fps

####ビットレート指定
-b:v 値(bps)

```
ffmpeg -i input.mp4 -b:v 1k output.mp4
```
1kbps
あまり小さいと無視されるっぽい

2分5秒の動画で比較すると

|指定レート(bps)|生成ファイル(MB)|実際のレート(bps)|
|:-:|:-:|:-:|
|1k|6.1|390k|
|100k|6.1|390k|
|10M|152|9.7M|

#####ちなみに画質差はこんな感じ
100k
![n100k.png](https://qiita-image-store.s3.amazonaws.com/0/253609/1ff9b782-ae47-8255-2135-cecdf5731e48.png)
1M
![n1m.png](https://qiita-image-store.s3.amazonaws.com/0/253609/232db06d-32cb-5c74-ba4c-2390e6fa5128.png)
10M
![n10m.png](https://qiita-image-store.s3.amazonaws.com/0/253609/86b0d79d-c4b7-25c9-7009-cc653994ade2.png)
入力：1920x1080 mov (iPhone 7 Plus -> mac)
コーデックとかにも依るのかもだけど

####動画回転
#####右90度回転
-vf transpose=1

```
ffmpeg -i input.mp4 -vf transpose=1 output.mp4
```
#####左90度回転
-vf transpose=2

```
ffmpeg -i input.mp4 -vf transpose=2 output.mp4
```
右
![tr1.png](https://qiita-image-store.s3.amazonaws.com/0/253609/c7a49539-c572-80ab-598d-9f9f21ea6e20.png)
左
![tr2.png](https://qiita-image-store.s3.amazonaws.com/0/253609/7ddd11de-9843-ee09-3701-d24e28275ef1.png)

#### コーデック設定
-c:v コーデック名
#####h264
```
ffmpeg -i input.mp4 -c:v h264 output.mp4
```
#####h264_nvenc (GPU)
```
ffmpeg -i input.mp4 -c:v h264_nvenc output.mp4
```

#####処理時間の差
-b:v 30M (30Mbps)
125秒動画の形式変更 mov -> mp4

|codec|処理時間(秒)|生成ファイル(MB)|
|:-:|:-:|:-:|
|h264|276|451MB|
|h264_nvenc|95|454MB|
「すべてを名言っぽくするサービス作った 」- 名言太郎 -

# 「人間は名言を作る葦である」　-パスカル-
誰にでも素晴らしい名言を作り、その言葉を欲している人に届けたいという思いはあるかと思います。

そんな名言欲を埋めたい人類のために**有象無象の言葉を名言っぽい雰囲気にしてシェアできるサービス**を作りました。

twitterアカウントとの連携で簡単に利用できるようになっています、ぜひ使ってあなたの名言欲を解消しましょう！

**[名言 - MEIGEN - | すべてを名言っぽくして共有するサイト](https://meigen.life)**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/284471/32acb918-efee-a5ac-3394-4e2ab2f47f98.png)



というわけで、茶番と宣伝が終わったので、本編に入ります

# なぜ作ったの?

このサービスは、プログラミングの勉強と、飽きっぽい性格を治すための精神修行、そして自分のポートフォリオづくりの一環で作りました。こんな自分でも頑張ったらサイトが作れるってわかったので、もっと積極的にアウトプットしていきたいと思います。

#サービスの構成
今回、フロントエンドを**Vue + Netlify**、バックエンドを**Kotlin + Ktor + Heroku**、データベースを**MariaDB + Conoha**で作成しました。

なぜこんな構成にしたって？　cors対応やってみたかったのと、kotlinで作りたかったんだ。。。

以下、使ってみた上で発生した問題点なんかを紹介していきます

## Vue + Vue Router + Vuex
今回はじめてVue Routerを使ったのですが、**「path: '/list/:page'」**のように動的ルートマッチングを使った場合に、**「/list/1」**から**「/list/2」**に遷移するとcreatedが呼ばれず画面の要素が変わらないという問題に遭遇しました。

解決策としては、**beforeRouteUpdate**を追加してcreatedの処理内容をbeforeRouteUpdate内にも入れるようにするといいと思います。（プロの方もっといい方法があれば教えてくれると嬉しいです）

## Kotlin + Ktor
Kotlin + Ktorについてはとにかく情報量が少なく、完成するまでに公式の英語ドキュメントやSampleのソースを何回も見て、どう実装すればいいのかを地道にチェックしながら作っていきました。
もしKtor使ってて実装の仕方がわからないよぉってなった場合は公式英語ドキュメントや公式Sampleの一つであるYoukubeを確認してみるといいかもしれません。

また、Ktorのjsonパーサとして「jackson」を使用していて、「is〇〇」という名前のフィールドを持ったdata classをcall.respondでjson形式にしてクライアントに返した際に、

```kotlin:sample.kt
data class ResponseHoge(val isHoge: Boolean)
get("/") {
    call.respond(ResponseHoge(true)) // 自動でJson形式に変換してクライアントに返される
}
```

```json:response
{"hoge":true}
```

「is〇〇」の「is」がなくなってしまうという問題が発生しました。もし使われてる方は注意されることをおすすめします。（[その原因についての記事がありましたので貼っておきます](https://mikan.github.io/2018/08/24/mysterious-behavior-caused-by-the-combination-of-jackson-and-kotlin/)）

### Penicillin(TwitterAPIClientライブラリ)
twitterへのシェア機能のためのTwitterAPIClientライブラリには**[Penicillin](https://https://github.com/NephyProject/Penicillin)**を使わせていただきました、とても使いやすいライブラリなのでKotlinでTwitterAPIを叩きたいときにはオススメです!
注意点としては、**[Json.kt](https://github.com/NephyProject/Json.kt)**に依存していて、更にその**Json.kt**が**kotlinx.serialization**に依存しているので、使われる場合にはdependencyに**Penicillin**以外に、**Json.kt**、**kotlinx.serialization**の２つを追加してください（Ktorで使う場合はすでにkotlinx.serializationが入ってるので、Json.ktのみで大丈夫なはずです）

### Exposed(ORM)
ORMにはExposedを使ってます。Kotlinの型パワーをフルに使って、安全にSQLを組むことができるすごいやつです。KotlinでORMを使うならこれは良い選択肢になると思います。~~ただC#のDapperのように生SQL書かせてくれてもええのよ~~
コネクションプールにはHikariCPを使いました。

### KtorのSessionTransportTransformerMessageAuthentication
公式ドキュメントや署名付きcookieで調べてもよくわからなかったので、誰か詳細を教えてほしいです。。。。。。

# サービスを作って得たもの: priceless
今回それなりにサイトを作ってみて、自分の知識が大きく不足しているなとなかなかに痛感する場面がいくつも有りました。HTTP周りの知識、VueやSPAに関する知識、セキュリティ、特にOAuth認証に関してはOAuthとOpenIDConnectで「認可」と「認証」が別れていたり、OAuthを使うとでっかいセキュリティホールが空くとか情報の波に呑まれながらじっくりコトコト調べていきなんとか作ることができました。

他にも、情報が少ない場合には、SampleやGithub上のソースコードから実装の仕方を確認するのも、なかなかいい方法だなと思いました。もっとソースコードを見ていって実装力を上げていきたいなと思ってます。

そして一番は、アウトプットの重要性について。自分の知らないことがより鮮明になるのと、知識だと思ってたことが、実際作ってみると全然足りなくて、もっと掘り下げないといけなかったりと、作ってみて初めて分かることのほうが圧倒的に多かったです。

>「情報は知識ではない。知識とは唯一経験から得られるものである」　- アインシュタイン -

という名言がありますが、それをしっかり体験できたような気がします。

# 今後の予定
- 検索機能の追加
- **就職する**
- もっとデザインを良くしたい()
- reCAPCHAv3の設置
- いいね機能?
- **就職する(最重要)**
- もしかしたら別の作るかも

~~だれか仕事ください~~
【WPF】ListBoxのアイテムに、バインドしたコレクションのインデックスを出す

# やりたいこと
リストボックスのアイテムに、そのアイテム自身のインデックス(自分がコレクションの何番目か)を出したい。

# 結論
ItemsControl.AlternationIndex を使う。
下記のようにする。

``` MainWindow.xaml
<ListBox
    ItemsSource="{Binding ListBoxData4}"
    AlternationCount="10">

    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <StackPanel Margin="5">
                    <!-- やり方１ -->
                    <ContentControl >
                        <Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}"/>
                    </ContentControl>

                    <!-- やり方２ -->
                    <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=(ItemsControl.AlternationIndex), StringFormat={}{0}}"/>

                    <!-- アイテムそのままを出す -->
                    <TextBlock Text="{Binding}" HorizontalAlignment="Center"/>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

```
こんな感じになる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/352601/badbacc6-d60c-8706-0ce8-8adb559de962.png)


# 注意点

- AlternationIndexは、ListBoxに追加されたアイテムを、AlternationCountに設定された数までカウントして、その数を超えるとまた0に戻る。多数のアイテムを追加する場合は、AlternationCountを十分大きい値にする必要がある。


# 参考
WPF・XAML： ItemsControl の各項目表示にインデックス値を使う 
https://www.ruche-home.net/boyaki/2015-02-25/WPFXAMLI

How to use AlternationIndex in ItemsControls?
https://stackoverflow.com/questions/3567778/how-to-use-alternationindex-in-itemscontrols

WPF の ListBox で N 番目の要素にスタイルをあてる
http://var.blog.jp/archives/67337347.html

# コード
https://github.com/tera1707/WPF-/tree/master/019_ListBoxItem_WithIndex
1分間マネージャーを読んで学んだこと

#1分間マネージャーを読んで理解したこと
リーダー職になるにあたり[この本](https://www.amazon.co.jp/%E6%96%B01%E5%88%86%E9%96%93%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A3%E3%83%BC%E2%80%95%E2%80%95%E9%83%A8%E4%B8%8B%E3%82%92%E6%88%90%E9%95%B7%E3%81%95%E3%81%9B%E3%82%8B%EF%BC%93%E3%81%A4%E3%81%AE%E7%A7%98%E8%A8%A3-%E3%82%B1%E3%83%B3%E3%83%BB%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%83%A3%E3%83%BC%E3%83%89/dp/4478025258)を読んでみた。
そこから学んだことについて記述してみる。

##目標を部下と一緒に立てる
まずは目標を「一緒に」たてることにある。
メンバーだけに考えてもらうのも良いが、一緒に考えることでお互いの認識にずれなく
目標設定ができる。

##立てた目標について1ページに評価基準をまとめる
目標を立ててもらったら、それについて何をしたら達成になるのか
達成基準について考えてもらう。
行動指針になるので、より具体的なものがよい。
また、期限も明確に記述する。
この際にあまりにも遠い目標(半年後以上)は立てないようにする。
直近1か月、長くても2か月の目標に設定する。
小さな目標を達成できることで、達成感を味わいつつ1年間を過ごしてもらいたい。

##重要な目標については日次で確認する(1分間)
確認は「毎日」することが大事。時間は1分くらいでよい
なぜ毎日なのか、これは部下との人間関係において「承認」すること＝「日常」づくりが大切だからである。
日々の実績を見てくれている、という実感をメンバーにもってもらうことで
叱る、ほめるの効果が段違いに変わってくる。

##1分間称賛
以下を実践する。
・できるだけ早く称賛する
・メンバーの行動で、自分がどのように感じたのか(感情)、役立ったのかを伝える
・どこが正しかったのかを明確に伝える

後から振り返っても効果は薄い
⇒今回のOJTで思い知らされた。。

メンバー自身どこが評価されたのか気づいていないことが多いので
できていた部分をきちんと伝えることで、正しいやり方を認識できる。

感情を合わせて伝えることで、正しいことをすれば上司が喜んで評価してくれると認識し、
自分からケツを叩かなくても、自分から正しい行動をしようと心掛けて動いてくれる。


少し間を置いた後に、
・同じことを続けるように激励する
・部下を信頼していることを伝える。

##1分間修正
以下で修正を行う
・できるだけ早く修正する
・何がいけなかったのか原因について一緒に考える。
・ミスと、それが与える影響について自分が「どう」感じているのかも伝える(感情)
・信頼しているので今後も期待していることを伝える。

これもミスが発覚してからすぐに行う。時間がたてばたつほど効果が薄れてしまう

#大事な点
・1分間称賛でも修正でも、必ず期待を込める発言をすることが重要
　なぜかというと、人は信頼している人の期待に応えたいと思うから

・1分間マネージャーは、1分間という時間だが即効性があるので、
　日々メンバーにフィードバックをしてあげるようなものである。
　なぜそれが効果的なのかというと、
　人間にとっての最大の動機付けは、結果に対するフィードバックだからである。
　フィードバックがあるからこそ人は頑張れる！

#格言
・私にとってもっとも優れた1分間は、部下のために使う1分間だ