OmniAICreator/Qiita-1.07M huggingface dataset:
gitlab on docker Core1 メモリ1Gb お試し

# 概要
最近、とあるVPSをレンタルしました。
ソースコードの管理の雄gitlabをどの程度快適?に利用できるかを試してみました。
(あくまで参考程度に閲覧ください。)

## VPSのスペック

| 概要 | スペック |
|--- | --- |
|CPU | 仮想Core1 |
|メモリ | 1GB + Swap3GB |
|ストレージ | SSD 20GB |
|ネットワーク | 100MB/s |


まぁ、お値段相応に手ごろな感じです。
(Swap7GBにしたらもう少し早いかもしれませんが、SSDが枯渇するため、3GBにしています。) 

## gitlabの必要スペック
そして、gitlabの必要スペック。(最小のもののみ抜粋)
gitlabのサイトは[こちら](https://docs.gitlab.com/ee/install/requirements.html)。
**CPU**
1 core supports up to 100 users but the application can be a bit slower due to having all workers and background jobs running on the same core
概訳：1コアの場合、100ユーザまではサポートする。ただし、すべてのバックグラウンド処理を1つのコアに任せようとすると少し遅くなるよ。

**Memory**
4GB RAM + 4GB swap supports up to 100 users but it will be very slow
概訳：4GRAMと4GBのスワップで100ユーザまでサポートする。ただし、この構成だとかなり遅くなるよ。

**要するに物凄く遅くなるが大丈夫か？**
### そんなスペックで大丈夫か？
とgitlab様は仰せな訳です。
この点については少し忘れて次のステップに進みましょう。
## Let's Install
まず、dockerのインストール。
`apt install docker.io`  

続いてgitlabのimageをpull。
`docker pull gitlab/gitlab-ce`
そして、gitlabのコンテナを作成します。

```
sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest
```

出来上がりです・・・。
もっさりしています。

## 計測
興味本位で時間を計ってみました。
(ストップウォッチで計ったので概算です。)

### 測定基準
1：コンテナ起動からWhoops!画面表示まで
2：Whoops!画面からログイン画面表示まで
3：基本的な画面遷移(雰囲気)


| 番号 |計測対象 | 時間 |
| --- | --- | --- |
| 1 | Whoops画面 | 20秒 |
| 2 | Whoops⇒ログイン画面 | 160秒 |
| 3 | 画面遷移 | 2秒 |

**補足：Ooops!画面とは?**
スペックが低い時や何かしらの問題が発生している場合に出力される画面。  
下記のような画面が表示されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67358/95b15373-bdde-62d3-97cf-6dd5f65012d6.png)
今更ながらWPFに置き換えてみる（2）

#WPFでIFをテスト作成してみる
WPFをターゲットにしてプロジェクトを作成し、とりあえず側だけ作ってみる。
こんな感じになる予定。ボケてない。
![コメント 2020-02-22 120606.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590512/48bd4e06-43ca-ee7e-55f5-eab92e73bff1.png)
---
#疑問点
ここまででよくわからない点
FORMSではコントロールとしてデザイナ上で配置できてた以下のものたちはどうなるの？
・タイマー
・CMSメニュー
・NotifyIcon
・PictureBox（これはImageコントロールっぽい）
・リストビューの背景設定

それと、SETTINGSのエリアは、VBでは動的に表示非表示の切り替えと、画面サイズの変更を自前で行っていたが、なんかEXPANDER？っていうコントロールで置き換えたほうがスマートな感じがする。

![画面変遷.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590512/ffa90c6d-453a-7682-0a1a-fc59aad439cc.png)
VSCode で Asciidoc を使ってテキストデータでダイアグラムを組む

# Asciidocとは
[Asciidoc](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/) は軽量マークアップ言語のひとつです。Markdown のように人が読める形で構文を記述して組版ができます。Markdown を使用している人であれば、少ない学習コストで表現の高い組版ができます。技術文書をかくのに非常に便利です。

# Asciidoc の特徴
* 目次を自動生成できる
* 外部のファイルをインクルードできる
* CSVを取り込んで表にできる
* ソースコードをインポートできる

# Asciidoc を使用するには
Asciidoc をネットで調べると、一番ヒットするのが Ruby で Asciidoctor をインストールして、エディタと連携する方法です。本来であれば、Tex のように文書を出力するためにコンパイルが必要ですが、エディタと連携することでリアルタイムでプレビューできるようになります。

今回紹介する方法では、Ruby をインストールしません。組版をするためだけに Ruby をインストールするのも大変ですし、他のソフトウェアとの兼ね合いやメンテナンスの手間も発生します。今回使用する方法は、VSCode のプラグインを一つ導入するだけです。詳しい仕組みまでわかりませんが、バックボーンで動いているのは、Asciidoc の JS 版のようです。

単純な方法なので、複数台のPCでドキュメントを共有した場合でも、環境による差異が出にくくなります。

# どうやってテキストエディタでダイアグラムを組むか
テキストでダイアグラムを組む場合、[PlantUML](https://plantuml.com/ja/) や [Graphize](https://www.graphviz.org/) といったツールを使用します。このツールを使用する際も、ソフトウェアのインストールやダイアグラムの出力にコンパイルが必要になります。

VScodeと連携してリアルタイムにプレビューをすることもできますが、Asciidoc と連携するためにはいろいろと設定も必要です。

今回紹介する方法では、[kroki](https://kroki.io/) を使用します。日本語での情報があまりないので詳しくは分かりませんが、Rest でダイアグラムの画像を返す API のようです。この API を利用して、PlantUML と Graphize が利用できるようになります。こちらの JS 版を使用してダイアグラムを出力しているようです。(詳しくは分からないので、知ってる人がいたらむしろ教えて欲しいです。)


# やり方
VSCodeでAsciidocのプラグインをインストールします。
![Asciidoc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39277/2efdf3e8-df7e-9799-958e-a23dac8efc2f.png)
他にもいくつか Asciidoc のプラグインがありますが、これをインストールします。インストールしたら、Extention Settings からプラグインの設定画面を開いて、Use_Kroki にチェックを入れます。これだけです。
![Settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39277/b1c7071e-cc3d-abf5-cff7-82b7560c7199.png)

# 使い方
VSCodeで新規ファイルを作成します。右下のところにどのファイル形式が表示されている箇所をクリックする。どのファイル形式で開くか選択できるので、Asciidoc を選択する。

![Open.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39277/313455d9-3848-c586-b612-ac992aa70a95.png)

以下のようにテキストを入力してプレビューを押す。

```
[plantuml,alice-bob,svg,role=sequence]
....
alice -> bob
....

[graphviz]
....
digraph foo {
  node [style=rounded]
  node1 [shape=box]
  node2 [fillcolor=yellow, style="rounded,filled", shape=diamond]
  node3 [shape=record, label="{ a | b | c }"]

  node1 -> node2 -> node3
}
....
```

プレビューを表示させると、ダイアグラムが表示される。

![Prev.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39277/bc3a653c-1898-9319-8173-a3e151e74b5e.png)

プラグインの解説によれば、PDFのエクスポートも可能です。

![save_pdf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39277/d92ed1b9-61b6-3865-f047-55253c404b20.png)

PDFのエクスポートした場合、作成したダイアログの大きさはデフォルトで出力される。画像のサイズについては、作図するコンポーネント側で画像サイズを調整することになる。簡単にやり方を記載すると以下のようになるが、詳しい内容は各コンポーネントについて調べて頂きたい。

````
.uniuni
[plantuml,./test.svg,svg]
----
scale 3  # scaleで倍率を調整できる。 
... (以下、テキスト)
----

[graphviz]
----

digraph foo {
  size="10!" # 横幅を指定。サイズを直接指定する際は、数字に! をつける。
  ....（以下、テキスト） 
}
----
````

PDFに出力した形でベストな記述と、プレビューで見たときに整っている記述が違ってくるので、そこは割り切って使うことになる。厳密さをもとめるのであれば、一旦画像を出力して表示する形式にすることをお勧めする。
puppeteerでThis relative module was not found: ~ ws ~ WebSocketTransport.js

# 環境

・windows10
・vue-cli3
・electron-builder

# 現象
electronでpuppeteerを使おうとした。
npm run electron:serveしたら、

```
This dependency was not found:

* ws in ./node_modules/puppeteer/lib/WebSocketTransport.js

To install it, you can run: npm install --save ws
```


# 対応
```
To install it, you can run: npm install --save ws
```
とあるので言われたとおりにコマンドを打つ。
で、再度build。
しかし、同じエラーが…。

# 解決策

**node_modules/puppeteer/lib/WebSocketTransport.js**をいじる。

```js
const WebSocket = require('ws');
```
を

```js
const WebSocket = require('../node_modules/ws');
```
に修正する。(wsをnpm installした後に)

# 備考
issueはこちら
https://github.com/puppeteer/puppeteer/issues/3487

自分の環境ではこの方法で助かったが、リンク先は割と紛糾しているみたい？
この分野（electron+αの開発）は日本語の参考記事も少ないので、じぶんみたいなぺーぺーだとわりと簡単なところで結構つまづく。
Unity Sceneの遷移について（備忘録）

## UnityのSceneの遷移について
UnityのSceneの遷移の方法を復習したから、それを忘れないようにするために備忘録を付けておく。
まず練習用にSceneを二つ用意して、それらのシーンに空のGameObjectを追加する。
そして以下のスクリプトをそのGameObjectにアタッチすることによってSceneの遷移を行うことが出来る。

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;//Sceneを変更するために使う

public class red : MonoBehaviour {

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(0))//マウスのボタンが押されたら
        {
            SceneManager.LoadScene("green");//greenというSceneに移動する
        }
	}
}

