OmniAICreator/Qiita-1.07M huggingface dataset:
PodmanでAdminerを起動してみる

# 環境

Fedora CoreOS 31.20200113.3.1
Podman 1.7.0
Podman Compose 0.1.5
Adminer 4.7.6
MariaDB 10.4.12

# 準備

```
$ sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
$ sudo reboot
$ sudo rpm-ostree install python3 -r
$ sudo pip3 install podman-compose
$ mkdir -p ~/.local/bin
$ curl -o ~/.local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
$ chmod +x ~/.local/bin/podman-compose

$ cd
$ mkdir -p dkwork/adminer
$ cd dkwork/adminer
$ mkdir -p mariadb/data
$ chmod 777 mariadb/data
```
# ファイル

```docker-compose.yml
version: '3.7'
services:
  adminer:
    # container_nameをadminerにしたら
    # Error: name adminer is in use: container already exists
    # のエラーになったので別名にしています。
    container_name: adminer1
    image: adminer:4.7.6
    restart: always
    ports:
      - 8080:8080
    depends_on:
      - db
  db:
    container_name: mariadb
    image: mariadb:10.4.12
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=sample
      - MYSQL_USER=user
      - MYSQL_PASSWORD=pass
    volumes:
      - ./mariadb/data:/var/lib/mysql
```

# 実行

```
$ podman-compose up -d
$ podman ps

CONTAINER ID  IMAGE                              COMMAND               CREATED         STATUS             PORTS                   NAMES
a80a97d42396  docker.io/library/adminer:4.7.6    php -S [::]:8080 ...  7 seconds ago   Up 6 seconds ago   0.0.0.0:8080->8080/tcp  adminer1
a507d52a1d84  docker.io/library/mariadb:10.4.12  mysqld                14 seconds ago  Up 13 seconds ago  0.0.0.0:8080->8080/tcp  mariadb
```
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208807/1965fa47-be9d-dbf8-f772-770e9a9e051a.png)
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208807/155f08f8-e5b6-3ffa-6a85-6a732a07e132.png)
JavaScript勉強の記録その23:例外処理

#JavaScriptの例外処理
PHPに似てるなと思いましたが、tryとcatchで例外処理ができます。
JavaScriptではあまり使わないかもですが。

```index.js
const name = "okuno"
try {
  console.log(name.makeUpperCase());
} catch (e) {
  console.log('さーせん、エラーでたのでやり直してください');
}
//=>さーせん、エラーでたのでやり直してください
```
TypeScriptでコールバック関数を書いてみる

最終的にTypeScriptでAsyncを書いていきたい。
そのための第一歩として、コールバック関数を書いてみた。

# わかったこと
1. interfaceで関数の型の宣言の仕方
2. 関数の引数への型の付与
3. 関数への型の付与の仕方


# ソースコード

```typescript
// 1. interfaceで関数の型の宣言の仕方
interface interFunc {
    (): void;
}

// 2. 関数の引数への型の付与
let doFunc = (func:interFunc): void => {
    func();
    func();
}

// 3. 関数への型の付与の仕方
let doConsole: interFunc = (): void => {
    console.log("hello world!" + new Date().toLocaleTimeString());
}

doFunc(doConsole);
```
yukicoder No.977 アリス仕掛けの摩天楼

# [yukicoder No.977 アリス仕掛けの摩天楼](https://yukicoder.me/problems/no/977)

まず、Alice 攻撃前の時点ですべての島が繋がっていたら Bob の勝ちです. Alice が爆破した橋を作り直せばいいのですから. 逆に島が3グループ以上になっていたら、Alice の勝ちです. Alice が何もしなくても、橋を1つ掛けるだけでは連結状態になりません. 勝負が分かれるのが、島が2グループに分かれていた場合で、Alice の爆破で3グループに変化すれば Alice の勝ちです. 橋が一本でしか繋がっていない島はその橋を爆破されると別グループになってしまうので、そういう島があるかをチェックすれば解答できます.

島が何グループかは Union Find で簡単にわかります. 島に何本橋がかかっているかは素直に集計すればよいです.

```python
from sys import setrecursionlimit


def find(parent, i):
    t = parent[i]
    if t < 0:
        return i
    t = find(parent, t)
    parent[i] = t
    return t


def unite(parent, i, j):
    i = find(parent, i)
    j = find(parent, j)
    if i == j:
        return
    parent[j] += parent[i]
    parent[i] = j


setrecursionlimit(10 ** 5)

N = int(input())

parent = [-1] * N
edges = [0] * N
for _ in range(N - 1):
    u, v = map(int, input().split())
    unite(parent, u, v)
    edges[u] += 1
    edges[v] += 1

# Alice が橋を爆破する前のグループ数
groups = sum(1 for e in parent if e < 0)

# Alice が橋を1つ爆破した後のグループ数
if 1 in edges:
    groups += 1

# Bob が橋を1つ掛けた後のグループ数
if groups != 1:
    groups -= 1

if groups == 1:
    print('Bob')
else:
    print('Alice')
```
pyenvとcondaで環境構築

# pyenv: conda: command not found
となる場合

`conda --versions`
`pyenv: conda: command not found`




## bashの設定ファイルに書き込む

```bash
echo 'export PATH="~/.pyenv/versions/anaconda3-5.2.0/bin/:$PATH"' >> ~/.bash_profile
source .bash_profile
```

fishはbash,zshとpathの書き方が違うようなので注意.今回はおとなしくbashを使い,sourceで読み込んだ.

# conda activateできない
fishの設定ファイルに使うanacondaのバージョン(今回はpyenvで管理している)のpathを書き込む

```
echo "source (conda info --root)/etc/fish/conf.d/conda.fish" >> config.fish
conda --version                                                                                                           
conda 4.5.11
```

# 環境構築の流れ
```
pyenv versions
pyenv local anaconda3-5.3.0
conda create -n job_opencv python=3.7.0
conda version
conda list
conda activate job_opencv
conda deactivate
```


# 参考サイト
https://org-technology.com/posts/fish-conda.html
https://qiita.com/Ryuichirou/items/bf3cf227a20e6300fa7a
https://qiita.com/taaaaak/items/2294d909bea910b1d818
https://qiita.com/najayama/items/5ae5fbe2c87568d98987
https://blog.mktia.com/how-to-install-anaconda-in-macos/
https://qiita.com/nsas454/items/c5bd3a535205d434234e
https://qiita.com/masatomix/items/b1a0ec216ea943c86a2a
https://qiita.com/ysdyt/items/5008e607343b940b3480
Angularヒーローチュートリアル2

# コンポーネント

## コンポーネントの作成
```terminal:ターミナル
$ cd src/app
$ ng generate component heroes
```
このコマンドで`heroes`ディレクトリがコンポーネント(要素)として作成され、中には

- `heroes.component.ts`
- `heroes.component.html`
- `heroes.component.css`
- `heroes.component.spec.ts`

が自動で作成されています。
ここで登場したspec.tsファイルはテスト用のファイルです。

## 動作の確認
```html:app.component.html
<h1>{{title}}</h1>
<app-heroes></app-heroes>
```
このように書くとheroesコンポーネントを組み合わせることができます。
<img width="1433" alt="スクリーンショット 2020-02-02 18.50.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519379/9fd03d6b-d35f-e30a-f768-46ddb27a24d2.png">
こんなんが出てきますね。

また前回のようにtsファイルの値をHTMLに表示してみたいと思います。
まず、型を定義するファイル(Heroクラス)を`src/app`に作ります。

```terminal:ターミナル
$ cd src/app
$ touch hero.ts
```
```ts:hero.ts
export class Hero{
    id: number;
    name: string;
}
```
これを他のファイルからインポートすることでこの型を使用することができます。

```ts:heroes.component.ts
import { Component, OnInit } from '@angular/core';
import {Hero} from '../hero';//ここでインポート

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  hero: Hero = {//ここを追加
    id: 1,
    name: 'Windstorm'
  };

  constructor() { }

  ngOnInit() {
  }

}

```
ここで、heroがオブジェクトになったのでHTMLファイルを変更しなければいけません。