```
###　注意点
```
using UnityEngine.SceneManagement;//Sceneを変更するために使う
```
ここを忘れないようにすること
代表的なコマンド

#はじめに
去年の11月から、プログラミングスクールで勉強をはじめました。
その時、このコマンドなんやったかなみたいなことがあったので、代表的なものをまとめました。
初学者の助けになればと思います。　

```sh:ターミナル
touch　ファイル名
#ファイルの作成

cat　単体のファイル名もしくは、ファイルA ファイルBなど複数指定も可能
#ファイルの中身を確認

mkdir　ディレクトリ名
#ディレクトリを作成（make directoryの略）
 
cd ディレクトリ名
#指定したディレクトリに移動

pwd
#カレントディレクトリを確認する

ls
#ディレクトリの中身を確認する

cd ..
#一つ親のディレクトリに移動

mv ファイル名 ディレクトリ名
#指定したディレクトリにファイルを移動させる

mv ディレクトリ名 移動先のディレクトリ名
#ディレクトリ以下のファイルやディレクトリも一緒に移動させる

mv ファイル名もしくはディレクトリ名 　新しいファイル名もしくは新しいディレクトリ名
#ファイル名やディレクトリ名を変更

cp コピーするファイル名 新しいファイル名
#ファイルをコピーする

cp -r コピーするディレクトリ名 新しいディレクトリ名
#ディレクトリをコピーする

rm ファイル名
#ファイルの削除（removeの略）

rm -r ディレクトリ名
#ディレクトリの削除（removeの略）
```
#最後に
今、転職活動中で目に見える形でのアウトプットが必要だなと考えさせられています。
今後も、こういう形で学んだりしたものを書いていきますので、よろしくお願いします。
また、ご教授お願いします。
pythonで二分探索を実装してみた

pythonとアルゴリズムの勉強かねがね、二分探索を実装してみました。

1.ランダムなリストを作成してソートを行う
例:[1,2,4,5,6,9]

2.探索する値を決める
(コードでは、最下部のforループで取りうる範囲の値全てを探索しに行ってます)
例:2

3.リストからド真ん中付近の値を取り出す
リストの長さが偶数の場合→ド真ん中の右側
リストの長さが奇数の場合→ド真ん中
例:[1,2,4,5,6,9]→5

4.リストを3.で取り出した値を境にして二つに分割する
例:[1,2,4,5,6,9]→[1,2,4],[5,6,9]

5.3.で取り出した値を探索する値を比較
一致したら探索終了、不一致なら次へ
例:2 != 5

6.4.で作った2つのリストに対して、左の最大値、右の最小値と探索する値の比較を行う
探索値が左の最大値より小さければ、探索範囲は左に限定できる
探索値が右の最小値より大きければ、探索範囲は右に限定できる
探索値が左の最大値より大きく右の最小値より小さい場合、探索値は存在しないので探索終了
例:左[1,2,4],右[5,6,9]、探索値2
2<4なので探索範囲は左に限定

7.新しく探索範囲とするリストに対して、3.から6.処理を繰り返しを行う
例:[1,2,4]→2
一致したので処理終了

…とこんな感じの探索を二分探索法と呼ぶらしいです。

途中で左側のリストを除外した際、及び正解が導出された時点で左側のリストが存在した場合に、その要素数を加算して「何番目に探索値が存在したか」をチェックできるようにしました。

n個の数列に対して総当たりで探索を行うとnステップの処理が必要になります。
これに対し、二分探索法では1ステップ毎に半分の値を探索対象から除外できるので、n個のデータに対しての処理回数は(log n)回になります。

```binary_search.py

import copy
import random


# 準備する値の数を入力
numbers = 100


def binary_search(num_list, target):
    # 「値が何番目にあるか」を確認するための変数
    ans_counter = 0
    while True:
        # 配列の中心にある値を取り出す
        middle = num_list[len(num_list) // 2]
        # 配列の左側
        left = num_list[:len(num_list) // 2]
        # 配列の右側
        right = num_list[len(num_list) // 2:]
        # 中心の値が探索値と一致したら探索終了(探索値発見)
        if middle == target:
            ans_counter += len(left) + 1
            print("{}は{}番目にありました。".format(target, ans_counter))
            break
        # 値が最後の1個になっても一致しなかったら探索終了(探索値不存在1)
        # 左の最大値 < 探索値 < 右の最小値となった場合探索終了(探索値不存在2)
        elif len(num_list) == 1 and num_list[0] != target\
                or left[-1] < target < right[0]:
            print("{}はありませんでした。".format(target))
            break
        # 左の最大値より探索値が小さい場合、探索範囲を左側に絞る
        elif target <= left[-1]:
            num_list = left
        # 右の最小値より探索値が大きい場合、探索範囲を右側に絞る
        elif right[0] < target:
            ans_counter += len(left)
            num_list = right


# num_list = list(range(1,numbers+1))
# 重複のない(num_list)個分のデータを作ってソートする
num_list = []
while len(num_list) < numbers:
    n = random.randint(1, numbers * 2)
    if n not in num_list:
        num_list.append(n)
num_list.sort()

print(num_list)
# 乱数の生成される範囲を探索範囲とする
for i in range(1, numbers * 2 + 1):
    binary_search(num_list, i)

```
.shをMac用GUIアプリケーションに変換

参考：http://easyramble.com/mac-automator-shell-script.html

# Macに標準搭載されているAutomation.appを利用する

```shell-session
/Applications/Automator.app/
```

# 使い方

* 「アプリケーション」を選択
* 「シェルスクリプトを実行」（もしくは "Run Shell Script"）をドラッグ
    * 検索バーにて「シェル」（もしくは"Shell"）で検索
* シェルスクリプトを作成
    * `/bin/sh` で実行させる
* ファイル → 保存 → フォーマット: アプリケーション(`.app`)で保存
* 保存した `.app` をダブルクリックしてシェルスクリプト実行

# アイコンを変えたいとき

* Fireworksか何かでアイコンを作る
* ファイル名は `AutomatorApplet.icon` で保存
* デフォルトのアイコンを置き換える

```shell-session
$ mv [pwd]/AutomatorApplet.icon \
/[dir]/[foobar].app/Contents/Resources/AutomatorApplet.icon
```
[WPF] データに応じてリストの表示形式を切り替える

## はじめに

ListBox に代表される ItemsControl コントロールを使って、色々な形式のデータを表示する方法をまとめました。



## 対応方法

### 表示する元データ

今回は "データ形式" と "値" を個別に管理するクラスを用意しました。

``` C#
class MyData
{
    public enum ItemType { Bool, Int, String };
    public ItemType Type { get; }

    public bool BoolValue { get; set; }
    public int IntValue { get; set; }
    public string StringValue { get; set; }
    
    /* コンストラクタ省略 */
}
```


### 表示する元リスト

enum型の ItemType に応じて表示形式を切り替えます。

```C#
public static List<MyData> Items => new List<MyData>()
{
    new MyData(false),
    new MyData(true),
    new MyData(123),
    new MyData("Hello"),
    new MyData(null),
    new MyData(4321),
    new MyData("こんにちわ"),
    new MyData(false),
    new MyData(0),
};
```



### 表示１：データ種別に応じて表示形式を切り替える

ItemsControl.ItemContainerStyleSelector を使い、データ種別に応じて Style を切り替えます。


![WpfContainerStyleSelector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249816/9a294c17-1c2b-1731-3aca-f4ed79849491.png)


### 表示２：データ種別に応じてグルーピングする

ItemsControl.GroupStyle.HeaderTemplateSelector を使い、データ種別に応じて DataTemplate を切り替えます。


![WpfDataTemplateSelector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249816/c1b3e1d5-ef29-b786-f2d5-f3501190645c.png)

### 表示３：グルーピングしてデータ種別に応じて表示形式を切り替える

ItemsControl.GroupStyle.ContainerStyleSelector を使い、データ種別に応じて Style を切り替えます。


![WpfGroupContainerStyleSelector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249816/6747f2d8-e1be-9274-e1c2-1bb026836daf.png)


## まとめ

説明は冒頭で力尽きてしまいましたが、ソースコードは以下に置いてあります。

[WpfListTemplateSwitch](https://github.com/hsytkm/WpfListTemplateSwitch)



## 参考にさせて頂いたページ

[ItemsControl 攻略 ～ 外観のカスタマイズ](http://grabacr.net/archives/1240)

[How to make WPF Listview works same as Photoshop layer](https://stackoverflow.com/questions/2995434/how-to-make-wpf-listview-works-same-as-photoshop-layer)
[WIP]量子計算OSSまとめ

# はじめに

量子計算に関するOSSをまとめたもの。

# blueqat

- 国産。日本語文献豊富。
- シミュレータ機能のみ。

![blueqat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/b63f3cd2-d19b-189d-5fc9-e544571b4d12.png)
図出典：https://pypistats.org/packages/blueqat

# cirq

- Google製。ただし非公式。
- 量子計算シミュレート機能あり。

![cirq.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/901c9745-0f09-26f8-b2d1-0027ab488e92.png)
図出典：https://pypistats.org/packages/cirq

# qiskit

- IBM製。
- クラウド上の量子コンピュータに直結できる。
- 量子計算シミュレート機能あり。

![qiskit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/e1c6089b-5abf-07ee-86fb-2f66c07342cc.png)
図出典：https://pypistats.org/packages/qiskit

# qutip

![qutip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/f9ce61e6-bb42-b993-390d-1aece33e3c36.png)
図出典：https://pypistats.org/packages/qutip

# sympy

- 量子計算機のシミュレータではなく、汎用的な演算ライブラリ。量子計算機の行列計算に対応している。
- numpyみたいなノリで使える。数式きれい。

![sympy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/936904de-edb0-7b1f-8e8e-7cd0dcdbbb3b.png)
図出典：https://pypistats.org/packages/sympy

# dwave-ocean-sdk

- DWave製。

![dwave-ocean-sdk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/85b69379-15c1-f7f4-bfb5-b255db41b656.png)
図出典：https://pypistats.org/packages/dwave-ocean-sdk

# qsharp

- Microsoft製。Q#。
- .NETとPythonの両方で公開している。互換性乙。
- 量子計算シミュレート機能あり。

![qsharp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/ae0f58c7-5acd-4333-f439-173b7983bfd9.png)
図出典：https://pypistats.org/packages/qsharp

# pyQuil

- rigetti製。
- 量子計算シミュレート機能あり。

![pyQuil.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/c96b043e-cce8-68d5-5125-75781d1baaf8.png)
pyQuil
図出典：https://pypistats.org/packages/pyQuil

# Qulacs

- 国産。京都大学 藤井研究室で開発。QunaSysが保守・新規機能開発。


![Qulacs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114392/5e7d1d9a-98f6-49e0-23b1-ff4fa4768d36.png)
図出典：https://pypistats.org/packages/qulacs
ノートPCをディスプレイ代わりにしてマルチディスプレイを試す on Windows10

# 子機(ディスプレイの代わりのノートPC)側

スタート＋「S」、「接続」とタイプして以下の画面を出す

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/15b0f28a-f031-0bf5-d235-735272d544d0.png)

# 親機側

ディスプレの設定で「ワイヤレスディスプレイに接続する」を押し、接続先を選択する。


![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f7e01b59-fc99-6d2a-4fce-742054147b10.png)

# 接続

子機側で縮小して表示される。

![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/08269e6b-c4bb-6ab9-d753-c3c27538abeb.png)

子機側で最大化。

![IMG_20200222_102219.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/505ec2b1-93e8-16dd-f4c1-193164b43fe3.jpeg)

できました。

# わかったこと

- Miracastと呼ばれる技術らしい
- 接続には無線LANを使用する。
- 今回はLAN接続を有線で行っていた。無線LANは接続設定を行っていなかったが有効にしているだけで無線LAN同士で繋がっていたみたい。
- 画面構成が数ドットズレたりとかしてちょっと変？
- 下記資料では有線LANでも使えそうに書いているが、実際は無線LANを有効にしないと繋がらなった。

> Windows 10 Insider Preview ビルド14316に突如登場したUWP（ユニバーサルWindowsプラットフォーム）アプリケーション「接続」を起動していると、無線LANがなくてもMiracast受信デバイスになる。

「“ワイヤレスディスプレイ”がWindows 10で実現、タブレットもディスプレイに？」
https://forest.watch.impress.co.jp/docs/serial/win10useful/755283.html



# おまけ Ubuntu Linux から接続できるかな？

Ubuntu には MiracleCastというものがあります。

https://github.com/albfan/miraclecast

試してみましたがちょっとうまくいかないぽくて断念。

インストール

```

$ sudo add-apt-repository ppa:thopiekar/miraclecast
$ sudo apt update
$ sudo apt install miraclecast

```


 systemdのバージョンを確認。


```

$ systemctl --version
systemd 237
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid

```

237なので kdbus enabled

```

$ systemctl stop NetworkManager.service
$ systemctl stop wpa_supplicant.service 
$ sudo miracle-wifid &
[1] 8997
$ sudo miracle-sinkctl
[ADD] Link: 4
[miraclectl] # run 4
ERROR: cannot change p2p-scanning state on link 4 to 1: Invalid argument (ctl_link_set_p2p_scanning() in ctl-wifi.c:740)
now running on link 4
[miraclectl] # exit
[miraclectl] # 
no longer running on link 4

[1]+  停止                  sudo miracle-wifid
$ sudo miracle-wifictl
[ADD] Link: 4
[miraclectl] # p2p-scan
ERROR: no link selected (cmd_p2p_scan() in wifictl.c:288)
[miraclectl] # 

```

うーむ

↓

VNCを使って実現しました。
「VNC をセカンドディスプレイとして使う on Ubuntu 18.04」
https://qiita.com/nanbuwks/items/d12a98c8d41630c31a55
画像を希望ページへリンクさせる

<h1>画像を希望ページへリンクさせてクリックしたら遷移させる</h1>
上記の機能を実装する際、手こずったので備忘録として残しておきます。

aタグでリンクさせようと思い、書き方を調べて相対パスで記述する事にした。
[aタグ パス指定](http://lab.agr.hokudai.ac.jp/useful/utile/Path_URL.htm)
下記のコードで実行したが、Routing Errorが起きた。

```tops/index.html.erb
<a href="groups/index.html.erb"><img src="assets/1.png" class="img-fluid" alt="Responsive image"></a>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582508/79a14c4b-8081-fb38-25a6-c6ff1f942940.png)

下記の方法も試したが、同様にRouting Eroorが起きた。
>| ◆ リンク先などの記述例 |
同じフォルダ内にリンクするときは、ファイル名のみ(または ./ に続けてファイル名)を記述します。 
下位階層にリンクするときは、フォルダ名に続けて / を入れ、ファイル名を記述します。 
上位階層にリンクするときは、../ に続けてファイル名を記述します。2つ上の階層を指定するときは、../../ に続けてファイル名を記述します。 
並列した階層のフォルダにリンクするときは、../ に続けてフォルダ名と / を入れ、ファイル名を記述します。 

<h2>解決法

link_toを使用して、記述することにした。
まずは、ルーティングの設定

```routes.rb
    Rails.application.routes.draw do
      devise_for :users
      root 'tops#index'
      resources :groups, only: :index
    end
```
次に、コントローラー

```groups_controller.rb
  class GroupsController < ApplicationController
    def index
    end
  end
```

最後にビュー

```tops/index.html.erb
    <%= link_to (groups_path) do%>
      <img src="assets/1.png" class="img-fluid" alt="Responsive image">
    <% end%>
```

上記手順で画像リンクに成功した。



<h2>なぜaタグでできなかったのか？

・railsでリンクさせる場合は相対パスが使用できない？
・rails,rubyのバージョンが相対パスの仕様に対応してない？
(rails 5.0.7.2 , ruby 2.5.1)

確証が持てないのでわかる方はぜひコメントお願いします！！！！！
[WIP]量子コンピュータのクラウドサービスまとめ

# はじめに

量子コンピュータのクラウドサービスをまとめたもの。

# Quantum Computing Playground

- 運営会社：Google
- 価格：無料
- ライセンス規約：Apache 2.0
- 性能：TBD
- 機能：TBD

http://www.quantumplayground.net/#/home

なんか見た目がちゃちい。Go？C言語？っぽいAPI。コンパイル面倒。

# IBM Q

- 運営会社：IBM
- 価格：無料
- ライセンス規約：特筆すべき制約はなし
- 性能：シミュレータと数十ビットの実機有り
- 機能：ノートブック、可視化

https://quantum-computing.ibm.com/

量子コンピュータのクラウドサービスの老舗。
まぁ情報は豊富よね。

# Amazon Braket

- 運営会社：Amazon
- 価格：現在は無料。`Amazon Braket では、使用したシミュレータリソースに対する料金のみが発生します。一般料金は、サービスの一般提供開始時に有効になります。`とのこと。
- ライセンス規約：AWS相当
- 性能：TBD
- 機能：TBD

https://aws.amazon.com/jp/braket/

日本語さぽーとがね、嬉しいよね。

# Liquid

- 運営会社：Microsoft
- 価格：まだウェブサービスは未公開？
- ライセンス規約：TBD
- 性能：TBD
- 機能：TBD

http://stationq.github.io/Liquid/

まだオンプレミス版だけ？のよう。pipだけじゃなくてインストールやセットアップが必要。めんどくさい。

# LEAP

- 運営会社：D-Wave
- 価格：無料
- ライセンス規約：TBD
- 性能：TBD
- 機能：TBD

https://www.dwavesys.com/take-leap

2019年からサービス開始。欧州初の量子コンピュータサービスがウリ。
Swiftとプログラミングコンテスト

## 概要
プログラミングコンテストとSwift5にまつわる状況メモ（2020年2月時点）
AtCoderのバージョンアップテストで対応された模様（2020年3月現在）

## AtCoder（現行）
**プロコンと言えばAtCoderな訳ですが**、現在採用されているバージョンは `2.2` です。リリース日は2016年3月21日であり、ほぼ4年前です。
言語別AC数で言うと、Pineさんという方が586ACしていますが、2位以下のAC数は100未満です。
　→[Language Owner](https://kenkoooo.com/atcoder/?kind=lang#/lang)

最新版は `5.1.4` で、リリース日は2020年1月31日です。

## AtCoder（バージョンアップテスト - 2020年2月22日）
AtCoderは現在、言語のバージョンアップテスト中です（下記のリンクから飛べます）。
[Language Test 202001](https://atcoder.jp/contests/language-test-202001)
こちらのバージョンは `5.1.3` です。リリース日は2019年12月13日です。
ただ、[提出結果](https://atcoder.jp/contests/language-test-202001/submissions?f.Language=4055&f.Status=&f.Task=&f.User=&page=1)を見れば分かりますが、現在のところすべて `CE(CompileError)` になっています。Pineさんの提出もすべてCEなので、~~**現在ACをするのは不可能と見るのが妥当**です。~~ →その後、AC出来るようになりました（下記参照）。

## AtCoder（バージョンアップテスト - 2020年3月1日）
2020年3月1日に再度確認したところ、Swift5.1.3で `AC` しているケースが[出てきています](https://atcoder.jp/contests/language-test-202001/submissions?f.Task=&f.Language=4055&f.Status=AC&f.User=)。私が2月22日に提出して `CE` になっていたものも `AC` になっているので、**リジャッジされたものと思われます。**

## Paiza
**プロコンと言えばPaizaな訳ですが**（？）、現在採用されているバージョンは `5.0.1` で、リリース日は2019年4月18日です。
　→[こちらで確認できます](https://paiza.jp/guide/language)

## はじめてのあっとこーだー
テスト問題 [はじめてのあっとこーだー](https://language-test-201603.contest.atcoder.jp/tasks/practice_1) を、Paiza(Swift 5.0.1)で通るように組んでみました。

```swift
let a = Int(readLine()!)!
let bc = readLine()!.split(separator: " ")
let b = Int(bc[0])!
let c = Int(bc[1])!
let d = a + b + c
let s = readLine()!
print (d.description + " " + s)
```

テストバージョンのサイトでは通らないので、通常の方（Swift2.2）にブチこんでみます。

```
コンパイルメッセージ
./Main.swift:2:20: error: value of type 'String' has no member 'split'
let bc = readLine()!.split(separator: " ")
~~~~~~~~~~^ ~~~~~
```

ダメでした。
Swift2で通す方法が知りたい訳ではないので、ここで終了です。
あーあ。 :cactus: 

## はじめてのあっとこーだー（関数を使う）
[はじめてのあっとこーだー](https://language-test-201603.contest.atcoder.jp/tasks/practice_1) の、関数を使う版。
引数名を記述しなくてはいけません。
逆に言えば、

### 関数の順番通り
```swift
func k1(x: Int, y: Int) -> Int {
    return x + y
}

let a = Int(readLine()!)!
let bc = readLine()!.split(separator: " ")
let b = Int(bc[0])!
let c = Int(bc[1])!
let d = k1(x: k1(x: a, y: b), y: c)
let s = readLine()!

print (d.description + " " + s)
```

### 関数の順番を変更
引数名を記述するので、順番を変えることができるのか……と思いきや。
`error: argument 'x' must precede argument 'y'`
（引数 'x'は引数 'y'の前になければなりません）

記述順でエラーが出ます。意味が分からない…… :sweat: 

### 引数名の省略には「_」（アンダースコア）
関数名の引数名は指定しても、呼び出し側からは省略したい、という場合には 「_」（アンダースコア）を 使うと良いです。

```swift
func k1(_ x: Int, _ y: Int) -> Int {
    return x + y
}

let a = Int(readLine()!)!
let bc = readLine()!.split(separator: " ")
let b = Int(bc[0])!
let c = Int(bc[1])!
let d = k1( k1(a, b), c)
let s = readLine()!

print (d.description + " " + s)
```

## いろいろ試している途中
https://paiza.io/projects/5Gq5ZJkqi2o60Pzz52sIqg
python で pip を使おうとしたら XML_SetHashSalt が見つからないって言われてはまった話

Linux の python で pip を使おうとしたら下記のエラーではまったのでメモ。

```
# python3 -m pip install numpy
(中略)
ImportError: /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so: undefined symbol: XML_SetHashSalt
```

なんてことはない、ライブラリのコンフリクトが原因だったので下記を実行してから再実行で解決。

```
# export LD_LIBRARY_PATH=
```
vueでariaをv-bindする時に気をつけること

なにもかんがえずにv-bindする

```haml
<div class="js-drawer" :aria-expanded="isOpen">
```
これだとfalseの場合、aria-expanded属性自体が消えてしまう。

## 解決
```html
<div class="js-drawer" :aria-expanded="isOpen ? 'true' : 'false'">
```
これだisOpenがfalseでもaria-expanded属性が保持される。
マネージャーに読んでほしいもの一覧

#マネージャーに読んでほしいもの一覧
随時更新。
当方マネージャ経験はないので、あくまで読んでほしいなという願望ベースになります。

## ネット記事
### メンタリティ
#### Google re:Work
https://rework.withgoogle.com/jp/subjects/managers/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87538/d39cbdf6-028b-e660-38dd-cf9034be30a4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87538/c7077b00-88a2-a39d-53b0-e872dd23a51c.png)

#### 心理的勾配
[心理的安全性ガイドライン（あるいは権威勾配に関する一考察）](https://qiita.com/hirokidaichi/items/5d8c4294083d85654a04)

広木大地さんのQiita記事

### 情報
#### 日経クロステック
[日経クロステック](https://xtech.nikkei.com/?n_cid=nbpnxt_goad2002rn&gclid=Cj0KCQiAnL7yBRD3ARIsAJp_oLYMhNqqfBUImrj65SUF3zeWB8W-OgqmHTDOB59Zijy5Vlrva4WB78QaAtwjEALw_wcB)
いわずと知れた日経。

#### IT Leaders
[IT Leaders](https://it.impressbm.co.jp/)
インプレス系。
全方面。

#### ＠IT
[＠IT](https://www.atmarkit.co.jp/index.html)
ソフトバンク系列。
全方面。

#### Publickkey
[Publickey](https://www.publickey1.jp/)
個人の方が専業でやっている。
技術動向に強い。

#### piyolog
[piyolog](https://piyolog.hatenadiary.jp/)
個人運営。
セキュリティインシデントのまとめが速報でかつ事実ベースで記載されている。

#### IT・システム判例メモ
[IT・システム判例メモ](https://itlaw.hatenablog.com/entry/20591231/1327156349)
個人運営。


#### JISAレポート
[一般社団法人　情報サービス産業協会](https://www.jisa.or.jp/)

### JUASレポート
[一般社団法人日本情報システム・ユーザー協会](https://juas.or.jp/)

### IPAレポート
[IPA独立行政法人 情報処理推進機構](https://www.ipa.go.jp/)

### JASA
[一般社団法人 組込みシステム技術協会](http://www.jasa.or.jp/TOP/)

### 知識
#### IPA 共通フレーム
[共通フレーム](https://www.ipa.go.jp/sec/publish/tn12-006.html)


## 書籍
### エンジニアリング組織論への招待

### 失敗しないITマネジャーが語る プロフェッショナルPMの神髄

### 人月の神話

### ソフトウェア見積り　人月の暗黙知を解き明かす
以下のようなことを思った人は読むべき。
* 見積もりなんてできない
* 見積もりなんて意味ない
python を使った firefox の画像キャプチャ

python と selenium を使って、ホームページの画像をキャプチャするプログラムを書いてみました。

```python
# -*- coding: utf-8 -*-
import sys

from selenium import webdriver
from selenium.webdriver import FirefoxOptions

'''
Firefox を起動して、画像キャプチャする
'''
if( len( sys.argv ) < 3 ):
	print "Usage: firefox.py [uri] [png]"
	sys.exit( 1 )

opts = FirefoxOptions()
opts.add_argument( "--headless" )
driver = webdriver.Firefox( firefox_options = opts )
driver.set_window_size( 1024,768 )

driver.get( sys.argv[1] )
driver.save_screenshot( sys.argv[2] )

driver.quit()


```
COTOHA で固有名詞の抽出

[COTOHA API Portal](https://api.ce-cotoha.com/contents/index.html) の使用例です。

参考ページ

>[APIリファレンス](https://api.ce-cotoha.com/contents/reference/apireference.html)
>固有表現抽出

次の文から固有名詞を抽出してみます。

```text
特急はくたかで富山に向かいます。それから、金沢に行って、兼六園に行きます。
```

フォルダー構造

```text
$ tree -a
.
├── .env
├── get_config.py
├── get_token.py
└── proper_noun.py
```

```py:proper_noun.py
#! /usr/bin/python
# -*- coding:utf-8 -*-
#
#	proper_noun.py
#
#						Feb/22/2020
# ----------------------------------------------------------------------
import sys
import json
import requests
# ----------------------------------------------------------------------
from get_config import get_config_proc
from get_token import get_token_proc
# ----------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
config = get_config_proc()
access_token = get_token_proc(config)
#
sentence = "特急はくたかで富山に向かいます。それから、金沢に行って、兼六園に行きます。"
#
headers={
	"Content-Type": "application/json",
	"Authorization": "Bearer " + access_token
	}
#
data = {
	"sentence": sentence,
	"type": "default"
	}

str_json = json.dumps(data)
url = config['DEVELOPER_API_BASE_URL'] + "v1/ne"
try:
	rr=requests.post(url,headers=headers,data=str_json)
	dict_aa = json.loads(rr.text)
	llx = len(dict_aa['result'])
	sys.stderr.write("llx(result) = %d\n" % llx)
#
	for unit in dict_aa['result']:
		print(unit['form'])
except Exception as ee:
	sys.stderr.write("*** error *** in requests.post ***\n")
	sys.stderr.write(str(ee) + "\n")
#
sys.stderr.write("*** 終了 ***\n")
# ----------------------------------------------------------------------
```

get_config.py  get_token.py はこちら
[COTOHA API で構文解析](https://qiita.com/ekzemplaro/items/283f608c8623a725827a)


実行結果

```text
$ ./proper_noun.py
*** 開始 ***
llx(result) = 3
富山
金沢
兼六園
*** 終了 ***
```
URLの引数をバリデーションに使いたい（Laravel）

## 結論

任意のRequestクラスに以下の関数を追加する。

```php
    /**
     * 更新、削除時に渡されるルート引数を Request Parametersに含める。
     * ただし、すでにキーが存在している場合は上書きしない。
     * @return array
     */
    public function validationData()
    {
        $params = $this->all();
        $route_params = $this->route()->parameters();

        return $params + $route_params;
    }

```

## なんで作ろうと思ったか？

APIを作っていて、更新処理を書いている時にふと思った。

```php
    public function update(ProjectUpdateRequest $request, $id)
    {
        $project = Project::find($id);

        // もしデータが取得できなかったら 失敗のレスポンス
        if (empty($project)) return response()->json(['result' => 'failed']);

        $project->fill($request->all());
        $project->update();
        return response()->json($project);
    }
```

せっかくバリデーション専用のクラスあるのに、ここでパラメータをチェックするの違和感ある。
どうにかしてRequestクラスでできないだろうか。

## Requestクラス内でルートパラメータ取得

紆余曲折あったが、パラメータを取得する関数を発見したのでそれを使用。

```php
$this->route()->parameters()
```

/project/{id} だったら ['id' => xxx]の形で取得できる。


## Rulesでバリデーションできるようにする

Requestクラスの rules()でチェックされるデータは validationData()で取得しているので、オーバーライドしてルートパラメーターを含めるようにする。
ただし、ルートパラメータと同じ値があったときに上書きするのは望ましくないので、array_mergeは使わずに配列をマージすることにした。

```php
        $params = $this->all();
        $route_params = $this->route()->parameters();

        return $params + $route_params;
```

## 結果

rules()で、ルートパラメータを使ってバリデーションを行えた。

とっても満足した。
効率や生産性、拡張性は見なかったことにする。
【Rails+Redis】セッション管理をredisに任せる

現在作成してるrailsポートフォリオで、せっかくだからセッション管理はredisに任せようと思い、色々いじったので共有したいと思います。

#環境
- macOS
- Docker
- RubyonRails
- Redis
- MySQL

#前提
- Redisはすでにインストール済み
- DockerにもRedisは追加済み

#セッション管理をRedisに任せる理由
RedisはRDBとは違って、

- KVS
- データをメモリに保つので動作が高速

という特徴があります。

この特徴からセッション管理に向いてるとして結構使われることが多いみたいです。

#さっそく実装してみる
ではさっそく実装しましょう。

##gemの追加
Gemfileに以下を追加してインストールしてください。

```Gemfile
# Use Redis adapter to run Action Cable in production
gem 'redis', '~> 4.0'
gem 'redis-rails'
```

##config/initializers/session_store.rbの設定
初期設定はコメントアウトしておきましょう。
最初からない人は問題ないです。

```config/initializers/session_store.rb
#Rails.application.config.session_store :cookie_store, key: 'XXXXXX'
```

##config/environments/development.rbの設定
config/environments/development.rbに以下を追加。

```config/environments/development.rb
config.session_store :redis_store, servers: 'redis://redis:6379/0', expire_in: 1.day
```

これで一日セッションが保たれる設定になってるはずです。

##確認
以下のコマンドでデータが入ってるか確認しましょう。

```
docker exec -it コンテナID redis-cli
127.0.0.1:6379> keys *
```

```
1) "2::63c3d325054ad936b6408b30ba8c4e1395cce110d77c3e5171c7e22840d75a9d"
2) "2::383c6dfd3c95d07631fc8e879911fef09760a789461d8b7d0736a32d7d8ee656"
```

keys * で出てきたkeyを使って中身を確認。

```
127.0.0.1:6379> get "2::63c3d325054ad936b6408b30ba8c4e1395cce110d77c3e5171c7e22840d75a9
d"
```
何か長い謎の文字列が出てきたら情報がしっかり入ってることになっていると思います。

試しにredisのデータを全部削除したら、アプリがログイン画面に戻りましたので、成功と見て問題ないでしょう。

#まとめ
以前Redisを利用した時はランキング機能の実装だったので、また違った角度でRedisを扱えたことは勉強になりました。

ぶっちゃけ、まだRedisの知識がちゃんと身に付いてるとは言い難いですが、これからも色々利用しながら学んでいきたいと思います。

ではでは。
Rails6にWebpackでMaterializeを導入

## Materialize導入
`app/javascript/stylesheets/application.scss`を追加
`javascript`配下にファイルがないのでまずファイルを作成する

```sh:コマンド実行
$ mkdir app/javascript/stylesheets
$ touch app/javascript/stylesheets/application.scss
```

作成したファイルに以下を追記

```ruby:app/javascript/stylesheets/application.scss
@import 'materialize-css/dist/css/materialize';
```


`app/javascript/packs/application.js`に以下を追加

```ruby:app/javascript/packs/application.js
import '../stylesheets/application'
import 'materialize-css/dist/js/materialize'
```

`app/views/layouts/application.html.erb`に以下を追加

```erb:app/views/layouts/application.html.erb
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
```

`materialize`を追加

```sh:コマンド実行
yarn add materialize-css
```

最後に `app/views/layouts/application.html.erb` にiconを追加する

```erb:app/views/layouts/application.html.erb
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
```

## ちゃんと動くか確認してみる

`app/views/layouts/application.html.erb` にナビゲーションを追加する

```erb:app/views/layouts/application.html.erb
  <nav>
    <div class="nav-wrapper">
      <a href="#!" class="brand-logo center">Logo</a>
      <ul class="left hide-on-med-and-down">
        <li><a href="sass.html">Sass</a></li>
        <li><a href="badges.html">Components</a></li>
        <li class="active"><a href="collapsible.html">JavaScript</a></li>
      </ul>
    </div>
  </nav>
```

ヘッダーに以下が表示されていればOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188887/1df88e7b-297f-3178-939e-08efab236337.png)

## レスポンシブが効いていない
以下のようにレスポンシブが効いてない

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188887/6c361959-608c-90b5-402d-d2db568fb8e0.png" width="300px">

`app/views/layouts/application.html.erb`の`head`に以下を追加する

```erb:app/views/layouts/application.html.erb
<meta name="viewport" content="width=device-width, initial-scale=1.0">
```

すると以下のように表示されるようになります

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188887/58bc9820-ffc2-67ac-f31a-0d1c7bec191a.png" width="300px">

## Selectが表示されない
Selectタグを使うと以下のようにうまく表示されない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188887/11570a39-00e0-dfe9-4739-0b1bce1b6dfb.png)

`app/views/layouts/application.html.erb`に以下を追記

```erb:app/views/layouts/application.html.erb
  <script>
    document.addEventListener('DOMContentLoaded', function() {
      var elems = document.querySelectorAll('select');
      var instances = M.FormSelect.init(elems,[]);
    });
  </script>
```

すると以下のように表示されるようになる

![materialize-select.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188887/88ebbc39-7065-3945-99df-344dee3a7631.gif)


## 参照
[How to install materialize-css on Rails 6.0.0.beta2 using Webpack](https://medium.com/@guilhermepejon/how-to-install-materialize-css-in-rails-6-0-0-beta2-using-webpack-347c03b7104e0)
Ruby on Rails チュートリアル学習記録 第1章

#　はじめに
初投稿なので簡単に自己紹介。
私は独学でプログラミング学習を始めたアラサーの男性です。
未経験からエンジニアへの転職を目指しています。
ProgateでHTML/CSS/Ruby/Ruby on Rails5をひと通り学習後Railsチュートリアル開始。
Progateと違い詰まったら自分で調べたり考えたりしながら進めていく必要がありそうなので学習記録を付けることにしました。
主に自分が詰まったところについて書いていくつもりなので章ごとに文章量は疎らになっていくと思います。
# 1.1
特になし
# 1.2
特になし
# 1.3
gemfileの内容を書き換え`bundle install`を実行するとエラー発生

```
You have requested:
  spring = 2.0.2

The bundle currently has spring locked at 2.1.0.
Try running `bundle update spring`

If you are updating multiple gems in your Gemfile at once,
try passing them all to `bundle update`
```

`bundle update`を実行後、`bundle install`を再度実行で解決。
# 1.4
Rails チュートリアルにおいては、マニュアル作成時点ではGithubで非公開型レポジトリを無料で使えなかったためにBitbucketを使用していようだが、現在はGitHubでも非公開型レポジトリを無料で使えるようになっていたので、自分は既にアカウントを作っていたGitHubを使用。
GitHubでもチュートリアル通りに進めて特に問題は発生せず。
# 1.5
特になし
# 1.6
特になし
# 感想
マニュアル通りに進めていれば特に困ることはなかった。
正直やってることの意味はきちんと理解できていない部分もあると思うが、どうせ2週やるつもりなのでそこはスピード感重視で。
ファイルの内容を変更した後、保存をし忘れてうまくいかないというケアレスミスが何度かあったので気を付けたい。
macOS VMをFusionに作成する際に "Unable to Create the installation medium"と表示され続行できない

メモ

##エラー画面
<img width="752" alt="Screen Shot 2020-02-22 at 9.55.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66163/6e8c9d66-ecab-13f9-d5e2-3e8e9d49b3be.png">

これが表示される。

##対応

ホストOSにマウントされているインストールパーティションをアンマウントする。
Finderにはマウントボリュームとして表示されないのでDisk Utilityからやりましょう。

<img width="1037" alt="Screen Shot 2020-02-22 at 9.55.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66163/683f4099-56d1-002b-d32e-8ea0dd18fb9c.png">
conda vs. pip

# 始めに
Anaconda Navigatorでは、仮想環境の構築と管理、外部ライブラリのインストールや管理が行えます。Jupyter Notebookを含めた開発環境一式を管理できるのですが、ライブラリのインストールにはcondaというコマンドが使われています。

その反面、Pythonには、外部ライブラリを管理するpipというコマンドがあります。Anaconda Navigatorで任意の仮想環境からターミナルを起動すれば、pipコマンドを入力してインストールが行えます。しかしpipでインストールしたライブラリは、pipで管理しなけれえばならないため、Anacondaのcondaでは管理されません。

場合によっては、condaとpipで同じライブラリをインストールし、競合してしまうことにもなります。

#結論
したがって、Anaconda Navigatorを使う場合は、pipコマンドを使わず、condaコマンドを使うことにしましょう。 

#参考資料
1. conda installとpip installの違い。機能の比較など【Python】 https://insilico-notebook.com/conda-pip-install/
2. AnacondaのNumPyとpipによるNumPyの速度の違い  https://orizuru.io/blog/machine-learning/anaconda_pip_difference/
3. Stop Installing Tensorflow using pip for performance sake! https://towardsdatascience.com/stop-installing-tensorflow-using-pip-for-performance-sake-5854f9d9eb0c?gi=677958f0038e
第１回北海道むろらん　ぷよぷよeスポーツ　体験大会（３/１４） 参加者募集

日　時：令和２年３月１４日（土）　小学生１０：００～　一般１３：００～
場　所：生涯学習センターきらん（室蘭市中島町２－２２－１）
参加費：無料
定　員：８名（小学生大会）　１６名（一般大会）
対　象：小学生大会（小学生のみ）　一般大会（年齢問わず）

内容
特定非営利活動法人くるくるネット（理事長：鳥山晃）は平成16年5月21日に、地域情報化の推進・情報格差の是正を団体を設立しました。設立後15年を経過し、令和1年度から、こどもたちにプログラミングを教える「むろらんＩＣＴクラブ」開始しました。
　同法人では、令和2年度より「むろらんＩＣＴクラブ」を拡充し、「CoderDojoむろらんの立ち上げ」と「ｅスポーツの室蘭地区での普及・啓発・人材育成」を計画しています。
　今回は、「ｅスポーツ」の体験大会です。内容は「ぷよぷよ」です。
　令和２年度より定期的にeスポーツ大会を開催する予定です。

※「ｅスポーツ」とはElectronic Sportsの略で、電子機器を利用して行う娯楽、競技、スポーツ全般のことを指します。日本でも、国体やアジア競技大会での正式種目に採用されたことがきっかけで、eスポーツ促進を目的とする活動が盛んになっています。
![ポスター（行政）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489822/59439a84-7268-1454-1915-d93dec2cd71b.jpeg)
C#から鬼雲(bregonig.dll)を使って正規表現を処理する

# 目的
grepなど大規模な正規表現検索をしようとすると、C#の `System.Text.RegularExpressions.Regex`だと処理速度が物足りない。
C#だから遅いのかは判っていませんが、ネイティブなライブラリを使えば多少速くなるのではと思い、サクラエディタとかで採用されている鬼雲(bregonig.dll)をC#から使えないかと調べてみた。
既に実現されている方がいたので、たどり着けるようにメモを残しておきます。

速度はまだ比較できてませんが、鬼雲の正規表現の機能はC#標準クラスの正規表現よりも充実しているらしいです。

# 参考サイト
https://hnx8.hatenablog.com/entry/2018/11/25/153251
⇒ https://github.com/hnx8/BregonigDotNet

# Visual Studioでコンパイルする場合

プロジェクトファイルが上記のGitHubサイトに一緒に入っているので、たぶんそれを使えばできるはず。

# Visual Studio無しでコンパイルする場合

※下記は私が勝手にやってみた手順なので、上記の参考サイト様には下記内容について問い合わせしないようお願いします。

bregonig.dllを~~サクラエディタのフォルダからコピーするなり~~ダウンロードし、
上記のGitHubサイトから一式ダウンロードして、
BregonigRegex.cs と Program.cs と bregonig.dllを同じフォルダにおき、

```

csc BregonigRegex.cs Program.cs
``` 

でコンパイルすると、Program.exeが出来上がるので、これを実行します。
下記のエラー

```

pattern:「(03|045)-(\d{3,4})-(\d{4})」
間違ったフォーマットのプログラムを読み込もうとしました。 (HRESULT からの例外:0x8007000B)
dllの32bit/64bitが妥当ではない可能性もあります。正しいbregonig.dllを実行フォルダに配置してください。
```

が出る場合は、exeとdllのbitが整合していないと思われますので、

```

csc /platform:x86 BregonigRegex.cs Program.cs
``` 
もしくは

```

csc /platform:x64 BregonigRegex.cs Program.cs
``` 

でコンパイルしたProgram.exeのいずれかがうまく動作するはずです。
Program.exeを実行して下記のようなログがとれれば、うまく動作しているものと思います。

```

pattern:「(03|045)-(\d{3,4})-(\d{4})」
input:「 Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 」
 ->found:「045-222-1111」(start=10, length=12)
 ->found:「03-1111-9999」(start=50, length=12)
：
（中略）
：
pattern:「[a-f]」
input:「 置換パターンにエラーがある場合0123456789abcdef 」
replacement:(null)
 ->error:「invalid reg parameter」
```

# 処理速度の比較（まだ）
ファイル読み込む処理とか対象のファイルとかの準備ができていない。。。
Regexクラスもオプション指定でキャッシュとかコンパイルとかすると多少速くなるようなので、それらも比較したい。
Restful API  - How to Decide GET / POST / PUT / PATCH / DELETE methods and Path name / google Translated  ( #API #REST )

# Purpose

I want to prohibit user login

# At least not GET

Because it changes state.

# POST? PUT? PATCH? DELETE?

How do you prevent users from logging in?

- Update and flag a user's record in the database (PATCH)
- Create non-user record in non-user table in database (POST)
- Delete a user's record in the database (DELETE)
- Realize it in some other way (???)
- By the way, I couldn't think of a PUT pattern.

Should we change the method depending on the implementation method?

If once implemented in PATCH and then changed to another implementation by refactoring etc., should I change the API method as well?

# Way of thinking

What if you consider paths and methods not for internal implementation but for purpose, intent, and action?

What to do just by looking at API paths and methods

For example, in this case, it is an API endpoint of "action" of "prohibit user login".

```
POST / v1/user/deny
```

What about something?

With the intention of "creating" a resource that states that the user is not allowed to log in.

# The road to the RESTful API master is still far

RESTful thought does not mean that there is an absolute golden rate, but it must be trial and error every time.

It's just an idea. No, was this the name of the thought? How was it?

If you think someone will give you the ultimate answer, you're wrong.

The road to a RESTful API master is still far away.


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2999








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Restful API で GET / POST / PUT / PATCH / DELETE のメソッドや、パスの名前で迷う時の、考え方の、あくまで一例 ( #API #REST )

# 目的

ユーザーのログインを禁止したい

# 少なくとも GET ではない

状態を変えるので。

# POST ? PUT ? PATCH ? DELETE? 

ユーザーのログインを禁止するのは、どんな方法だろうか。

- データベースでユーザーのレコードを更新してフラグを立てる (PATCH)
- データベースでユーザー以外のテーブルにログイン禁止のレコードを作る (POST)
- データベースでユーザーのレコードを削除する (DELETE)
- 何か他の方法で実現する ( ??? )
- ところでPUTのパターンは思いつかなかった。

実装方法によってメソッドを変えたら良いのだろうか？

仮にいちど PATCH で実装した後に、リファクタリングなどで別の実装に変えた場合は、APIのメソッドも変えたら良いのだろうか？

# 考え方

内部的な実装ではなくて、目的、意図、作用を考えてパスとメソッドを考えたらどうだろうか。

APIのパスとメソッドを見るだけで、何をするか

たとえばこの場合は「ユーザーのログインを禁止する」という「作用」のAPIエンドポイントなので

```
POST /v1/ user/deny
```

なんかはどうだろうか。

ユーザーのログイン禁止状態というリソースを「作成」するという意図で。

# まだまだ RESTful API マスターへの道は遠い

RESTful 思想と言っても絶対的な黄金率があるわけじゃなくて、毎回、試行錯誤の必要があるのではないだろうか。

あくまで思想なので。いや、これって思想の名前なんでしたっけ？ どうなんでしたっけ？

究極の答えを誰かが教えてくれると思ったら大間違えだ。

まだまだ RESTful API マスターへの道は遠い。

# 参考

[PatchとPutの違いについて - Qiita](https://qiita.com/murata0705/items/52538c08778c39a91ec2)

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2998








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
setterとgetter

```py
class Car(object):
    def __init__(self,model=None):
        self.model=model

    def run(self):
        print('run')


class ToyotaCar(Car):
    def __init__(self, model,enable_auto_run = False):
        #self.model = modelとも書けるが、superを使って親メソッドを読み出せる
        super().__init__(model)
        #getterやsetterを使って変数にアクセスさせたい場合は、変数名の前に_をつける
        self._enable_auto_run = enable_auto_run
        #外から完全に遮蔽するには変数名の前に_を2つ付ける
        #self.__enable_auto_run = enable_auto_run

    @property
    def enable_auto_run(self):
        return self._enable_auto_run

    @enable_auto_run.setter
    def enable_auto_run(self,is_enable):
        self._enable_auto_run = is_enable

    #メソッドのオーバーライド
    def run(self):
        print('fast fun')


car = Car()
car.run()

toyotar_car = ToyotaCar('Lexus')
toyotar_car.enable_auto_run = True
print(toyotar_car.enable_auto_run)

```

```text
run
True
```
もっとも新しいファイルをviで開くbashのalias

# 目的
大量のlogファイルから最新のファイルを見つけてvimで開きたい時、コマンドがいっぱいあるディレクトリで一番最後に編集したファイルを開きたい時ないですか？それを一発で開くbashのaliasです
## 考えかた
lsで時間順に表示して、最初の1行をheadで取り出して、それをvimに渡すだけです。`vl`はvi_last_modified_fileぐらいの意味です。

```{bash}
alias vl='vi $( ls -t |head -n 1)'
```
様々な環境で動くかなんていうのは調べていないですが、ContOS7ではOKでした。lsとかviとか別に色々aliasされていることがあるので、うまく動かない時はそちらもチェックされてはいかがでしょうか。
`.bashrc`などに登録してもらうといつでも使えます。どなたかのお役に立てると嬉しいです。
raspi2png: vc_dispmanx_snapshot() failed が出た場合の対処

## この記事のねらいとポイント
RaspberryPiでsshなどしたコンソールからraspi2pngを実行した際に、

```
$ raspi2png: vc_dispmanx_snapshot() failed
```

が出た場合の対処を記します。

## なぜ書いたか
検索すると世界に同じ現象で困っている人がいるようですが、これといった対処まで記されている例を見かけませんでした。また、誤ったアドバイスもされているようです。

- https://github.com/AndrewFromMelbourne/raspi2png/issues/8

特に、/boot/config.txtでgpu_memの値を増やしても効果がなかったよという場合には、以下を試してみてください。

## 対処

```
$ sudo apt install libgl1-mesa-dri
```

で、解決します。

## 原因考察
おそらく何かのときに、raspi-config > Advanced Options > GL Driver で、いずれかのドライバーをdisabledにしてしまったのではないかと思われます(そのときに、libgl1-mesa-driが削除された)。
![GL Driver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159724/6c8bf33b-c5cb-cc49-98ab-436f633fdb27.png)

## おまけ
raspi2png、とても便利で重宝します。私は家庭LAN内samba(/home/pi/Public/screenshots/)をWindows側でネットワークドライブとし、さらに.bashrcの末尾に、

```
function funcr2p() {
raspi2png -p $(date -u +%Y%m%d_%H%M%S_%3N).png;
echo "somenicepassword" | sudo -S mv *.png /home/pi/Public/screenshots/ > /dev/null 2>&1
}
alias r2p=funcr2p
```
として、

```
$ r2p
```

で画面をぱしゃぱしゃ撮っています。PiSTARTERでのプログラミングと実行結果の確認に、これなしでは暮らしていけないくらいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159724/09ee4db3-fc8a-c00a-21a7-da44ff716e57.png)

(こつこつアルゴリズムにより (http://www.kk62526.server-shared.com/pi/Spigot.html  その1のほう) 円周率を求めるプログラムをPiSTARTERのSmileBASICに移植したものです。)

こちらのノウハウは、後日、別記事に仕立てるかもしれません。今回、以上です。
Go で Docker の multi-stage build を試す

## 前提
- Docker がインストールされていること

## 手順

### Go ファイルを作成

`app.go` という名前のファイルを作成する。


`app.go` に「Hello, world」と出力するだけのコードを書く。
（ホストOS に Go がインストールされてなくても :ok_hand: ）

```go:app.go
package main

import "fmt"

func main() {
	fmt.Println("Hello, world")
}
```

### Dockerfile を作成

Go ファイルと同じディレクトリに `Dockerfile` を作成する。
「Go のバイナリを**ビルド**する環境」と「Go のバイナリを**実行**する環境」の定義を記述する。

```dockerfile:Dockerfile
# 「builder」という名前で Dockerfile 内から参照できるようにする
FROM golang:1.13 AS builder
WORKDIR /root
# 作成した Go ファイルをコピー
COPY . /root
# Linux 用のバイナリをビルドし、WORKDIR に出力
RUN GOOS=linux go build -o app .

# scratch は超軽量なイメージ
FROM scratch
WORKDIR /root
# 「builder」にあるバイナリを WORKDIR にコピー
COPY --from=builder /root/app .
CMD ["./app"]
```

### イメージをビルド & コンテナ起動

Go ファイルと Dockerfile があるディレクトリでターミナルを起動し、イメージをビルド & コンテナ起動する。

```bash:terminal
# app という名前でイメージをビルド
docker build -t app .

# app のコンテナを起動（ --rm はコンテナ停止時にコンテナを削除するオプション ）
docker run --rm app
# app.go の実行結果が出力される
> Hello, world

# app のイメージサイズ ≒ バイナリのサイズ で「Go のバイナリを実行する環境」が実現できたことがわかる
docker images app --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
REPOSITORY          TAG                 SIZE
app                 latest              2.01MB
```
初心者によるプログラミング学習ログ 246日目

#100日チャレンジの246日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。

すでに100日超えましたが、継続。

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

246日目は、

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>246日目<br>・udemyで、webサイト模写<br>・udemyで、バナー作成<a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a><a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E7%B9%8B%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアと繋がりたい</a><a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a><a href="https://twitter.com/hashtag/web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#webデザイン</a></p>&mdash; ぱぺまぺ@webエンジニアを目指したい社畜 (@yudapinokio) <a href="https://twitter.com/yudapinokio/status/1230943121032105984?ref_src=twsrc%5Etfw">February 21, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
FlutterのAndroidビルドで警告が発生したのでminSdkVersionを上げて解決した話

## TerminalでAndroidビルドの実行
Flutterでアプリ開発していて、しばらくはiPhoneしか使っていなかったのですが、Pixel  3 XL を購入したのでAndroidでも実機実行しようと思いました。
とりあえずVS CodeのTerminalでAPK Buildすると…

```zsh
% flutter build apk
```

## 警告発生
以下のエラーが赤く表示されました…
動きはするんですが気持ち悪いですよね🙀

```zsh
注意:/Users/riscait/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.9.0+10/android/src/main/java/io/flutter/plugins/firebaseadmob/AdRequestBuilderFactory.javaは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
注意:/Users/riscait/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+1/android/src/main/java/io/flutter/plugins/firebase/core/FirebaseCorePlugin.javaは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
注意:/Users/riscait/development/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.0+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.javaの操作は、未チェックまたは安全ではありません。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
注意:/Users/riscait/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_analytics-5.0.9/android/src/main/java/io/flutter/plugins/firebaseanalytics/FirebaseAnalyticsPlugin.javaは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
注意:/Users/riscait/development/flutter/.pub-cache/hosted/pub.dartlang.org/package_info-0.4.0+13/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.javaは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
/Users/riscait/development/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.6/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java:25: 警告: [deprecation] FlutterPluginBindingのgetFlutterEngine()は非推奨になりました
    setupChannel(binding.getFlutterEngine().getDartExecutor(), binding.getApplicationContext());
                        ^                                               
警告1個                                                                 
注意:一部の入力ファイルは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
```
* Firebase AdMob
* Firebase Core
* Firebase Cloud Firestore
* Firebase Analytics
* PackageInfo
* SharedPlugin

のプラグインで警告が発生しているようですね。

## 解決方法
/android/app/build.gradle ファイルを開き、1行編集します。


```gradle
defaultConfig {
    applicationId "com.company.sample"
    minSdkVersion 23 // <-ここを16だったので23に上げました
    targetSdkVersion 28
```

`minSdkVersion `を上げました。
最初は21に上げたのですが、警告に変化なかったので23に上げたらすべて解決しました！

ライブラリによって設定すべき`minSdkVersion`があるんでしょうね。
どこかに書いてあるのかもしれませんが、軽く見た感じでは見つけることができませんでした🤔