```html:hero.component.html
<h2>{{hero.name | uppercase}} Details</h2>
<div><span>id: </span>{{hero.id}}</div>
<div><span>name: </span>{{hero.name}}</div>
```
1行目の`| uppercase`は大文字にするためのパイプです。
<img width="1428" alt="スクリーンショット 2020-02-02 20.39.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519379/1bb9991a-4758-b93c-9f0e-bc1e8dc7cbc7.png">
このように詳細が表示されるようになりました。

## プロパティを編集する
次にヒーローの詳細でnameプロパティを変更できるようにします。
要するにヒーローの名前を変えます。

まず、そのために`FormsModule`をインポートする必要があります。
このように新たなライブラリやモジュールをインポートするときには`app/app.module.ts`に記述しなければ使用できません。

```ts:app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';//ここを追加

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HeroesComponent } from './heroes/heroes.component';

@NgModule({
  declarations: [
    AppComponent,
    HeroesComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule//ここを追加
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
```
モジュールをインポートできたら、htmlを変更します。

```html:heroes.component.html
<h2>{{hero.name | uppercase}} Details</h2>
<div><span>id: </span>{{hero.id}}</div>
<div>
    <label>name:
      <input [(ngModel)]="hero.name" placeholder="name"/>
    </label>
  </div>
```

この`[(ngModel)]`が、双方向データバイディングといいます。これを`hero.name`に指定することによってnameプロパティを変更させることができます。

<img width="1440" alt="スクリーンショット 2020-02-02 21.06.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519379/39d1ad81-9166-a40c-de43-22c917d40d4e.png">

この出来上がったフォームの中身を変更することによって、ヒーローの名前を変更することができます。
flexboxの親要素を可変の子要素に合わせるCSS

Flexboxで作成した場合、親要素は横幅100%となります。
子要素をinline表示とし、親要素幅を子要素に合わせたい場合のCSS設定をメモしておきます。

どんな状態か、デモをご確認ください。

#デモ

## 子要素に合わせて親要素を横幅可変
<p class="codepen" data-height="300" data-theme-id="36833" data-default-tab="result" data-user="harumi-sato" data-slug-hash="VwYoPmK" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="親要素の横幅100％">
  <span>See the Pen <a href="https://codepen.io/harumi-sato/pen/VwYoPmK">
  親要素の横幅100％</a> by harumi-sato (<a href="https://codepen.io/harumi-sato">@harumi-sato</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## 子要素に関係なく親要素を横幅100%固定
<p class="codepen" data-height="300" data-theme-id="36833" data-default-tab="result" data-user="harumi-sato" data-slug-hash="zYxgNwO" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="親要素の横幅、子要素のサイズに可変">
  <span>See the Pen <a href="https://codepen.io/harumi-sato/pen/zYxgNwO">
  親要素の横幅、子要素のサイズに可変</a> by harumi-sato (<a href="https://codepen.io/harumi-sato">@harumi-sato</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>


#コード

Flexboxを囲ったblockに inline-blockを指定すると、
子要素がinline-blockの振る舞いとなります:thumbsup:

```HTML:HTML
<div class="parent">
<ul class="item_parent">
<li class="item_child _child1">category1</li>
<li class="item_child _child2">category2</li>
</ul>
</div>
```

```css:CSS
.parent{
  display:inline-block;
}
.item_parent{
  display:flex;
  background:lightpink;
}
.item_child{
  background:#fff;
}
```

##まとめ

親要素が可変する場合、1段上に幅指定用のブロックを作成する。
VBA勉強メモ



















## 符号変換

| Title        | Escape Character  |
| ------------ | ----------------- |
| single quote | chr(39)           |
| double quote | chr(34)           |
| 改行         | vbCrLf｜vbnewline |

## オブジェクト選択



| Title                                            | 意味                     |
| ------------------------------------------------ | ------------------------ |
| Range(Selection, Selection.End(xlDown))          | 上から下までの範囲を選定 |
| Range(Selection, Selection.End(xlToRight))       | 左から右までの範囲を選定 |
| Range("A1")                                      | セルA１                  |
| Cells（1,1）                                     | セルA１                  |
| Columns("B:B")                                   | B列を選ぶ                |
| Rows("1:1")                                      | 第一行目を選ぶ           |
| ActiveCell.Offset(rowOffset:=2, columnOffset:=3) | セルの下２行目、右第３列 |

## 文字列操作

| Function                          | 意味                                     |
| --------------------------------- | ---------------------------------------- |
| Len(string)                       | 長さ                                     |
| Trim(string)                      | 空白削除                                 |
| Mid(string,startIndex,length)     | サブ文字列                               |
| Split(string, Delimiter)          | 文字列を分割して配列を返す               |
| replace(string,find,replacement)  | 部分文字を置換する                       |
| InStr(string,find)                | sub文字のIndexを返す。無い場合、０を返す |
| StrConv(string, vbWide｜vbNarrow) | 文字列を【全角｜半角】に転換             |

## その他

### テキストに出力

```vb
Open "filePath" For Output As #1
Print #1, "content"	
Close #1
```

### フォルダを作成

```vb
MkDir "MYDIR" ' Make new directory or folder. 
```

### ファイルコピー

```vb
Dim SourceFile, DestinationFile 
SourceFile = "SRCFILE" ' Define source file name. 
DestinationFile = "DESTFILE" ' Define target file name. 
FileCopy SourceFile, DestinationFile ' Copy source to target.
```

## FileDialog

```vb
Dim fd As FileDialog 
'msoFileDialogFilePicker
'msoFileDialogFolderPicker
Set fd = Application.FileDialog(msoFileDialogFilePicker) 
Dim vrtSelectedItem As Variant 
With fd 
    If .Show = -1 Then
        For Each vrtSelectedItem In .SelectedItems 
        MsgBox "The path is: " & vrtSelectedItem 
        Next vrtSelectedItem 
    Else 
    End If 
 End With 
Set fd = Nothing
```

## FileSystemObject

```vb
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("This is a test.")
a.Close
```

## ADODB

```vb
Debug.Print ("start")
Dim csvFile As String
csvFile = ActiveWorkbook.path & "\data.txt"

'ADODB.Stream生成
Dim adoSt As Object
Set adoSt = CreateObject("ADODB.Stream")
    With adoSt
    .Charset = "UTF-8"
    .LineSeparator = 10 'adLF
    .Open
    .WriteText "hello", 1 'adWriteLine
    .SaveToFile csvFile, 2 'adSaveCreateOverWrite
    .Close
End With
Debug.Print ("end")
```

## DIR

```vb
'folder内のパータンと一致するファイルを探す
Dim buf As String, msg As String
buf = Dir("\folder\tanaka*.txt")
Do While buf <> ""
    debug.print buf
buf = Dir()
Loop
MsgBox msg
```
【読書】Webを支える技術 -HTTP、URI、HTML、そしてREST

#読んだ書籍
**Webを支える技術 -HTTP、URI、HTML、そしてREST(WEB+DB PRESS plus)** 
出版：技術評論社
著者：山本 陽平

#満足度
**110%**
・期待していた情報量 < 実際の情報量。

#動機
Webアプリケーション開発の基本知識を身に着けておきたかった。
汎用機のアプリ開発をしているが、外部システムとの接続を行う際にREST APIのことを軽く知っておく必要があったのが発端。
そんなもあり、「浅く広く」知ることができればいいなと思っていた。

#読んだ感想
それぞれの技術（HTTP,URI,HTML....）について、生まれた歴史から実装上のアドバイスまで、しっかりと解説しており、実際に触れていない人間としては、黙って読んでいてもイメージが持てない部分が多かった。
（逆に言えば、現場で実践している人間はかなり役立つ部分が多い本だと思う。）
一度ざっくり最後まで読んだが、上述の難しさから正直に言ってかなりスルーした部分がある。
今後、実践とともに使い込んでいきたい本。

#読書期間
2019/07/25-2019/08/01
プロキシ環境下でどうしても Qiita が見たかった話

# 背景
**私が働く会社では、プロキシに阻まれて Qiita にアクセスすることができません。**

勉強会なんかで話を聞いていると、意外と同じような環境の会社があることを聞きます。
でも、どうしても **「 会社でQiitaが見たい!! 」** 

こんな悩みをある日、AWS の勉強会に参加されていた方に相談をしたら、いいアイデアを頂きました。
最近、AWS の勉強もしていたので実装してみました。

# 全体像
作成したサービスの簡単な流れとしては、見たい Qiita のページ情報を抜いてきて、社内からでもアクセスできるところに配置し直す感じです。
ちなみに、社内から AWS にアクセスできない場合は、アウトです。

## 使用したサービス
今回、AWS で使うサービスは主に 3 つです。各サービスの詳細な説明は割愛します。

- [Amazon API Gateway](https://aws.amazon.com/jp/api-gateway/)
- [AWS Lambda](https://aws.amazon.com/jp/lambda/)
- [Amazon S3](https://aws.amazon.com/jp/s3/)

## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353538/bc27a110-3359-a8c7-fe36-f0e67c830a15.png)

1. 見たい Qiita のページの URL をクエリパラメータとして受け付ける API に GET でリクエスト
2. クエリパラメータ(Qiita の URL)を Lambda に渡す
3. Lambda から Qiita のページにアクセスし、Markdown を取得
4. Markdown → HTML に変換し、S3 に静的コンテンツとして保存
5. S3 オブジェクトの保存先 URL をリダイレクト先としてレスポンス 
6. S3 にリダイレクト

リクエストは、https://qiita.com/guromityan/items/5846fcefd87abcf76f7f の記事を見る場合は以下のようになります。
`target` で、見たい記事の URL を指定します。

```
https://<API Gateway>.ap-northeast-1.amazonaws.com/previewQiita?target=https://qiita.com/guromityan/items/5846fcefd87abcf76f7f
```

レスポンスは以下のようになります。

```json
{
  "statusCode": 301,
  "headers": {
    "Location": "https://<S3 Bucket>.s3-ap-northeast-1.amazonaws.com/guromityan/5846fcefd87abcf76f7f"
  }
}
```

`"sutatusCode": 301` のため、これを受け取ったブラウザは `Location` ヘッダに指定された URL にリダイレクトします。遷移先は、Markdown から html に変換した S3 オブジェクトを静的コンテンツとして公開しているページです。

ちなみに私は、Chrome の拡張機能を作って Qiita への URL を自動的に API Gataway を叩くように書き換えています。その話もいつか書こうと思います。

# やり方
今回話したかったのは、こんなアイデアもあるんだということなので AWS のサービスの設定方法の説明は割愛します。

Lambda のソースコードは [[GitHub] guromityan/previewQiita](https://github.com/guromityan/previewQiita) で公開しておくので、やりたい方は使ってみてください。
>**[注意]**
Lambda で使うには依存ライブラリもまとめて zip で固める必要があるため、`docker-compose build` などしてローカルに依存ライブラリを落としてきてください。
rails のバージョン 2.7.0以上でEDITOR="vi" rails credentials:editがうまくいかない際の解決法

## 結論：EDITOR="vi" bin/rails credentials:editにすればOK

raisのバージョン2.7.0以上だと、EDITOR="vi" rails credentials:editを入力すると


```
rbenv: rails: command not found
```

と出ます。


そんな時は

```
EDITOR="vi" bin/rails credentials:edit
```

と入力してあげればOKです。
フレッツ IPv6(IPoE)のセキュリティに関する考察　その1


#フレッツIPv6はファイアウォール無効?
小生の家は、フレッツ光とプロバイダのフレッツv6オプションでIPv6(IPoE)を使っている。
ファイアウォールはホームゲートウェイ(HGW)の標準設定のまま、特にいじっていなかった。
ある日ネットを見ていたら、これではマズいということらしいので、慌てて設定変更したので、その備忘としてこの記事を投稿した。

##HGWのIPv6パケットフィルタ

HGWの設定画面では以下のような記載がある。
>IPv6ファイアウォール機能が「有効」でかつ、セキュリティレベルが「標準」の場合、NTT東日本・NTT西日本のフレッツ光ネクスト網内で折り返す通信（NTT東日本・NTT西日本との契約により可能となるもの）は許容し、その他のIPv6通信を使用したインターネット側からの通信を拒否します。
※セキュリティレベルが「高度」の場合は、NTT東日本・NTT西日本のフレッツ光ネクスト網内で折り返す通信（NTT東日本・NTT西日本との契約により可能となるもの）を拒否します。 

**フレッツ光ネクスト網内で折り返す通信**を許容するということは、厳密な説明は割愛するが、IPv6のインターネットへ接続はプロバイダのゲートウェイを通らなければならないが、下図のように、NGN網内同士は通信ができるということである。(下図)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577966/f68322ab-9eeb-cacf-c467-b46d8809b63a.png" width=250px>
出典: http://www.geekpage.jp/blog/?id=2013/1/11/1

##HGWのセキュリティレベルの設定
ここで問題となるが上述の設定画面の「セキュリティレベル」ということになるのだが、「標準」というのは、**HGWがNGN網内のIPv6通信を全て通過させる**ということなのである。これは非常にマズく、NASやファイル共有設定を有効にすると誰からでも見えてしまうという状況なのである。
当然ここは、設定を「**高度**」に変えよう。
変更してもIPv6通信ができなくなるわけではない。
![security.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577966/2c0ac8de-ba1d-1200-f538-e216d6233c34.png)
図：HGWのIPv6(IPoE)のセキュリティレベル設定は「高度」に！

なお、「標準」でもNGN網の外からのアクセスは遮断されるようだ(HGWまではアクセスできるようだが、パケットフィルタで遮断される）。
NGN網の中の人たちはよほど信頼できるということなのだろうか(笑)。

IPv4だと、ルータがプライベートアドレス(192.168.x.xなど)を割り振るため、わざわざ設定しない限りはLANの外にいきなりPCがさらされることはないのだが、IPv6ではHGWの設定一つで丸裸になってしまうのである。

##まとめ
フレッツのHGWのセキュリティレベルはデフォルトの「標準」ではかなり危険だ。
特に理由がある場合を除き、少なくとも「高度」に変えておこう。
それでも設定一つで丸裸になることには変わりが無いので、もう少しセキュリティのレベルを上げることを[その2](https://qiita.com/maron2000/items/f3765a517a4616bdc395)で、紹介する。
PHPで配列内の同じキーの要素を足し算したい

PHPの標準関数で、配列内の同一のキーの要素を足し算する方法って用意されていないですよね。
やり方はいろいろあるかなと思いますが、一つのやり方を忘備録として書き留めておこうかと思います。
こうやって書いた方がもっとスマートに計算できるよっていう方法がありましたら、コメント欄で教えてください！！

##foreachでまわして同じキーの要素を足し算する
```
$sample1 = array(4) {[0]=> 84, [1]=> 6, [2]=>3, [9]=>21}
$sample2 = array(4) {[0]=> 15, [1]=> 3, [2]=>0, [9]=>26}

$result = [];
foreach ($sample1 as $key => $val) {
    $result[] = $val + $sample2[$key];
}

$result = array(4) {[0]=> 99, [1]=> 9, [2]=>3, [9]=>47}
```

以上、ご参考までに！！！
PowerPoint用のアドインの紹介

# PowerPoint用のアドインの紹介

## はじめに

PowerPointでのドキュメントの作成を補助する「OhinaWork」というVBA製のアドインを作成しましたので、ご紹介させていただきます。

RelaxToolsという有名なExcelアドインの感銘を受けて、
PowerPoitでも同じようなものがあってもいいんじゃないかと思い、Githubでツールを公開いたしました。
ご興味を持たれた方がいらっしゃれば、使っていただけると幸いです。

[RelaxTools](https://software.opensquare.net/relaxtools/support-2/campaign/)

---

## 機能

以下の機能を提供します。

### 雛形オートシェイプの挿入

雛形として用意している赤、青、黄、緑色のオートシェイプを挿入できます。

### PowerPointファイルの暗号化

パワーポイントファイルに任意のパスワードを設定することが可能です。

---

## インストール

* 以下のリンクから、ダウンロード

https://github.com/11ohina017/OhinaWork

* ダウンロードしたファイルを解凍

* pptxフォルダ配下の以下のスクリプトをダブルクリック

`installPowerPointAddin.vbs`

インストール後にPowerPointを起動すると、リボンタブにOhinaWorkというタブが追加されます。

![libon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441666/0d1403b0-aeaf-291e-56c5-2d8d62cc2eeb.png)
Salesforce Web Lightning Component 入門：作成から〜→リリースまで、簡易版


<h1 style="background-color: lightgrey">sfdx force:org:list<p>まず、Org接続状況を確認する</p></h1>
<img width="582" alt="スクリーンショット 2020-02-02 19.10.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550974/4f07ae21-c412-0bc1-7770-a8cba09475ef.png">

<h1 style="background-color: lightgrey">sfdx force:org:open -u mydevorg<p>次、コマンドを使って登録済みの組織をブラウザ上で開く</p></h1><img width="587" alt="スクリーンショット 2020-02-02 19.20.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550974/0df58a7b-a61c-66b5-2f21-3190f8b19a4d.png">

<h1>sfdx force:project:create<p>コマンドでローカル環境にDXプロジェクトを作成する。</p></h1><img width="586" alt="スクリーンショット 2020-02-02 19.29.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550974/2fa7bdb6-80f0-e385-25b5-8cf842703380.png">

<h1>sfdx force:lightning:component:create<p>web lightning conponent作成する</p></h1><img width="585" alt="スクリーンショット 2020-02-02 19.36.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550974/0acbc8b6-412c-361d-6cb8-e7bd79bcb52e.png">
macの特別のルーターのせいか、正しいパスで作成してくれないため、絶対パスで行く。
<img width="607" alt="スクリーンショット 2020-02-02 19.42.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550974/02d9749b-9f4a-d360-2078-50da0bb2136f.png">
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ソースの作成は一旦飛ばして良い、とにかく結果が見たい。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
<h1>sfdx force:source:deploy -m LightningComponentBundle<p>リソースの送信</p></h1>
<a>「※ スクラッチ組織にはこれらのコマンドを使うことはできません。代わりに push/pull を使います」</a>と原本に書いてあるのですが、そもそも「スクラッチ」が何かが分かんない自分には、読み飛ばししか見えない。
<img width="1081" alt="スクリーンショット 2020-02-02 20.09.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550974/206b4551-dfca-272e-785e-c4cc81edcb3a.png">
上手く行ったようですね。

次は参照元①trailheadのソースを各ソースに編集してもう一回リリースすれば、
画面上には見えるよ。
<img width="1440" alt="スクリーンショット 2020-02-02 20.16.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550974/17c9671b-0d43-5e31-848f-a034f5458f2b.png">


参照元①：trailhead
<a>https://trailhead.salesforce.com/ja/content/learn/modules/lightning-web-components-basics/push-lightning-web-component-files</a>
参照元②；ブログ
<a>https://hub.appirio.jp/tech-blog/lightningwebcomponents4</a>
【Aframe】Aframe星型パーティクルを試してみた


⭐️Mac OS Mojave バージョン10.14
⭐️iPhone7(IOS 12.3.1)

↓↓完成動画
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">🌠WebVR🌠Aframe<br>✨✨星型✨✨パーティクルを試してみたよぉ😍<br>🌠🌠🌠キラキラ〜🤩<a href="https://twitter.com/hashtag/webVR?src=hash&amp;ref_src=twsrc%5Etfw">#webVR</a> <a href="https://twitter.com/hashtag/Aframe?src=hash&amp;ref_src=twsrc%5Etfw">#Aframe</a><a href="https://t.co/bLyveyBn6U">https://t.co/bLyveyBn6U</a> <a href="https://t.co/YPPu8azsVI">pic.twitter.com/YPPu8azsVI</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1223927172588392448?ref_src=twsrc%5Etfw">February 2, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


aframe-particle-system-component
https://www.npmjs.com/package/aframe-particle-system-component

<img width="757" alt="スクリーンショット 2020-02-02 16.18.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/daa6d9df-3225-2104-9012-8958e0c826c5.png">


2020.02.02時点で、最新バージョンは「1.1.3」

https://unpkg.com/browse/aframe-particle-system-component@1.1.3/
<img width="956" alt="スクリーンショット 2020-02-02 16.21.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/7a0be491-291f-fc06-ae1c-d55a86a4f5e3.png">

下記を組み込めばOK

```
<script src="https://unpkg.com/aframe-particle-system-component@1.1.3/dist/aframe-particle-system-component.min.js"></script> 
```

パーティクルの設定は
<img width="594" alt="スクリーンショット 2020-02-02 16.27.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/e3b46ec6-7658-5064-cf81-c239da3c2adf.png">

パーティクルの種類を星型「star」に設定して、星の色をピンクに設定。

```
<a-entity particle-system="preset:star; color: #f216b0,#f24535"></a-entity>
```

<img width="981" alt="スクリーンショット 2020-02-02 16.34.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/3f84129f-044d-7619-4486-3cde1d20441c.png">

```js:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hello, WebVR! • A-Frame</title>
    <meta name="description" content="Hello, WebVR! • A-Frame">
    <script src="https://aframe.io/releases/1.0.3/aframe.min.js"></script>
    <script src="https://unpkg.com/aframe-particle-system-component@1.1.3/dist/aframe-particle-system-component.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-sky rotation="0 -90 0" src="SkyBox.png"></a-sky>
      <a-entity rotation="0 90 0" position="0 -5 -10" particle-system="preset:star; color: #f216b0,#f24535"></a-entity>
      <a-image src="girl.png" width="4" height="4" position="0 -0.2 -5"></a-image>
    </a-scene>
  </body>
</html>
```
【WebVR】[Aframe]image画像のアニメーション


環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️iPhone7(IOS 12.3.1)

↓↓完成動画
![ezgif.com-resize.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/75f712b3-f296-256f-cca1-f8269a675881.gif)



a-entityの後ろにanimationを追加します。
animationにobject3D.position.y軸にして、toに動かす位置を指定します。ここでは2.5に設定します。
dir: alternate  交互に移動
loop: true で無限に上下します。

<img width="843" alt="スクリーンショット 2020-02-02 17.01.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/493f73a7-98ba-a9e4-28b1-ec28a6bba6d9.png">



<img width="865" alt="スクリーンショット 2020-02-02 16.58.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/7e98e9f1-ab09-b2d3-b75b-6cb3321939ed.png">

```js:index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hello, WebVR! • A-Frame</title>
    <meta name="description" content="Hello, WebVR! • A-Frame">
    <script src="https://aframe.io/releases/1.0.3/aframe.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-sky src="template_color.png"></a-sky>
      <a-entity  animation="property: object3D.position.y; to: 2.5; dir: alternate; dur: 1000; loop: true"> 
        <a-image src="girl.png" width="4" height="4" position="0 -0.2 -5"></a-image>
      </a-entity>
    </a-scene>
  </body>
</html>

```

# アレンジ

↓↓完成内容
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">🏖️WebVR👯‍♀️Aframe<br>360度全天球のテンプレートを作って🌸<br>png画像をアニメーション表示してみたよぉ🍬<br>ハンズオン勉強会資料に「おまけページ」追加してみた☺️<br><br>似顔絵メーカーCHARAT(キャラット)💕でオリジナルのキャラクターpng画像で作ってみた😍<a href="https://t.co/bdam5d9OX1">https://t.co/bdam5d9OX1</a> <a href="https://t.co/tVgAscRY9B">pic.twitter.com/tVgAscRY9B</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1223924629904883712?ref_src=twsrc%5Etfw">February 2, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

４面に画像を配置する。
<img width="1129" alt="スクリーンショット 2020-02-02 19.49.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/f079cb1a-b7ec-78cc-6edc-840a2f5e504d.png">


```js:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hello, WebVR! • A-Frame</title>
    <meta name="description" content="Hello, WebVR! • A-Frame">
    <script src="https://aframe.io/releases/1.0.3/aframe.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-sky src="template_color"></a-sky>
      <a-entity  animation="property: object3D.position.y; to: 2.5; dir: alternate; dur: 1000; loop: true"> 
        <a-image src="front.png" width="4" height="4" position="0 -0.2 -5"></a-image>
        <a-image src="light.png" width="4" height="4" rotation="0, -90, 0" position="5 -0.2 0"></a-image>
        <a-image src="back.png" width="4" height="4" rotation="0, 180, 0" position="0 -0.2 6"></a-image>
        <a-image src="left.png" width="4" height="4" rotation="0, 90, 0" position="-5 -0.2 0"></a-image>
      </a-entity>
    </a-scene>
  </body>
</html>
```
【WebVR】Aframeスカイボックス<a-sky>の回転



環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️iPhone7(IOS 12.3.1)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">🏖️WebVR👯‍♀️Aframe<br>360度全天球のテンプレートを作って🌸<br>png画像をアニメーション表示してみたよぉ🍬<br>ハンズオン勉強会資料に「おまけページ」追加してみた☺️<br><br>似顔絵メーカーCHARAT(キャラット)💕でオリジナルのキャラクターpng画像で作ってみた😍<a href="https://t.co/bdam5d9OX1">https://t.co/bdam5d9OX1</a> <a href="https://t.co/tVgAscRY9B">pic.twitter.com/tVgAscRY9B</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1223924629904883712?ref_src=twsrc%5Etfw">February 2, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Aframeのスカイボックス<a-sky>の回転をrotationプロパティで指定する事ができます。
<img width="378" alt="000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/812de123-6851-2e2d-a361-d073fb386d90.png">

下記のスカイボックスの図を使って説明します。
![template_color.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/419d0009-c3e8-6686-0b72-a5733ecf4e86.png)

rotationを指定しないまたは、「rotation="0 0 0"」の場合は緑が正面になります
<img width="640" alt="001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/9518b8b3-68c1-0c66-60e1-449353ec071e.png">

<img width="1044" alt="002.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/1dad88ff-8b10-5a18-4ef9-a43ebfad6b1d.png">

<img width="388" alt="スクリーンショット 2020-02-02 15.04.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/e1f69ac8-88ce-67a1-5048-6fc39e470b4a.png">

「rotation="0 -90 0"」の場合は紫が正面になります。
<img width="703" alt="スクリーンショット 2020-02-02 14.50.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/0f5e1e19-48d1-c927-453c-77d1e485621c.png">

<img width="1051" alt="003.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/61625481-38c7-b2a6-710c-7446b5b1b03f.png">


<img width="402" alt="005.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/b4bddd1e-65cd-317d-e85a-5cec47729458.png">
「rotation="-90 0 0"」の場合は真上が正面になります。


<img width="702" alt="006.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/c1f43893-7b9e-54f7-4a70-9433d05b1b10.png">

<img width="1063" alt="007.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/8aa17391-2a30-7930-6807-0e1152944c59.png">
チラ裏PYNQ 1.Ｌチカ*

## あらすじ
とりあえずセットアップまでやりました
その後とりあえずの目標のＬチカをすべく公式の文書を読み進めていたのですが

**全然わからん**

オーバーレイがうんたらかんたら言っていますが正直全く理解できなかった

というわけで分かりやすい文書を探したところ
この[PYNQ_Workshop](https://github.com/Xilinx/PYNQ_Workshop)なるものが分かりやすそうなきがしたので

これを進めることにしました

## ワークショップ開始

とりあえずgithubからWorkshopのデータを落として
エクスプローラで
`\\pynq`
を検索すればpynqのデータにアクセスできるので　
Workshopのデータを転送

あとはpdfとノートをよみすすめればＯＫ　

## Session1
session1 の大半はpythonやlinuxの話でPYNQ独自の話はないですね

がSession1の最後にはＬＥＤの操作があります、
目標達成と思いきや

あれ

これ

ＣＰＵから操作してるだけじゃん
これじゃあ、ラズパイいじっているのと変わらん

最後に問題があったのでとりあえず解きましたが
ただのpython の練習じゃん

Session1はお前らこのくらいは知っているよなというのを確認するためのモノでした
次のsessionに期待しましょう

```python:4_Programming_onboard_peripherals
from pynq.overlays.base import BaseOverlay
base = BaseOverlay("base.bit")
from pynq.lib import LED, Switch, Button

import time

# Set the number of Switches
MAX_LEDS =4
MAX_SWITCHES = 2
MAX_BUTTONS = 4

leds = [base.leds[index] for index in range(MAX_LEDS)]
switches = [base.switches[index] for index in range(MAX_SWITCHES)] 
buttons = [base.buttons[index] for index in range(MAX_BUTTONS)] 

led_ON = 0
led_addr = 0
led_mode = 0
toggle_speed = 1 

for i in range(1000):
    # ボタンを認識する
    if buttons[0].read():
        led_ON = led_ON ^ 1
        
    if buttons[1].read():
        if switches[0].read():
            if led_addr == 3:
                led_addr = 0
            else:
                led_addr += 1
        else:
            if led_addr == 0:
                led_addr = 3
            else:
                led_addr -= 1
            
    if buttons[2].read():
        led_mode = led_mode ^ 1
        
    if buttons[3].read():
        
        if toggle_speed == 4:
            toggle_speed = 1
        else:
            toggle_speed += 1
            
    # 指定したLED以外をOFF
    for j in range(MAX_LEDS) :
        if j != led_addr:
            leds[j].off()
            
    # モードに応じてLEDを操作
    if led_ON == 0:
        leds[led_addr].off()
    elif led_mode == 0:
        leds[led_addr].on()
    elif i%toggle_speed == 0:
        leds[led_addr].toggle()
        
    time.sleep(.1)
```
Accuracy/Recall/Precisionってややこしくない??

```
**2020/12/3更新**
コメントでも指摘いただいている通り、FPとFNを誤って記載しておりました。
関連箇所については修正をしました。
誤った情報を掲載してしまい、大変申し訳ございませんでした。
```


# はじめに
Accuracy/Recall/Precisionといった機械学習の評価指標がややこしいです。
参考書などを見ると、

||陽性|陰性|
|:--|:--|:--|
|陽性|TP|FN|
|陰性|FP|TN|

という感じの表(混同行列というらしい)が出てきて、いろいろ説明されていますが
陽性/陰性とかPositive/Negativeとか言われても、いまいちピント来きません！！！

ということでいろいろ調べていたら、以下のブログにとてもわかりやすく説明されていた。
https://towardsdatascience.com/data-science-performance-metrics-for-everyone-4d68f4859eef

備忘もかねて、この記事にまとめます！



# ケース

**ある医者が透析している患者が来週中に入院するか/しないかを予測する**

医者の予測結果をベン図にすると以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/fb39332a-a782-7d3a-3b02-5e0b340e897d.png)

- 入院すると予測
    - True Positives(TP)  :　本当に入院した　　　　　　=> 予測は正解
    - False Positives(FP) :  入院はしなかった　　　　　=> 予測は不正解
- 入院しないと予測
    - False Negatives(FN) :  入院した　 　　　　　　　 => 予測は不正解
    - True Negatives(TN)  :  本当に入院しなかった　　　=> 予測は正解


実際の入院率(Prevalance)は以下の通り表せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/41d1a2d4-fd0f-14d6-fb0a-98d834f8f658.png)

今回のユースケースにおける入院率は2%程とのことです。


それではこちらのユースケースを元に機械学習の性能指標について説明します。

# 機械学習における性能指標

# Accuracy(精度・正解率)

4つの中で最もよく使われる指標であり**どれだけ正確に予測できているか**を表します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/344e8573-5912-4e07-459e-5e1b31af1254.png)

(TP + TN ) / (TP + FP + TN + FN)

## Accuracyだとやぶ医者を見抜けない

もし予測した医者がやぶ医者で以下のように予測したらどうなるでしょうか？

「よくわからないので、誰も入院しないってことで!」

これだと実際に入院すると予測されるべき患者を一人も予測できてません。
しかしこの場合でもAccuracyは約98%という高い数値を示します。
(TP = 0 , TN ≒ 98)
つまりこのケースにおいて、Accuracyは適切な指標にならないことが言えます。

# Recall(再現性) = Sensitivity(感度)

Recallは実際に入院した患者を予測の時点でどれだけ当てることができたかという指標です。
つまり**どれだけ取りこぼしなく予測することができたか**を表します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/dd39d6d8-0511-55b9-17e8-eaf7a537a6b6.png)

TP / (TP + FN)

## Recallを用いるとやぶ医者を見抜ける

やぶ医者は一人も入院する患者を予測することができなかったため、Recallは0になります。(TP = 0)
そのため、このケースにおいてはRecallが適切な性能指標であることがわかります。

※Sensitivity(感度)と言う場合もあります。

# Specificity(特異性)

Recallの反対。入院しなかった患者を予測の時点でどれだけ当てることができたかという指標です。
こちらはあまり使わないですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/a0895dbc-7dba-f105-7352-9b28f806ee08.png)

# Precision(適合率)

Precisionは入院すると予測した患者のうち、本当に入院した患者の割合を表します。
つまり**入院すると予測したものがどれだけ正しかったか**を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/849582cb-3f33-9f67-291f-33ca8e092901.png)

TP / (TP + FP)


## Precisionは患者が知りたい指標

ある患者が医者から「あなたこのままだと来週から入院するぐらい病状が悪化しますよ、今のうちから入院しておくと大分マシになりますよ」と言われたとします。
そんなときに患者が知りたいのがPrecisionです。このPrecisionが高かければ医師の言ったことを正しそうだと判断できるし、低ければ医者が言ったことはあまり気にしなくてよさそうだと判断できるわけです。

# まとめ

|指標|何を表すか|
|:--|:--|
|Accuracy|どれだけ正確に予測できているか|
|Precision|陽性と予測したものがどれだけ正しかったか|
|Recall|どれだけ取りこぼしなく陽性の予測をすることができたか|
|Specificity|どれだけ取りこぼしなく陰性の予測をすることができたか|

なんとなくそれぞれの違いがイメージできたでしょうか?


特にRecallとPrecisionの違いがいまいちイメージしにくいと思います。
理解のポイントとして
　医者目線 => Recall
　患者目線 => Precision
というように視点によって何を求められるか考えると、イメージしやすくなるかと思います。

以上です～
Re:ゼロから始める競技プログラミング生活　第1章3『されど茶』

##学習報告
ABC154参加する気満々だったのに今週なかったorz
なので今回も過去問解いていきます!!

前回はB問題を解いて、次はいよいよC問題だったのですが思いの外難しく、ここ5日間ほどは数をこなそうとA-Cまでの問題をひたすら解いていました。

その途中で問題の難易度によって色が付いていることに気がつきました(遅い)。
ACもらえて喜んでいた問題も色を見れば灰()

つまり、今の自分の実力は灰色...

なら解いてやろう、茶の問題を!!!!

##茶に挑戦
というわけで、今回解いていく問題がこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570839/e21666ea-afc6-39fd-1d90-4111f570c288.png)

これが茶...指が動かない。
とりあえず出力例を見てみよう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570839/c2bdac47-2721-1c73-420d-04235d77610c.png)

なるほど!!この確率の式の数字を一旦適当な変数(出た目をi,コインを振る回数をj)に置き換えてみると、


    1/i*(0.5**j)

この式を繰り返し文に入れ、足し合わせていけば答えを求められますね!!

```python
N,K = map(int,input().split())
ans = 0
for i in range(1,N+1):
  j = 0
  point = i
  while point < K:
    point *= 2
    j += 1
  ans += (1/N)*(0.5**j)
print(ans)
```
これでACいただけました!!

記事ではあっさり書いていますが、これ解くのに1時間かかりました。
もっと考えついてコード書いていかないといけない...
あと、これ以上の難易度の問題を解くには二分探索とか動的計画法とかいろいろ知っておかないといけないみたいなので、それも学習していきます。頭パンクしそう()

ご拝読いただき、ありがとうございました。
次回の更新はABC154後くらいになりそうですがよければまた読んでください。
CentOSのベースイメージだけのポッドを作ってminikubeで動かしてみたら、ちょっとはまった

CentOSのベースイメージだけのポッドを作ってminikubeで動かしてみたら、ちょっとはまったので。


# Dockerfile作成
ベースイメージだけをDockerfileに記述します。

```Dockerfile:
# CentOS7 base image
FROM centos:7
```

# Dockerイメージの作成

```PowerShell:
PS > docker build -t prj-bash:1 -f ./prj-bash.df .
```

# Deploymentの作成
```yaml:prj-bash:yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prj-bash
spec:
  replicas: 1
  selector:
    matchLabels:
      run: prj-bash
  template:
    metadata:
      labels:
        run: prj-bash
    spec:
      containers:
        - name: prj-bash
          image: 'prj-bash:1'
          command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
```

```command```の部分が大事。これがないと、コンテナを起動したときに、「Warning BackOff kubelet, minikube Back-off restarting failed container」となる。且つ、ポッドの中に入れない。

なぜか？下記URLが参考となりました。
https://serverfault.com/questions/924243/back-off-restarting-failed-container-error-syncing-pod-in-minikube

https://stackoverflow.com/questions/31870222/how-can-i-keep-a-container-running-on-kubernetes

原因は、起動してすぐに終了してしまったため。なので、ポッドにも入れないです。
対処としては、ずーっと常駐して動いているものが有ればよいです。

当然と言えば当然かも。サービスをこれから公開するのだから、常駐しているプロセスが必要ということ。
そこで、yamlの```command```にずっと動き続けるプロセス(```tail -f /dev/null```)を入れてあげています。

# minikubeを起動

```PowerShell:
PS > minikube start
```

# dashboardを起動

```PowerShell:
PS > minikube dashboard
```

# containerを作成(起動)

```PowerShell:
PS > kubectl create -f prj-bash.yaml
```

# podの状態を確認

```PowerShell:
PS > kubectl get pods                                                                        NAME                       READY   STATUS    RESTARTS   AGE
prj-bash-68587f695-rtm6c   1/1     Running   0          65s
```

# podの中に入る

```PowerShell:
PS > kubectl exec -it prj-bash-68587f695-rtm6c /bin/bash
```

```bash:
[root@prj-bash-68587f695-rtm6c /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

[root@prj-bash-68587f695-rtm6c /]#
```

# Deploymentの削除

```PowerShell:
kubectl delete deployment prj-bash
```

# minikubeの停止

```PowerShell:
minikube stop
```
PodmanでRedis Commanderを起動してみる

# 環境

Fedora CoreOS 31.20200113.3.1
Podman 1.7.0
Podman Compose 0.1.5

# 準備

```
$ sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
$ sudo reboot
$ sudo rpm-ostree install python3 -r
$ sudo pip3 install podman-compose
$ mkdir -p ~/.local/bin
$ curl -o ~/.local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
$ chmod +x ~/.local/bin/podman-compose

$ mkdir -p dkwork/redis
cd dkwork/redis
vi docker-compose.yml
```

```docker-compose.yml
version: '3.7'
services:
  redis:
    # container_nameをredisにしたら
    # Error: name redis is in use: container already exists
    # のエラーになったので別名にしています。
    container_name: redis1
    image: redis:5.0.7
    ports:
      - 6379:6379

  redis-commander:
    container_name: redis-commander
    hostname: redis-commander
    image: rediscommander/redis-commander:redis-commander-210
    restart: always
    environment:
      - REDIS_HOSTS=local:redis:6379
    ports:
      - 8081:8081
```

# 実行

```
$ podman-compose up -d

$ podman ps

CONTAINER ID  IMAGE                                                         COMMAND               CREATED        STATUS            PORTS                   NAMES
05adabf75a3c  docker.io/rediscommander/redis-commander:redis-commander-210  /redis-commander/...  8 minutes ago  Up 8 minutes ago  0.0.0.0:6379->6379/tcp  redis-commander
21de78b8c8c3  docker.io/library/redis:5.0.7                                 bash -c mkdir -p ...  8 minutes ago  Up 8 minutes ago  0.0.0.0:6379->6379/tcp  redis1

$ podman images | grep redis

docker.io/library/redis                    5.0.7                 44d36d2c2374   15 hours ago    102 MB
docker.io/rediscommander/redis-commander   redis-commander-210   a88a50c04b16   11 months ago   109 MB
```
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208807/1c1acc16-c81b-e8bf-912a-418c80e6f31e.png)

#参考URL

[Podman](https://podman.io/)
[Podman Compose](https://github.com/containers/podman-compose)
WildFlyのWindowsサービスへの登録方法

tomcatのWindowsサービス登録は簡単だったけど、Wildflyはハマったので備忘録に。
ちなみに使用したWildflyのバージョンは、13.0.0final

#手順
%Wildfly_HOME%\docs\contrib\scripts配下に、各OSにサービスとして登録するモジュールがある。
Windows用は、serviceフォルダです。
![コメント 2020-02-02 190540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539265/3554c9bc-1d81-cb25-01f6-b90c5267c43c.png)

これを%Wildfly_HOME%\bin配下にコピーして、こんな感じにする。
serviceフォルダを丸々コピーして、service.batだけbinフォルダ直下に配置する。
![コメント 2020-02-02 190541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539265/d1ae6afc-758d-8889-52ae-5379a4cc0294.png)

あとは、コマンドプロンプトで、%Wildfly_HOME%\binを現在ディレクトリに、「.\service.bat install」を実行するだけ。
アンインストールや、サービス名を変更したいときは、「.\service.bat」のパラメータを適宜変更する。

パソコン起動時に自動起動したい時は、サービス画面で自動起動にする。
ADMINにいちいちログインして、サービスを手動起動するの面倒だからね←

#結果確認
再起動して、サービス画面を開いて結果を確認。
ちゃんと「Wildfly」が登録されていて、自動起動で「実行中」になっている。OK。
![コメント 2020-02-02 190158.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539265/24329535-bf09-73cb-f161-6b57b6b52480.png)
Laravelの基本的なArtisanコマンド

#はじめに
よく使うLaravelのartisanコマンドをまとめたいと思います。
DB作成する際にはSQL直書きするとコードの量が多くなる（SQL入力しにくい。。。）ので特にテーブル作成はartisanコマンドつかった方が楽になります。

#Artisanコマンド
基本的なArtisanコマンドについてまとめていきます。

・Artisanコマンドの一覧を見る

```php:
$php artisan list
```

・Artisanコマンドの一覧を見る

```php:
$php artisan migrate:status
```

・テーブルの作成
　table_name：作成したいテーブル名

```php:
$php artisan make:migration create_(table_name)_table
```

・マイグレーションの実行

```php:
$php artisan migrate
```

・ロールバック（マイグレーション取り消し）
　--step=1：数字は直近のマイグレーションファイルから戻したいファイル数

```php:
$php artisan migrate:rollback --step=1
```

・全てのマイグレーションファイルのリフレッシュ（取り消し）とマイグレーション実行

```php:
$php artisan migrate:refresh
```

#さいごに
上記のコマンドを覚えておけば基本的には困らないと思います。
困ったり忘れたりしたときは`$php artisan list`すれば分かるのでこのコマンドは必ず覚えておきましょう。
no lapack/blas resources found @ raspberry pi model b+

## 環境
Raspberry Pi model b+
Raspbian
Python 3.6

## 起こったこと
scipy を pip でインストールしようとしていたら、
`no lapack/blas resources found`
というエラーが出てきた。
これは、
`sudo apt install liblapack-dev`
を実行すれば問題ない
ECSのポートマッピング変更したらコンテナが立ち上がらなくなった話

# はじめに
AWSのECSを使用してアプリをデプロイした時になぜかコンテナが立ち上がらなくなったという問題に引っかかりました。
その時にトラブルシューティングをメモしておきます。
他の方の助けになれば嬉しいです。
初めてでない方はそんなの当たり前じゃんって話かと思います.

# かんたんにECSの概要
ECSはdockerコンテナをEC2またはFARGATEのどちらかで動かすものです。
開発環境でdockerを使っていれば、その開発時に作ったdockerイメージを利用してデプロイできるため、dockerを最大限に利用することができるメリットがあります。その他にもメリットはあると思いますが、とりあえずdockerで開発・運用することができるのが1つあるのかなと思います。
(自分がECSを使ってデプロイするのが、目的だったのでECSを選ぶまでの思考はありませんでした。。。。)
詳細な説明は他の方が書いてくださっている記事が多いのでググればすぐに出てきます！

# インフラ構成図
![ECSイメージ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289963/3c05ec4c-7c55-59b1-b7ce-b68721e95f5b.png)

上の図の赤枠で囲った部分がECSでデプロイした環境になります。
今回はEC2を2台にした構成を取っております。
このEC2の中にはコンテナが配置されているのですが、同じアプリケーションコンテナを各EC2インスタンスに2つずつ起動しています。
下の図のような感じです。
![ECSイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289963/d0e0504d-e24e-f068-ee83-9cd5114dfcf3.png)

# 本題のポートマッピング変更したらコンテナが立ち上がらなくなった
ECSを設定する時にタスクを定義するという作業があります。(docekrコンテナの起動する際の設定etc...)
その時に ポートマッピング という設定項目があります。
ホストコンピュータのEC２のポートとコンテナのポートをマッピングさせるという意味の項目です。
`ここで問題だったのが、ホストコンピュータのポート8080とコンテナの８０８０ポートを紐づけようとすると一つのコンテナにしか紐づけられないという問題でした。`
そこで。ホストコンピュータのポートをエフェメラルポート指定することで、各コンテナの8080ポートとマッピングすることができルため4つのコンテナに振り分けられるようになるはずでした。
が、、、なぜかエフェメラルポートを使用するとなぜかコンテナが起動しては2分後には落ちて、起動し直すという問題に。。。

※ エフェメラルポートとはTCP/IPプロトコルスタックが事前に定義されている範囲内から自動的に割り当てるポートである

# 解決
答えは、セキュリティグループでした。。。(自分の設定ミス)エフェメラルポートに設定したが、EC2インスタンス用のセキュリティグループのインバウンドで8080ポートのみを許容していたため、ELBのヘルスチェックが通らずunhealthyに状態だったため何度もコンテナが落ちては起動を繰り返していたということです。
(ケアレスミスでした。。。）

# 解決に時間がかかった
最初に、コンテナが落ちていたので、EC2のリソース(メモリやCPU)らへんを追っていました。CloudWatchのECSを見たが、リソースが使われすぎているということでもない。dockerイメージの内容に確認したりなど変更しても特に見つからず、時間がすぎていきました。
「ECS コンテナ 落ちる」とググったらAWSの公式の記事にまさに自分が困っている内容の記事が出てきました！
[Amazon ECS のタスクでコンテナが終了する問題をトラブルシューティングする方法を教えてください。
](https://aws.amazon.com/jp/premiumsupport/knowledge-center/ecs-tasks-container-exit-issues/)
qiitaの記事を読むのもいいですが、やはり最初は一次情報を見ることが大切だなと改めて思いました。
また、問題が起きている箇所だけではなくその周辺の設定を落ち着いて見ることも大切ですね。
Oculus Quest 開発備忘録

<h2>【準備】</h2>
・基本はGoと同じなのでOculus Go開発備忘録を参考にしてください。
 https://qiita.com/VulpeS404/items/d7107aa4bcb078b48d81
・OVR CameraRigのOVR ManagerのElement0をGo or GearからQuestに変更

<h2>【コントローラーの表示】</h2>
・Asset/Oculus/VR/Prefabsの中にあるOVRControllerPrefabを下図のように LeftControllerAnchorとRightControllerAnchor の下に配置
・Leftの方のOVRControllerPrefab -> OVR Controller Helper -> ControllerをL Tracked Remoteにする

<h2>参考</h2>
**Oculus Quest開発公式ドキュメント**
　https://developer.oculus.com/documentation/quest/latest/concepts/quest-intro
**Oculus Go開発からの変更点**
　https://developer.oculus.com/documentation/quest/latest/concepts/book-unity-gsg/
**Oculus Quest 開発参考Qiita**
  https://qiita.com/Ichitar0/items/42efd6d153bbd175de1c

※Oculus Go開発備忘録同様知人に教えるためのメモです。内容に関しては今後増やしていくか別記事を書きます。
RailsのXML Builder(Builder::XmlMarkup)で名前空間と属性を利用

Rails 4でソフトウェアテストのスタブを作成しているが、以下のようなXML表現を`Builder::XMLMarkup`でするのに手間取ったのでメモ。

```xml
<ns:ParameterList>
  <ns:StringParameter name="txnId">txnId(変数)</ns:StringParameter>
  <ns:ShortParameter name="txnStatus">txnStatus(変数)</ns:ShortParameter>
</ns:ParameterList>
```

書き方としては、以下のように`namespaceのprefix`、`コンテンツ`、`属性`の順番が書けばよい。属性は複数書いても有効だった。

```ruby
xml.ns :ParameterList do
  xml.ns :StringParameter, @txnId, :name=>"txnId"
  xml.ns :ShortParameter,  @txnStatus, :name=>"txnStatus" 
end
```
OOP入門#2 モジュール性の基準

[「オブジェクト指向入門」](http://www.amazon.co.jp/dp/4756100503)（第１版）Bertrand Meyer著 の読書記録です。[前回はこちら。](https://qiita.com/shuetsu@github/items/2f5107efd67c7dbdaf93)

# 2　モジュール性

いいプログラムを書くには「モジュール性を高めなければ」と人は言う。だが「モジュール性が高い」とはどういうことだ？

どんな設計（手法）ならばモジュール性を高くできるのか？それを評価するための基準というものを挙げてみよう。

## 2.1.1 モジュールの分解しやすさ

複雑で巨大な1つの問題を、単純で小さな複数の問題の組み合わせとして定義し直すことができれば、その問題を理解することが容易になる。
当然プログラムの実装も容易になるし、テストも容易、複数人で開発する場合に作業分担する上でも有効となる。

例えばトップダウン設計によってモジュールを分解することができる。最上位にいるシステムの利用者は、それは実社会での役に立つのだろうかという抽象的な目でシステムを捉える。どうやって実現されるかは関心の外だ。その下で、システムを構成する各モジュールも同じように与えられた仕事をさらに下位のモジュールへ分解していく。これによって誰も（利用者もモジュールも）が、自ら責任を引き受けるべき仕事にのみ集中できるようになる。

モジュール同士の依存性が大きくなるような設計手法を採用していると、この基準は満たせなくなる。例えば、あらゆる初期化処理を特定のモジュールで行なっていた場合、そのモジュールはプログラムの全体と依存することになり「これを直すのがどれだけ難しいか、私には判断できないよ」という状況が発生しやすくなる。

## 2.1.2 モジュールの組み合わせやすさ

あるモジュールができるだけ多くの局面で利用できればうれしい。

例えば数学ライブラリは様々な場合に利用できる。Unix系OSのシェルで動作するプログラムは、標準出力などを介して他のプログラムと組み合わせて利用可能になっている。

他の例を自分なりに考えてみると・・・

- たいていの言語に用意されているソート機能は、要素同士の比較を行う手続きを引数として受け取れる。これで、これまでになかった画期的なオブジェクトをあなたが発明した場合でも、比較の仕方さえ定義されていれば既存のソートライブラリでソート可能となる。
- データを読み込んで何らかの処理をする関数を作ろうといった場合、引数にファイルパスを受け取るようにしてしまったらその関数はファイルに対してしか使えない。ストリームを受け取るようにすれば、ファイルでもメモリ内のデータでも、どんなデータに対しても使える。
- 連想配列とかハッシュとかディクショナリとか呼ばれる（任意のキーから値を参照できる）ライブラリは、equalsやhashcodeが適切に定義されてさえいればどんなオブジェクトでもキーとして利用できる。

## 2.1.3 モジュールのわかりやすさ

モジュールを１つだけ取り出して、それを人が見たときにわかりやすいかどうか？

保守のコストを低減するためにも、わかりやすい方がいいに決まっている。しかしどうすればわかりやすくなるだろう？
ここでも出てくるのは他のモジュールとの依存性を小さくすべき、という原則だ。依存性が小さければ、そのモジュールだけをみて理解するといったことが容易になる。

例えばグローバル変数を使うことでモジュールはわかりにくくなることが多い。その変数はどこか別のモジュールで変更されるかもしれない。または別のモジュールで初期化をしてもらわないと、そのモジュールは正しく動作しないかもしれない。いずれにしても、そのモジュールについて理解するためには、他のモジュールについても知っておかなければいけなくなる。

## 2.1.4 モジュールの連続性

あるモジュールを変更した場合、その影響が他のモジュールに及ばないことを連続性という。

例えば、実装とインターフェースを分けることがこれにあたる。あるプロパティはメンバ変数として定義されていたのでそのgetメソッドは単にその変数値を返すだけだった・・・が、あるときそれは実行時に計算しないと出すことのできない値ということになってしまった。
そんな場合でも、そのモジュールを常にgetメソッド越しに利用しているならば、その実装が変更されたとしても外部のモジュールは修正して回らなくてすむ。実装が変更されたことに気づく必要すらない。

## 2.1.5 モジュールの保護性

あるモジュールの中で異常が発生した場合の影響を限定できるかどうか。「ここでエラーになったらその影響が及ぶのはここまで」ということを定義できるか。

異常が発生した場合に気を遣わなければいけないのは、「中途半端に壊れた状態のまま物事が進んでしまうのを避ける」ということだ。DBMSの世界で必ず学ぶトランザクションを考えればいい。ある処理は成功するか失敗するかの2通りの結果のいずれかのみを生じるようにし、失敗したなら処理を試みる前の状態に戻すべきだ。
それを怠ると、どこか思いも寄らない場所でまた別の異常を発生させてしまう可能性を残すことになり、影響範囲の限定が不可能となってしまう。
【初心者向け】Atomで.gitignoreファイルなどの隠しファイルを編集できるようにする方法

## 結論：画面左上Atom→Preference→Packages→「Treeview」と検索→Hide VCS Ignored  Filesのチェックを外す。


.から始まる隠しファイルの編集方法を紹介している記事がなかなか見つからなかったので書きます。

gitの管理下に置きたくないファイルがあったので.gitignoreファイルを編集したいと思いました。
ターミナルからの編集だと前に何を書いた覚えていないので直で編集した方が安心です。



## 作業順序

Preferenceをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568461/41de8174-dbee-e8e0-efb7-e3b3b7e28b29.png)


「Treeview」と検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568461/a7769140-6c9c-2759-3130-232371375351.png)


Hide VCS Ignored  Filesのチェックを外す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568461/b7922de8-d3d8-1c5f-7102-ea9aa707807a.png)

AtomのTreeviewに.で始まるファイルが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568461/cf94da93-2a06-49d6-22ed-6c20a62df5c9.png)

簡単ですね。