OmniAICreator/Qiita-1.07M huggingface dataset:
3.4(難) 超幾何分布と二項分布の関係(方針でスターリングの公式を解説)

## 方針
 
超幾何分布の密度関数を階乗表現を使って書き下すと，

```math
\begin{align}
f_X(x)&= \frac{{}_MC_x\times{}_{N-M}C_{n-x}}{{}_{N}C_n}\\
&= \frac{M!}{x!(M-x)!}\times\frac{(N-M)!}{(n-x)!(N-M-n+x)!}\times\frac{n!(N-n)!}{N!}
\end{align}
```

となる．これを頑張って変形して，


```math
f_X(x)={}_nC_xp^x(1-p)^{n-x},\ \ \ (\frac{M}{N}\rightarrow p)
```

に持っていく，という問題．実数の階乗は，実数が十分に大ならばスターリングの公式を用いた近似を行うことができる．

### スターリングの公式

---

実数kが十分大きい時，

```math
k!\approx\sqrt{2\pi}k^{k+\frac{1}{2}}\exp(-k)
```
---

## 答案

```math
\begin{align}
f_X(x)&= \frac{{}_MC_x\times{}_{N-M}C_{n-x}}{{}_{N}C_n}\\
&= \frac{M!}{x!(M-x)!}\times\frac{(N-M)!}{(n-x)!(N-M-n+x)!}\times\frac{n!(N-n)!}{N!}\\
&= \frac{n!}{x!(n-x)!}\frac{M!(N-M)!(N-n)!}{(M-x)!(N-M-n+x)!N!}\\
&\approx {}_nC_x\frac{(Np)!(N-Np)!(N-n)!}{(Np-x)!(N-Np-n+x)!N!}\tag{1}\\
&\ \ \ \ \ \ (\because M\approx Np) 
\end{align}
```

今，N→∞より，(1)式の分数部分にスターリングの公式を適用すると，指数部分などが消去でき，


今，N→∞より，(1)式の分数部分にスターリングの公式を適用すると，

```math
\frac{(Np)^{Np+\frac{1}{2}}(N-Np)^{N-Np+\frac{1}{2}}(N-n)^{N-n+\frac{1}{2}}}{(Np-x)^{Np-x+\frac{1}{2}}(N-Np-n+x)^{N-Np-n+x+\frac{1}{2}}N^{N+\frac{1}{2}}}\tag{2}
```


べき乗の数が分母分子で等しいので，分母分子をNで割ることは各要素の中身をNで割ることに等しい．よって，


```math
\begin{align}
(2)&= \frac{(p)^{Np+\frac{1}{2}}(1-p)^{N-Np+\frac{1}{2}}(1-\frac{n}{N})^{N-n+\frac{1}{2}}}{(p-\frac{x}{N})^{Np-x+\frac{1}{2}}(1-p-\frac{n}{N}+\frac{x}{N})^{N-Np-n+x+\frac{1}{2}}1^{N+\frac{1}{2}}}\\
&\approx p^{Np+\frac{1}{2}-Np+x-\frac{1}{2}}(1-p)^{N-Np+\frac{1}{2}-N+Np+n-x-\frac{1}{2}}\ \ \ \ (\because N\rightarrow\infty)\\
&= p^x(1-p)^{n-x}\\
\therefore (1)&\approx {}_nC_xp^x(1-p)^{n-x}
\end{align}
```

## 参考文献

- 『[現代数理統計学の基礎](https://www.kyoritsu-pub.co.jp/bookdetail/9784320111660)』(久保川達也　著)
Reactとaxiosで.envを用いて環境変数を利用する方法

ReactでAPI通信を行う際に、エンドポイントやAPIキーを環境変数に格納する必要がありますが、その方法で30分くらいググったのでメモ。。。
初心者の方や、しばらく触ってなくて忘れてしまった方の参考になれば幸いです。

ちなみにReactの環境構築はcreate-react-app、API通信はaxiosで行う想定としています。
ぱっと試す環境を作りたい方は以下コピペでどうぞ。

```
npx create-react-app sample-app
cd sample-app
yarn add axios
yarn start
```

## Reactで環境変数を使用する際の重要ポイント

Reactで環境変数を使用する際は、以下の3つのポイントに注意する必要があります。

- envファイルはルート直下に配置する
- 環境変数を使用する際は「process.env.REACT_APP_」を接頭辞に使う
- 変更を反映する際はサーバーを再起動

### envファイルはルート直下に配置する

envファイルは、プロジェクトのルート直下に配置する必要があります。
create-react-appでReactアプリを作成すると、初期状態でルート直下に以下のようなディレクトリ、ファイルが作成されているはずです。

```
public/ ←この下にindex.htmlなど
src/ ←この下にindex.jsなど
.gitignore
README.md
package.json
yarn.lock

※すみません、tree出力するのめんどくさかったのでこのような表記になりました...
```

重要な事は、
'envファイルは.gitignoreやREADMEなどと同じレベルの階層に設置する必要がある'
という事です。
src/の下などに配置しないようにしましょう。

### 環境変数を使用する際は「process.env.REACT_APP_」を接頭辞に使う

環境変数を実際に呼び出す際は、環境変数の頭に「process.env.REACT_APP_」をつける必要があります。

以下のような感じです。

```
// これは.envファイル

REACT_APP_API_URL=https://hogehogehogehoge
REACT_APP_API_KEY=******-********-********
```

```hoge.js
// これは環境変数を用いたいコンポーネントのjsファイル

import axios from "axios";

const options = {
  method: 'GET',
  url: process.env.REACT_APP_API_URL,
  headers: {
    'api-key': process.env.REACT_APP_API_KEY,
    'api-host': process.env.REACT_APP_API_HOST
  }
};
```

環境変数は '' や "" で囲む必要はないです。

### おしまい

おそらくこれでいけるんじゃないかと。
気になったところとかあればコメントいただけると幸いです。
Windows TerminalのLinux設定

# WSL2のWindows Terminalにおける、Linuxの設定
デフォルトではLinuxは入っていないので、新規セットアップするたびにあちこちググって設定項目を見つけて設定を記述していたのが面倒くさくなったので、Qiitaに記事化しておきます。

```JSON
            {
                "cursorShape": "filledBox",
                "fontFace": "Source Code Pro",
                "fontSize": 11,
                "fontWeight": "extra-light",
                "guid": "{インストールしたLinuxのGUID}",
                "hidden": false,
                "name": "インストールしたLinuxの名前",
                "scrollbarState": "hidden",
                "source": "Windows.Terminal.Wsl",
                "startingDirectory": "//wsl$/Ubuntu-20.04/home/[アカウント名]"
            },
```

最低限、これだけ設定しておけば、普段使いのLinuxと同じ設定に出来るのはないかと思います。
kaminariとoffset_value

`gem kaminari`の連番表示に悩まされた備忘録です。

## 状況背景
- チーム開発の課題でページネーションを実装
- 表示していたアイテムに連番を表示させる
- 12件/ページ が実装条件
- アイテムの表示にはコレクションレンダリングを使用
- 次のページに行くと連番が1に戻ってしまう
- `kaminari`導入前は連番は`_counter変数`で表示していた
- `offset_value`を使い連番表示するのが実装条件

## 結論
ページネーションで連番を表示するには下記で解決できた

```
_counter変数 + xx.offset_value + 1
```

## 解決までの道のり
今回のハマりポイントは
1. offset_valueについて調べても情報が少ない
2. `offset_value`ずっと0なんだけど
3. 2ページ目にすると今度は12で固定なんだけど
4. そもそも`offset`って何？ 
5. あ、わかったかも？
という感じで順を追っていきます。

## offset_valueの情報が少ない
大体どんな機能があるのかと思ってGoogle先生`rails offset_value`で質問してみたけど `offset_value`自体が`kaminari`の独自？のものだと知らなかったので、見つけるのは`kaminari`の基本的な使い方に関する物が多く`offset_value`について詳しい記事は見当たらなかった。(今思うと納得)

## offset_value ずっと 0 問題
とりあえず情報が無いならとりあえず動かして見れば良い
という事でビューに`xx.offset_value`を入れてみる
表示されるのは「0」
イメージでは「1~12」とか羅列されるのかと思ってたので思考が5秒止まった。
「え、何これ、どうしろと？」

## 2ページ目は12で固定問題
「まぁ0はわかった。じゃあ2ページ目はどうなるの？」
今度は12のまま変化なし。
ビューに`binding.pry`入れても数値確認しても変わらないし
「あーもう無理だ分からん。詰んだ。」と同時に1つ疑問を残していた事に気付く。


## 「そもそもoffsetってなに？」問題
普通に「あーoffsetねー」みたいにしてたけど、「ってかoffsetってなによ？」だったのでこちらで調べる。([「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word11923.html))
こちらによると「offset」とは
> 基準点からの距離で位置を表現したものが「オフセット」です。
> 
> ポイントは
> 
>・位置を表現している
>
>・基準点がどこかにある
>
>・距離（基準点からどれくらいズレているか）で表現している
>
> の3つでしょうかね。
> 
> 「オフセット」って単語が出てきたら「基準点からの距離で表した位置なんだな～」と、お考えください。

なるほど、なんとなくわかった気がする。


## あ、わかったかも？
そもそもの間違いとして`offset_value`だけで解決できると思っていたのが間違いだった。
`binding.pry`でみていた時に`offset_value`が一定の値で固定されるが`_counter変数`はレンダリングされた回数を表示するので増えて行った
この二つの要素を使えばいけるのでは？と思い上記の結論部分に辿り着き、無事実装完了しPR作成に至るのでした。


## 参考資料
[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word11923.html)
Railsで架空のCafeのHPを作ってみよう!【11日目】『deviseのログイン画面でエラーメッセージを表示』編

#概要
基本Railsの記法に則り書いていきます！
１から全ての説明ではなく
その中であれ？どうやるの？と
疑問に思った点や実装に困った箇所を
ピックアップして紹介していきます♩

#設定と準備
・Rails
・HTML
・CSS
・Javascript(jQuery)

↑上記の言語とフレームワークを使い
架空(自分で考えたテキトーなもの)のCafeの
HPを作っていこうと思います！

#11日目の作業内容:round_pushpin:
・ビューの作成(deviseのデフォルト画面をレイアウト)

#11日目の気になった箇所:zap:
deviseのsign up画面ではエラーメッセージが表示されるのに
sign in画面ではエラーメッセージが表示されない。

#仮説:pushpin:
deviseにはデフォルトでエラーメッセージを表示させるための
shared/_error_messages.html.erbというファイルが存在するため、
renderでそのファイルを呼び出せば表示できるのではないか。

sign up画面の場合

```registrations/new.html.erb
<%= render "/shared/error_messages" %>
```
と記述することでエラーメッセージの表示に成功できたので
同じようにようにsign in画面でも

```sessions/new.html.erb
<%= render "/shared/error_messages" %>
```
とすれば表示されるのではないかと思ったが表示されなかった。

#結論:star:
sign in画面では違う記述の仕方でなければ
エラーメッセージの表示ができないことがわかった。

```sessions/new.html.erb
<%= flash[:notice] %>
<%= flash[:alert] %>
```

上記の記述をエラーメッセージを表示させたい箇所に追加することで
可能となる。
flashとはRailsでようされているオブジェクトのことらしい。
一時的にメッセージを表示してくれる機能のようなものらしいです。
これでエラーメッセージの表示には成功！

補足になりますがdevise.ja.ymlを導入し
日本語でエラーメッセージを表示させる方法をとられている方は

```devise.ja.yml
ja:
  devise:
    failure:
      not_found_in_database: "%{authentication_keys}またはパスワードが違います。"
```
こちらの箇所を変更するとsign in画面でのエラーメッセージ内容を変更できるので
お試しください！
yukicoder contest 306 参戦記

# yukicoder contest 306 参戦記

## [A 1622 三角形の面積](https://yukicoder.me/problems/no/1622)

答えは当然、円に内接する正三角形の面積. ググれば公式がでてくるかもしれないが、2次元なので答えは半径の二乗に比例するので、サンプルを見れば定数が分かる.

```python
t = int(input())
for _ in range(t):
    r = int(input())
    print(1.299038105676657 * r * r)
```

## [B 1623 三角形の制作](https://yukicoder.me/problems/no/1623)

n は大きくて2重ループは無理だが、r<sub>i</sub>,g<sub>i</sub>,b<sub>i</sub> の値域は2重ループできる程度には小さいのがポイント. OK な条件は r<sub>i</sub>≧g<sub>j</sub> かつ r<sub>i</sub>≧b<sub>k</sub> かつ r<sub>i</sub>＜g<sub>j</sub>+b<sub>k</sub>. ｒの小さい順に処理しながら順次有効なg, bを投入していけば良い. 条件に合う個数を単純に集計すると遅くて仕方がないので、BIT で高速化した.

```python
class BinaryIndexedTree:
    def __init__(self, size):
        self._data = [0] * size

    def add(self, i, x):
        data = self._data
        i += 1
        n = len(data)
        while i <= n:
            data[i - 1] += x
            i += i & -i

    def _sum(self, stop):
        data = self._data
        result = 0
        i = stop
        while i > 0:
            result += data[i - 1]
            i -= i & -i
        return result

    def range_sum(self, start, stop):
        return self._sum(stop) - self._sum(start)


n = int(input())
r = list(map(int, input().split()))
g = list(map(int, input().split()))
b = list(map(int, input().split()))

rr = [0] * 3001
for i in r:
    rr[i] += 1

gg = [0] * 3001
for i in g:
    gg[i] += 1

bb = [0] * 3001
for i in b:
    bb[i] += 1

gb = [[] for _ in range(3001)]
for i in range(1, 3001):
    x = gg[i]
    if x == 0:
        continue
    for j in range(1, 3001):
        y = bb[j]
        if y == 0:
            continue
        gb[max(i, j)].append((i << 12) + j)

bit = BinaryIndexedTree(6001)
result = 0
for i in range(1, 3001):
    for v in gb[i]:
        x = v >> 12
        y = v & 4095
        bit.add(x + y, gg[x] * bb[y])
    result += rr[i] * bit.range_sum(i + 1, 6001)
print(result)
```

g<sub>j</sub> と b<sub>k</sub> から r<sub>i</sub> の値域を考えるほうが簡単だった. 累積和しておけば個数は *O*(1) で求まるし.

```python
from itertools import accumulate

n = int(input())
r = list(map(int, input().split()))
g = list(map(int, input().split()))
b = list(map(int, input().split()))

rr = [0] * 3001
for i in r:
    rr[i] += 1

gg = [0] * 3001
for i in g:
    gg[i] += 1

bb = [0] * 3001
for i in b:
    bb[i] += 1

a = list(accumulate(rr))

result = 0
for i in range(1, 3001):
    x = gg[i]
    if x == 0:
        continue
    for j in range(1, 3001):
        y = bb[j]
        if y == 0:
            continue
        result += (a[min(i + j - 1, 3000)] - a[max(i, j) - 1]) * (x * y)
print(result)
```
【初投稿】streamlitで求人掲載件数の可視化アプリを作ってみた。

# まずは自己紹介
求人広告の代理店の営業として新卒から10年ほど同じ会社で働いています。３年程前から少しずつプログラミングなどを独学で行っています。最初はエクセルのマクロから始まり、RPA（uwsc,Uipath）、プログラミング（html,css,javascript,PHP,pythonなど）と少しずつ学ぶことの幅を広げていっています。
お仕事は営業なので直接的にお仕事でプログラミングを使うことはあまりありません。たまにエクセルで業務効率化のツールを作成したり、RPAを使って競合調査を自動的に行ったりと業務に活かしていることもあります。
今後はWEBアプリなどを作成して公開していく予定です。
（自己紹介だけの投稿はダメなんですね。知りませんでした。なので、現在進めているstreamlitの内容も書き足してみたいと思います。）

# 今作っているもの
pythonのstreamlitを用いて求人掲載件数の可視化アプリを作成中です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562327/0939aadf-301c-47c3-efb0-24e1816439b9.png)

streamlitはすごく使いやすくて優秀です。例えば、サイドバーの機能も下記のような少ないコードで簡単に実装できます。

```python:main.py
st.sidebar.write("""
掲載件数の知りたい日付を指定してください。
""")
from_day = st.sidebar.date_input('いつから?',
                            min_value=date(2020, 4, 1),
                            max_value=date.today(),
                            value=date(2020, 4, 1),
                            )

to_day = st.sidebar.date_input('いつまで?',
                            min_value=date(2020, 4, 1),
                            max_value=date.today(),
                            value=date.today(),
                            )

selected_pref = st.sidebar.selectbox(
    '掲載件数の知りたい都道府県を指定してください。',
     ('北海道',
　　　　　　　　　　　　　　　　:
    '沖縄県'))
```

完成したらherokuでデプロイする予定なのでまた記事にしていければと思います。
Python エクセルが読めない print “EXTERNSHEET(b7-):” pandas エラー対応の例

## pythonで急にエクセルが読めなくなった

「Python による経済・経営分析のための実践的データサイエンス」第５章 (pp.136-160) サンプル

```python
import pandas as pd
input_book = pd.ExcelFile('AB_NYC_2019_2.xlsx')
```

こんなエラー

```
  File "/path to/python3.9/site-packages/xlrd/__init__.py", line 1187
    print "EXTERNSHEET(b7-):"
                            ^
SyntaxError: invalid syntax
```

とりあえずアップグレード

```
% pip install --upgrade xlrd 
```

今度はこんなエラー

```
  168     # files that xlrd can parse don't start with the expected signature.
    169     if file_format and file_format != 'xls':
--> 170         raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
    171 
    172     bk = open_workbook_xls(

XLRDError: Excel xlsx file; not supported

```

openpyxl で対応
入ってなかったらインストール

```
% pip install openpyxl
```

コードをこんなふうに変更する

```python
import pandas as pd
input_book = pd.ExcelFile('AB_NYC_2019_2.xlsx', engine='openpyxl')
```

できた！

![スクリーンショット 2021-07-24 12.53.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266239/2064715a-72dd-58b8-4ba9-46395d5babaa.png)
GCP の Cloud Dataproc と Cloud Dataflow

いずれもビッグデータのパイプライン構築のために使用される。

- Dataprocは、データサイズがあらかじめわかっている時や、cluster sizeを自分で設定したい時に有用。
- Dataflowは、データサイズやrateが未知の場合(`<-GCPがうまいこと調節してくれるから`)や、データがリアルタイムに発生する場合に有用。


# Cloud Dataproc

- managed way to run Hadoop
    - HadoopとはMapReduceを使用したビッグデータの処理フレームワーク
    - Hadoopと呼ばれると、一般的に以下の総称を指す。全てOSS。
        - Apache Hadoop (そのもの。以下は関連プロジェクト)
        - Apache Spark  (Spark SQLを利用してビッグデータの分析ができる)
        - Apache Pig
        - Apache Hive (BigtableのOSS版)
- Hadoop clusterにリクエストを投げるだけで実行が可能
    - 平均90秒でclusterが作られる
- jobの負荷に応じて、clustersをscale up/downしてくれる
- Stack driverで監視ができる
- 主に使用したリソース分が課金の大枠を占めることになる。(price rateは秒段位、課金時間は秒単位)
- バッチ処理に使用するGCEをpreemptible instanceにすることで、節約できる。
    - このやり方を使用するなら、jobが停止されたら再び実行されることを保障する必要がある。


# Cloud Dataflow


GCPのdoc([Apache Beam のプログラミング モデル](https://cloud.google.com/dataflow/docs/concepts/beam-programming-model))がわかりやすいので以下そのまま引用。

Apache Beam は、バッチとストリーミングの両方のデータの並列処理パイプラインを定義するオープンソースの統合モデルです。Apache Beam プログラミング モデルは、大規模なデータ処理の構造を単純化します。Apache Beam SDK の 1 つを使用して、パイプラインを定義するプログラムを構築します。次いで、Dataflow などの Apache Beam がサポートする分散処理バックエンドの 1 つがパイプラインを実行します。このモデルのおかげで、並列処理の物理的なオーケストレーションではなく、データ処理ジョブの論理的な構成に集中できます。つまり、ジョブの実行方法ではなく、ジョブの実行内容に焦点を絞ることができます。
Apache Beam モデルでは、有効な抽象化が提供されるため、分散処理の下層部分の細かい設定（個々のワーカーの調整やデータセットの分割などのタスク）をユーザーが扱う必要がなくなります。Dataflow ではこれらの下層レベルの細かい設定が完全に管理されます。

パイプラインの例は以下。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534442/e539e430-27cf-18f1-1dc2-581b4886388d.png)
In this example, Dataflow pipeline reads data from a BigQuery table (=the Source) processes it in a variety of ways (=the Transforms), and writes its output to a CloudStorage (=the Sink). 
Some of those transforms you see here are map operations and some are reduce operations.

---

話を戻す。Dataflowの用途は以下。

- ETL
- データ分析(リアルタイムも、バッチ処理も)
Stylusを使わずgoogleの検索結果に順位を表示させる

# はじめに
こんにちは。東京五輪のピクトグラムのパフォーマンスすごかったですねー！途中で`がーまるちょば`十八番のエスカレーターの動きがありましたね。本日ラジオで聞いたんですが、`がーまるちょば`も顔隠してどこかで出ていたそうです。きっとあのエスカレーターのくだりのとこ、`がーまるちょば`だと思います！ :smile: 

さて、今回はChromeの拡張機能の整理をしております。
理由は、以下の通りです。

1. ブラウザのバーが埋め尽くされてきてまして、非常に汚い... :sob:
1. 使いたい拡張機能を瞬時に見つけられない.. :sob:

# 不要な拡張機能はいねぇーかー？
なんだかんだ使えるんだよなぁ、みたいな拡張機能ってありますよね。
だから消せない..。

# あれ、Stylus消せそう :thinking: 
いまStylusは以下でのみ使用しております。

https://qiita.com/ryosuketter/items/53b2b211d096370377a6

これを、ほかの方法で実現できればこの拡張機能は不要になります。

# Stylusを使わず`ScriptAutoRunner`を使ってgoogleの検索結果に順位を表示させる
上記記事を`ScriptAutoRunner`の拡張機能に移植します。

ドメインフィルタには`www.google.com`を指定します。

スクリプトはこちら↓

```js
(() => {
  document.querySelector('body').insertAdjacentHTML('afterend', `
    <style>
      body {
        counter-reset: result !important;
      }
      h3.LC20lb:before {
          content: counter(result) ". " !important;
          counter-increment: result !important;
          display: inline-block;
          background: #fbe4c2;
          margin-right: 1em;
      }
    </style>
  `)
})();
```

スクリーンショットで見るこんな感じです。

![chrome-extension___gpgjofmpmjjopcogjgdldidobhmjmdbm_options.html (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86984/3110e393-f6a5-7244-ac9f-85f12db4c975.png)

# 実行結果
![scriptautorunner-Google-検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86984/deb6a5e3-f9b6-8878-ad36-f66c1d11c722.png)

# おわりに
これでStylusを削除できます :v:
それでは！
(C#) PDFを読み込んで、Stream内をすべて別ファイルに書き出す、サンプルソース


##(C#) PDFを読み込んで、
Stream内をすべて別ファイルに書き出す、サンプルソース

1) 引数で、PDFファイル名を渡す
2) PDFを、Byte列に、一度に読み込み
3) PDF内、Byte列を順次上から下までナメて、stream～endstreamの中身を、ファイルに書き出し。
4) "stream_out_" + 連番 + ".bin"

##実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107418/c4a3aea3-7b9d-362e-9450-66cd675dbce6.png)

##ソース

```c#:pdf_stream_out.cs
//c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe pdf_stream_out.cs

using System;
using System.IO;

class pdf_stream_out { //*1
	static void Main(string[] args) { //*2

	string p_fn = @"" + args[0];
	byte[] data = File.ReadAllBytes(p_fn);

	int strmCnt = 1;
	int ARCN = 2; //array_count

	string[] st = new string[ARCN];
	st[0] = ">stream";
	st[1] = "endstream";

	byte[][] d = new byte[ARCN][];
	for(int i=0; i<ARCN; ++i)
		d[i] = System.Text.Encoding.ASCII.GetBytes(st[i]);

	byte[][] dm = new byte[ARCN][];
	for(int i=0; i<ARCN; ++i)
		dm[i] = new byte[d[i].Length];

	int stream_stt = 0;
	int stream_size = 0;

	for(int i=0;i<data.Length-st[1].Length;i++){ //-st[1]は、一番長い配列

		for(int j=0; j<ARCN; ++j)
			Array.Copy(data,i,dm[j],0,d[j].Length);

		bool[] aEq = new bool[ARCN];
		for(int j=0; j<ARCN; ++j){
			aEq[j] = System.Linq.Enumerable.SequenceEqual(d[j], dm[j]); 
			if(aEq[j]){

				//">stream"
				if(j==0){
					stream_stt = (int)(i+(int)d[j].Length+2);
					Console.WriteLine("stream_start= " + stream_stt);
				}
				//"endstream"
				if(j==1){
					stream_size = (int)((int)i-3) - stream_stt +1;
					Console.WriteLine("stream_size= " + stream_size);

					byte[] data_out = new byte[stream_size];
					Array.Copy(data,stream_stt,data_out,0,stream_size);
					File.WriteAllBytes("stream_out_" +strmCnt+ ".bin", data_out);
					strmCnt++;

				}
				string tx = System.Text.Encoding.ASCII.GetString(dm[j]);
				Console.Write(i + "_" + tx + ":");
				Console.WriteLine("_");
			}
		}
	}

	} //*2
} //*1

```


##書き出し結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107418/c71da374-1f91-f40a-1325-9dd03a0c3f34.png)


##参考

(C#) PDFを読み込んで、埋め込まれた画像をJPGファイルとして書き出す（DCTDecodeのStream内をママ書き出しているだけなのでかなり雑）
https://qiita.com/santarou6/items/5f011e266929558ede34

C# JpgからPDFへ変換（１Jpgファイルを１ページとしたPDFファイルの作成）
https://qiita.com/santarou6/items/ff24500c13d05b12a940
BootstrapとBulmaの比較

#はじめに
BootstrapとBulmaは共にデザインテンプレートとして使われることが多いフレームワークです。BootstrapはCSS,JSを含み、BulmaはCSSのみのフレームワークとなります。私は両方使った経験があるので、その経験を基に使い所を説明します。

#簡単なメリデメ

##Bootstrap

###メリット
・使い方の情報量が多い。
・JSのテンプレートもあるので動きを簡単につくれる
・コンテンツが多いので、マニアックなデザインをつくろうってなったときに意外とみつかる
・細かなレスポンシブ対応ができる

###デメリット
・読み込み量が多くなるのでレスポンススピードを気にすると一工夫必要
・既視感があるサイトになりやすい
・全体に反映させてつくると、カスタマイズ性が低い

##Bulma

###メリット
・シンプルなドキュメンテーションなので実装しやすい
・cssのみなのでVueやらReactやらに組み込みやすい
・デザインがシンプルでカスタマイズ性が高い

###デメリット
・グローバルスコープなので、CDNで呼び出すとクラス名が被りやすい
・JSを別途つくって動きをつくる必要がある
・それほど軽量ではない（CSSのみのBootstrapとそんな変わらない）

#レスポンシブ対応について

BootstrapもBulmaもレスポンシブ対応するための機能は十分備わってます。グリッドシステムで実装していく点も同じなので変わらない印象です。Bulmaの方がクラス名が単純明快であるのでコードみたときにわかりやすいと個人的には思います。ただ、CDNの場合はクラス名が被るので気をつけてください。ローカルの場合はスコープ設ければ問題ないかと思います。

#デザインについて

Bootstrapは一番使われているフロントエンドフレームワークと言われてるように、既視感が高くなってしまうのが難点ですね。初心者が使う分には情報量を多く簡単に基盤をつくれるので良いのですが、型にはまったサイトになりがちなのでデザインこだわる場合はお勧めできません。
Bulmaに関しても同じことは言えるのですが、既視感はBootstrapと比較して下げられます。シンプルで丸みのある可愛いデザインがデフォルトです。

##Bootstrap

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547274/52c55204-ff8c-d9bf-9c7a-54af720a5e90.png)

##Bulma

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547274/8657d7c9-9b3e-764e-2cc0-2676ee917604.png)

#まとめ
BootstrapやBulmaの他にもskeltonなど多くのフロントエンドフレームワークがあるので、一度ドキュメンテーションを覗いてみて、もし用途にあったら導入してみるって感じで開発を進めていくのも良いのではないでしょうか。一からwebデザインを構築するのは時間やコストがかかりがちなので、こういったテンプレートを無料で用意していただいてるのは本当ありがたいことですね。オープンソースに感謝。
Power Automate Desktop を使ってみた（PDF結合）

# 概要
PowerAutomateDesktopを使用して、
あらかじめ用意しておいたPDFを結合する手順を説明します。

# 事前準備
PDF結合に先立ち、結合対象のファイルを用意する。

## 結合対象ファイル用意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/1fecfb8a-2f57-6586-cedd-4ddc46ed1eb9.png)

■01_1ページ目.pdf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/da36ef71-e704-83df-7b53-c0dad365c568.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/1aa32585-25ea-0dfd-7d30-2256e7f4b322.png)

■02_2ページ目.pdf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/6acd1c89-8182-03de-8f30-fcab1fb97e59.png)

## 実装
### ファイル取得
・「フォルダ」には結合対象のPDFが保存されている場所を指定してください。
・「詳細」の中にある項目について、今回は
　　・並び替え基準：名前
　　・降順：ON
　を指定しています。
　この指定によって出力順が変わるため適宜指定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/97fa7d36-99a7-b71a-5f85-fa8f47606522.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/95d6404d-c949-78d4-9fdc-10e9033e4df3.png)

### PDF結合
■PDFファイル
「ファイル取得」の処理で生成された変数を指定してください。

■統合されたPDFのパス
出力先のフォルダ、ファイル名を指定してください。

■ファイルが存在する場合
今回は「上書き」を指定しています。
上書をしない設定や、連番をつけることもできるので適宜指定してください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/514a2ee2-b040-13a1-f41a-33e86f3a821d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/20778e3e-dcd9-1af3-a2bc-2ea5abdf2f57.png)


### 実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/5eda5851-a0b0-5322-6dc8-687313fc0c79.png)

### 実行結果確認
出力ファイル「D:\PDF出力先\all.pdf」の内容が、
　　・01_1ページ目.pdf
　　・02_2ページ目.pdf
を結合した内容になっていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33640/5d3b2ad6-0252-f289-b73a-aa8f2b1aeff7.png)
【Ruby】.envファイルの導入について

### 1.背景
現在、RubyにてLINEBotを開発中です。
LINEBotのIDやトークンなど、「必要だけどセキュリティ上隠したい」データを格納する
dotenvを今回使用したので、備忘録としてまとめます。

### 2.環境
- mac.os バージョン10.15.6
- Ruby 2.7.3
- psql (PostgreSQL) 12.6

### 3.手順
#### ①gemの導入
Gemfile上に下記のコードを記述して`bundle`(または `bundle install`)を行う

```ruby
gem "dotenv"
```
#### ②.envファイルの作成
今回はBotのアカウント（チャネル）に必要な項目を追記しました。
※隠したいファイルなのでGitの管理から外すよう`.gitignore`を設定しましょう。

```ruby
LINE_CHANNEL_ID = "12345678"
LINE_CHANNEL_SECRET = "XXXXXXXXX"
LINE_CHANNEL_TOKEN = "XXXXXXXXX"
```
#### ③loadメソッドを記述する
.envを読み込ませたい場所(今回はapp.rbとしました)に追記します。
ENVという配列に格納されているので、`ENV['設定した項目']`で取り出すことができます。

```app.rb
Dotenv.load
# （例）LINE_CHANNEL_ID を取り出したい
puts ENV["LINE_CHANNEL_ID"] #→12345678
```
### 4.補足1(コンソール使用時)
今回の場合、Dotenv.loadで読み込んだ後に取り出すことができるので、例えばコンソール上で取り出した場合は`nil`（該当の項目は未設定ということ）が返ってきます。

```ruby
bot % irb
irb(main):001:0> ENV['LINE_CHANNEL_ID']
=> nil
```
### 5.補足2(隠しファイルに記述する方法)
その他にも、「~/.bash_profile」や「~/.bashrc」に記述する方法があります。
「~/.bash_profile」はログイン時のみ設定されるファイルで、「~/.bashrc」はbashを起動するたびに毎回設定されるファイルです。

シェルにbashを利用している場合、ホームディレクトリに`.bashrc`という隠し属性（ドット）ファイルがあります。vimをインストールしている場合、下記のコマンドで起動するので編集することで記述ができます。


```ターミナル.
$ vi ~/.bashrc
```
bashrcに記述します。
vimは`i`でインサートモードに切り替わり、書き込むことができます。
`esc`を押した後、`:wq`を入力すると、保存して終了できます。

```~/.bashrc
export LINE_CHANNEL_ID = "12345678"
```
設定内容をすぐ反映したい際は、下記のコードを実行します。

```ターミナル.
$ source ~/.bashrc
```

```app.rb
puts ENV['LINE_CHANNEL_ID'] #=> 12345678
```


### 6.参考
1.[dotenv でパスワードやトークンを隠す](https://obel.hatenablog.jp/entry/20171222/1513934443)
2.[.gitignore の書き方](https://qiita.com/inabe49/items/16ee3d9d1ce68daa9fff)
3.[Ruby + SinatraでLINE Botを作ろう ](https://www.mizucoffee.com/archives/1076)
4.[【Ruby】ENVオブジェクトで環境変数として設定した値を取得する方法](https://style.potepan.com/articles/27698.html#RubyENV)
5.[パスを追加したい～.bashrc編～](https://www.itmedia.co.jp/help/tips/linux/l0284.html)
6.[dotenv](https://github.com/bkeepers/dotenv/blob/master/README.md)

### 7.最後に
記事の感想や意見、ご指摘等あれば伝えていただけるとありがたいです。
読んでいただき、ありがとうございました。
AKS Release Note (2021-07-22) 日本語化

AKS (Azure Kubernetes Service) のリリースノートを日本語化してみました。

> [Release 2021-07-22](https://github.com/Azure/AKS/releases/tag/2021-07-22)

-----

本リリースの内容は、パブリッククラウドでは 2021/7/29、[ソブリンクラウド](https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/sovereign-clouds)では2021/8/3 に、全リージョンで有効になります。

# Announcements

* Azure Kubernetes Service (AKS) の Ubuntu 16.04 のイメージは公開を停止する方針。
* ユーザーからのフィードバックや Issues において、過去の Kubernetes バージョンへのパッチでユーザーに難しい対応が求められていた。このため、AKS チームはバージョン 1.18 のすべてのクラスターとノードプールのサポート範囲を限定的に拡大。公表されている非推奨日である 2021/6/30 以降、バージョン 1.18 のクラスターとノードプールに対する通常のサポート範囲外の拡張が認められる。この限定的な拡張の範囲は、「2021/6/30 から 2021/7/31」まで有効で、以下のものに限定されている。
  * バージョン 1.18 のノードプールでの新しいクラスターの作成
  * バージョン 1.18 のクラスターに対する CRUD 操作
  * Kubernetes に関連しないと考えられるプラットフォームの問題。これには Azure 上のネットワークやストレージ、ノードの動作等を含む。なお、Kubernetes に関するパッチ適用やトラブルシューティングに関するサポートリクエストは、サポートされるバージョンへのアップグレードをお願いしている。
* これまでの Pod Security Policy は 2021/6/30 をもって非推奨に。廃止については Kubernetes Upstream との整合性を高めるため、Kubernetes バージョン 1.21 から始まり、バージョン 1.25 で削除される。Kubernetes Upstream がマイルストーンに近づくにつれ、Kubernetes コミュニティは実行可能な代替案を文書化する作業を行う予定。

# Release Notes

## Features (新機能)

* Kubernetes 1.21.2 が利用可能に。

## Preview Features (プレビュー機能)

* Windows ノードプールを利用している場合、下記のどちらかの手段で Docker から Containerd を利用するようにイメージをアップグレードすること。なお、Kubernetes バージョンは 1.20.0 以上で、`UseCustomizedWindowsPreview` のフィーチャーフラグを Azure サブスクリプションで有効にしておくこと。Docker は Kubernetes 1.24 で完全に削除されることに注意。
  * 特定のノードプールについて、Containerd を利用するようにする : `az aks nodepool upgrade --cluster-name $CLUSTERNAME --name $NODEPOOLNAME --resource-group $RGNAME --kubernetes-version 1.21.1 --http-headers WindowsContainerRuntime=containerd`
  * クラスター全体をアップグレードする : `az aks upgrade --cluster-name $CLUSTERNAME --resource-group $RGNAME --kubernetes-version 1.21.1 --http-headers WindowsContainerRuntime=containerd`

## Behavioral Changes (動作変更)

* クラスターオートスケーラーは、[minimum count](https://docs.microsoft.com/ja-jp/azure/aks/cluster-autoscaler#create-an-aks-cluster-and-enable-the-cluster-autoscaler) を強制するようになりました。影響の出る一例として、スポットインスタンスノードに退避が発生した際や AKS API からの最小カウント値の変更などの際です。これまで、オートスケーラーは最小カウントを考慮はするものの、外部要因の影響を受けた場合にも強制することはまではありませんでした。

## Component Updates (コンポーネントの更新)

* AKS Ubuntu 18.04 のイメージは [AKSUbuntu-1804-2021.07.17](https://github.com/Azure/AKS/blob/2021-07-22/vhd-notes/aks-ubuntu/AKSUbuntu-1804/2021.07.17.txt) にアップデート。
* Windows のイメージは [2019-datacenter-core-smalldisk-17763.2061.210714](https://github.com/Azure/AKS/blob/2021-07-22/vhd-notes/AKSWindows/17763.2061.210714.txt) にアップデート。

-----

明らかにおかしい場所などありましたら、ご指摘いただけると嬉しいです！🙇‍♂️
Z3Py　例題　魔方陣（magic square）

# 問題
1から9の数字を 3×3 に配置し、各行・各列・各対角線の和がいずれも15になるようにせよ。（[魔方陣](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3)）

# 回答
```example03_magic_square.py
from z3 import *

X = [[Int("x_%s_%s" % (i, j)) for j in range(3)] for i in range(3)]

s = Solver()
s.add([And(1 <= X[i][j], X[i][j] <= 9) for i in range(3) for j in range(3)])
s.add([Distinct([X[i][j] for i in range(3) for j in range(3)])])
s.add([Sum([X[i][j] for i in range(3)]) == 15 for j in range(3)])
s.add([Sum([X[i][j] for j in range(3)]) == 15 for i in range(3)])
s.add([Sum([X[i][i] for i in range(3)]) == 15])
s.add([Sum([X[i][2-i] for i in range(3)]) == 15])

print(s.check())

m = s.model()
for i in range(3):
    row = []
    for j in range(3):
        row.append(m[X[i][j]])
    print(row)
```
出力

```terminal
sat
[6, 7, 2]
[1, 5, 9]
[8, 3, 4]
```


## 解説

`Distinct()`は、「入力した変数群は互いに異なる」という制約を生成します。
例）Distinct(x, y, z)　→　And(Not(x == y), Not(x == z), Not(y == z))
[Distinct()の詳細](http://z3prover.github.io/api/html/namespacez3py.html#a9eae89dd394c71948e36b5b01a7f3cd0)

# 他の例題
[Z3Py個人的ポータル](https://qiita.com/Ganesha/items/7a606ffc8a7c2504c143) へ
Amazon Elasticsearch Serviceでスナップショットを復元する方法

## はじめに
Amazon Elasticsearch Service 5.3以降では、基本的に1時間ごとに自動でスナップショットを作成し、最大で2週間分(336個)のスナップショットが作成されます。

今回は、インデックスをスナップショットから復元する手順を記述します。

## 手順
### 復元するスナップショットを特定する
最初に、復元するスナップショットを特定します。
以下のコマンドを実行することで、スナップショットの情報を取得出来ます。

`curl -XGET 'https://{ESエンドポイント}/_snapshot/cs-automated/_all?pretty'`<br>

```shell:terminal
$ curl -XGET 'https://{ESエンドポイント}/_snapshot/cs-automated/_all?pretty'
{
     "snapshot" : "2021-06-15t02-19-46.**********-*******-********",
     "uuid" : "***************",
     "version_id" : ******,
     "version" : "6.3.1",
     "indices" : [ "index-1", "**********", "**********", "**********", "**********", "**********", "**********",
     ...(省略)
 },
 ...(省略)
```

ここでは、snapshotに記述されている`2021-06-15t02-19-46.**********-*******-********`をメモしましょう。

> cs-autometedとは
ここにはスナップショットリポジトリ名を記述するが、自動スナップショットの場合はcs-automatedリポジトリに保存される。
スナップショットリポジトリの一覧を確認したいときは以下のコマンドを実行する。
`curl -XGET '{ESエンドポイント}/_snapshot?pretty'`


### 1つのインデックスを復元する
1つのインデックスを復元するには以下のコマンドを実行します。

`curl -XPOST 'https://{ESエンドポイント}/_snapshot/cs-automated/{先程メモしたスナップショット名}/_restore?pretty' -d '{"indices": "{インデックス名}"}'  -H 'Content-Type: application/json'`

以下に、index-1のインデックスを復元する例を示します。

```shell:terminal
$ curl -XPOST 'https://{ESエンドポイント}/_snapshot/cs-automated/2021-06-15t02-19-46.**********-*******-********/_restore?pretty' -d '{"indices": "index-1"}'  -H 'Content-Type: application/json'
{
  "accepted" : true
}
```

### 全てのインデックスを復元する
全てのインデックスを復元するには以下のコマンドを実行します。

`curl -XPOST 'https://{エンドポイント}/_snapshot/cs-automated/{スナップショット名}/_restore?pretty'`

```shell:terminal
$ curl -XPOST 'https://{esエンドポイント}/_snapshot/cs-automated/2021-06-15t02-19-46.**********-*******-********/_restore?pretty'
{
  "accepted" : true
} 
```
検索可能なドキュメントが増えていることを確認しましょう。

[![Image](https://gyazo.com/3723030152c662fd987fa7c0ce3a9770/thumb/1000)](https://gyazo.com/3723030152c662fd987fa7c0ce3a9770)<br>

ドキュメントが増えていることが確認出来ました。以上です。

## 参考
[Amazon Elasticsearch Service でのインデックスのスナップショットを作成する - Amazon Elasticsearch Service](https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-managedomains-snapshots.html#es-managedomains-snapshot-restore)
[Unity]Live Photosを作成する

# Unity の iOS 実機で Live Photos を作成する

* Unity の RenderTexture から Live Photos を作成する事ができました

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Unityからlive photosの保存できた！ <a href="https://t.co/2YUFStIUj2">pic.twitter.com/2YUFStIUj2</a></p>&mdash; ふじき (@fzkqi) <a href="https://twitter.com/fzkqi/status/1418488497795596290?ref_src=twsrc%5Etfw">July 23, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# リポジトリ
* リポジトリはこちら

https://github.com/fuziki/VideoCreator

# アセットの導入
* `Examples/UnityExample/Assets/Plugin/VideoCreator` をコピーしてプロジェクトに取り込みます

# Live Photos を作成する
* Live Photos の実体は mov と jpeg ファイルです
* それぞれ同一の Content Identifier を設定する必要があります
* そこで、mov の作成の時に、uuidを生成し渡します

```c#
string uuid = System.Guid.NewGuid().ToString();
string cachePath = "file://" + Application.temporaryCachePath + "/tmp.mov";
MediaCreator.InitAsMovWithAudio(cachePath, "h264", width, height, uuid);
```

* マイクロ秒で時刻を指定して、録画を開始します

```c#
long startTimeOffset = 0;
MediaCreator.Start(startTimeOffset);
```

* Texture を動画に書き込みます
* サンプルでは RenderTexture を利用しています

```c#
Texture texture = Get Texture;
long time = startTimeOffset + Elapsed time from Start;
MediaCreator.WriteVideo(texture, time);
```

* 書き込みを終了します
* Live Photos には時間制限があるので注意です

```c#
MediaCreator.FinishSync();
```

* mov が指定されたパスに保存されているので、サムネイルに使う texture と動画と同じ uuid を指定して Live Photos を保存します

```c#
MediaSaver.SaveLivePhotos(texture, uuid, cachePath);
```

# 終わりに
* Unity から見た時にシンプルなインタフェースで、Live Photos を作成させる事ができました
* Live Photos は時間の制限などありますが、iOS 固有の機能などで活用して行きたいです
Laravelを使ってキャンプ用のアプリを制作中（個人開発）

## テーマ
キャンプアプリ

### 目的
①PHP、Laravelの勉強
②個人開発をしてみたかった
③キャンプ好きなので役立つアプリが欲しい

#### 技術メモ
- Laravel独自書き方

```
// var_dump($posts);
// exit;
dd($posts);
```
- visual studio codeでターミナルを開く

```
command + J
```

- SailコマンドとはLaravelにはLaravel SailというのがあってそのSailコマンドを使えばDockerを実行させることができる
コントローラー作成

```
./vendor/bin/sail artisan make:controller <コントローラー名>
```
react-hook-form > メモ > key nameに連想配列を使った場合



### key nameにゼロ埋めされた数字を使うと、連想配列とならないので注意



react-hook-formでは以下のように、`.`（ドット）で区切ることで連想配列として扱ってくれる。

```
register('test.0.firstName');
register('test.0.lastName');
```

```
"test":[
  {
    "firstName":{"type":"required"},
    "lastName":{"type":"required"}
  }
 ]
```



ただし、以下のようにゼロ埋めされた数字を使うと、連想配列とならないので注意

```
register('test.01.a0');
register('test.01.a1');
```

```
{"test":[]}
```




[Get Started | React Hook Form - Simple React forms validation](https://react-hook-form.com/api/useform/register)

Ruleのとこに、以下のように書いてあるので、数字は使わない方が吉

> It can neither start with a number nor use number as key name.


### Code Sandbox

[key nameに連想配列を使った場合 \- CodeSandbox](https://codesandbox.io/s/key-namenilianxiangpeiliewoshitutachanghe-i4kfs)
Verilog HDL > インスタンス化の後にdefparamをする

### 動作環境

```
Ubuntu 20.04 LTS
IcarusVerilog v10.3
GTKWave v3.3.103
```

### Advanced Synthesis Cookbook

ALTERA(Intel)のCookbookを読んでいる中で未学習のdefparamに出くわした。

ternnary_nine_sum.vの中に下記の記述がある。

```arithmetic/ternnay_nine_sum.v
// output layer 3=> 1
tern_node o (.clk(clk),.a(part0),.b(part1),.c(part2),.o(out));
	defparam o .WIDTH = WIDTH+2;
```

### parameter, defparam関連の情報

- http://www.darwin.esys.tsukuba.ac.jp/home/ohyou/verilog/parameter
    - > parameter文で宣言された、下位モジュールのパラメータを上書きすることができます。上書きするには、defparam文を用います。
- https://ameblo.jp/middleisland88/entry-11424595927.html
    - > 例４）defparamとインスタンス名を使用して下位モジュールのパラメータを宣言も可能
- [defineでなくparameterを使う](http://zakii.la.coocan.jp/hdl/25_parameter.htm)
    - defineとparameterの比較について記載あり
- [Verilog/SystemVerilogのparameterの使い方](https://www.k0b0srecord.com/entry/2018/02/02/085250)


情報感謝です。


### 理解

ternnary_nine_sum.vの実装例ではインスタンス化した後にdefparamを呼んでいる。
oという名前でインスタンス化して、そのoのパラメータを変更するためにdefparamする、という流れのようだ。
【UiPath】謎のハッカー風操作をしてみる＃3（データダウンロード）

# はじめに

この投稿は、RPAツール「UiPath」での 実装例 について記事です。

UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 24日目の投稿でもあります。

企画の内容は [**こちら**](https://note.com/shumpei_w/n/n651cbdbec4e8) 。カレンダーのURLは [**こちら**](http://u0u1.net/sUwZ) です。

https://twitter.com/ShumpeiWatanabe/status/1405168150736359427


# 謎のハッカー風操作

前回に引き続き、よく映画で見る「ハッカーがやってそうな操作」をUiPathでしてみます。

それっぽく見えれば良いので、操作に意味はありません。

シリーズになっています。前回までの投稿はこちら。

https://qiita.com/miya_gis/items/a304d6d4600d63e98314

https://qiita.com/miya_gis/items/e78b03923954ff4920f1

操作のイメージは以下のような感じです。

<iframe width="560" height="315" src="https://www.youtube.com/embed/EeYmih4uDho?start=10" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


# 謎のデータダウンロード

なにかの情報を探しているように見せてみます。
今回はGoogleで、ウーバーのCMでおなじみの、あのタレントさんの画像を検索してみます。

データを取得しているように見せるため、途中で進捗状況を見せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/5a918441-db14-c52c-a691-3429ec7f0e44.png)

作成したフローはこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/4151e68f-07ef-d4f2-a246-dc549c3fd2e7.png)

実際に動かすと、以下のようになります。

https://twitter.com/miya_gis/status/1410035269953200129?s=20


# おわりに

いかがでしたでしょうか？
あまり役に立ちそうにないですが、UiPathではこんな 遊び方／見せ方もできます。

この記事が参考（？）になったら、LGTM をお願いします。
最後までご覧いただき、ありがとうございました。
【Python】for文を用いた要素の取り出しとカウント　enumerate関数

#リストからの要素の取り出し
 for文を使うことで簡単にリストから要素を取り出すことができる。PythonのFor文はイテラブルに対して繰り返しを行うことができるため、リストから要素を取り出すには以下のように書く。

```python
drink=["coffee","tea","milk"]
for x in drink:
    print(x)
```

```:実行結果
coffee
tea
milk
```

このようにイテラブルから要素を一個ずつ取り出すようなfor文をforeach文という。

#要素の取り出しとカウント
　要素を取り出すと同時に何番目に要素を取り出したかをカウントしてみる。

```python
i=1
drink=["coffee","tea","milk"]
for x in drink:
    print(i,x)
    i+=1 
```

```:実行結果
1 coffee
2 milk
3 tea
```

上のプログラムではdrinkというリストに3個の要素があるため1,2,3とカウントしながら要素を取り出すことができた。このプログラムでもカウントしながら要素の取り出しができるが、もっと簡単に書く方法もある。

#enumerate関数
 enumerate関数を使うことで要素を取り出す際に何番目に取り出したかがすぐに分かる。同じようにdrinkのリストから3個の要素を取り出してみる。

```python
drink=["coffe","tea","milk"]
for a,b in enumerate(drink,1):
    print(a,b)
```

```:実行結果
1 coffee
2 tea
3 milk
```

enumerate関数を使うことで要素の取り出しとカウントを行う処理を簡潔に書くことができる。
enumerate関数は以下のように使う。enumerate関数は要素を取り出し、カウントと要素をタプルで返す。
変数aにはカウントが代入され、変数bには要素が代入される。またenumerate関数にはカウントの開始値を指定することができる。

```python
for 変数a,変数b in enumerate(イテラブル,開始値):
```
SMTソルバー Z3Py

ちょっと前に「Answer Set Programming」というのが使えそうだと思ったのだが、記述表現がよくわからなく停滞していたが、同じようなことをが「Z3Py」を使うとPythonで書けるということで、例題を通じて理解を深めた。

# SMTソルバー Z3Pyとは
Z3は、Microsoft Researchで開発された高性能の定理証明器（theorem prover）です。
https://ericpony.github.io/z3py-tutorial/guide-examples.htm
SMT は背景理論付き充足可能性問題（Satisfiability Modulo Theories）の略語です。命題論理よりも表現能の高い論理体系で記述さた背景理論を、SAT技法で効果的に取り扱うことを目的とした技術だそうです。（条件を書くと、それが解けるか解けないかを判定してくれるもの、と理解していますorz）

# インストール
```
pip install z3-solver
```

# 例題
[コイン問題（制約充足問題）](https://qiita.com/Ganesha/items/5e5a765679f09e773467)
[コイン問題２](https://qiita.com/Ganesha/items/aee87f3617cbe3d1414d)
[部分和問題](https://qiita.com/Ganesha/items/17a7956c445c8117d12c)
[魔法陣](https://qiita.com/Ganesha/items/fdf965e75f1a49004dd8)
[グラフ彩色問題](https://qiita.com/Ganesha/items/6031e429297c9da32d16)
[数独](https://qiita.com/Ganesha/items/0557171c43c99fdcebe3)
[ビンパッキング問題](https://qiita.com/Ganesha/items/4c9e9ef902c7ceeaf191)
[ナップサック問題](https://qiita.com/Ganesha/items/3e37612cbf48cf8f5c07)
[制約最適化問題](https://qiita.com/Ganesha/items/2d36276692fbf8e577b7)
[エイト・クイーン問題](https://qiita.com/Ganesha/items/216a24183f95074f332d)
[ハノイの塔](https://qiita.com/Ganesha/items/1b86c8eb0b9d0249d218)
[巡回セールスマン問題](https://qiita.com/Ganesha/items/265184b2982f5d80f1fe)

# まとめ
例題を通して、使い方は理解できたと思う。
当然、「論理学」にも使えると思うので、そちら側でどのように使えるか見てみようと思う。
しかし、これを何に使うかがピンと来ていないのが、自分の駄目さ加減に嫌気がさす。

# 参考
[Z3: Theorem Prover] (https://z3prover.github.io/)
[Coprisによる制約プログラミング入門](http://bach.istc.kobe-u.ac.jp/copris/docs/intro-ja.html)
[電気通信大学のページ](https://wiki.mma.club.uec.ac.jp/CTF/Toolkit/z3py)
【Swft】デバッグ方法



#ブレークポイント
プログラム実行中の変数の中身を確認したいときには
ブレークポイントを貼ることで、一旦実行をそこで止めることが出来ます。

##ブレークポイントの設置
Xcode上の行番号をクリックすることで、ブレークポイントを貼ることができ、外すときは、ブレークポイントをドラッグすることで外すことが出来ます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651213/8660abaa-29dd-2613-3294-4fa230c2c7d1.png" width=500px>





また、ショートカットキーも用意されており、ブレークポイントを貼りたい行にカーソルを移動し、 コマンド + オプション + ¥　を同時に入力することで設定出来ます。



##条件設定
ある条件のときだけ実行を止めることもできます。
ブレークポイントを設定したい行番号をダブルクリックします。
Conditionという項目が条件になるので、処理を止めたい条件を入力することで、
この条件のときだけブレークポイントに処理が止まるようになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651213/d1e41d9a-2dc5-6976-faf5-c8a77b995fb4.png" width=500px>




##po  コマンド
変数の中身を確認したいときはブレークポイントで実行を止めた後、Xcode下部のエリアで 「po 変数名」を入力することで変数の値が出力されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651213/8281cd5c-c697-338c-1a63-4036646b890b.png" width=500px>







##expression コマンド
expressionコマンドを使用することで、変数の値を書き換えることもできます。「expression 変数名 = 値 」を入力することで変数の値を変更出来ます。
下記サンプルではvalueを1000に書き換えた後にpoコマンドで値を確認しています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651213/b2736aa7-e357-3947-12d7-550cb75c9993.png" width=500px>



#参考
[Swift プログラムのデバッグテクニック](https://qiita.com/MaShunzhe/items/b98d504b9ee6ddbd26b6)
【VARCHAR vs TEXT】ERROR 1118 (42000): Row size too large.の対処




```sql:エラー全文
CREATE TABLE`t1` (
    `id` INT(7) NOT NULL AUTO_INCREMENT,
    `long_text1` VARCHAR(10000) NOT NULL,
    `long_text2` VARCHAR(10000) NOT NULL,
    `long_text3` VARCHAR(10000) NOT NULL,
    PRIMARY KEY (`id`)
);

ERROR 1118 (42000): Row size too large.
The maximum row size for the used table type, not counting BLOBs, is 65535.
This includes storage overhead, check the manual.
You have to change some columns to TEXT or BLOBs

/*
Google翻訳
エラー1118（42000）：行サイズが大きすぎます。
使用されるテーブルタイプの最大行サイズは、BLOBを除いて、65535です。
これにはストレージのオーバーヘッドが含まれます。マニュアルを確認してください。
一部の列をTEXTまたはBLOBに変更する必要があります。
*/
```

# 結論
エラーメッセージの通り、VARCHAR型カラムをTEXT型カラムに変更することで解消されました。

# もう少し細かく見る

###エラーの原因
MySQLテーブルには行サイズの制限があります。

>行サイズ制限
>MySQL テーブルの内部表現の最大行サイズは 65,535 バイトです。

参考：[8.4.7 テーブルカラム数と行サイズの制限](https://dev.mysql.com/doc/refman/8.0/ja/column-count-limit.html)

注意すべきは、**65,535バイトの制限がカラム全体の合計サイズに対して設けられている**ということです。
CREATE TABLE文の実行時点でカラムの合計バイト数が65,535バイトを超えていたので、上記エラーが発生しました。

###VARCHAR型とTEXT型それぞれが確保するバイト数について

#####VARCHAR型
VARCHARカラムには可変長の文字列を設定します。
INT型などでは型名に続く( )でバイト数を指定しますが、CHAR/VARCHAR型では( )に文字数を指定します。

```sql
CREATE TABLE`t1` (
    `id` INT(7) NOT NULL AUTO_INCREMENT,
    `long_text1` VARCHAR(10000) NOT NULL, --「10,000文字入る」であって「10,000バイト確保してる」ではないので注意！
);
```

今回はDBに登録する際の文字コードはUTF-8(1文字3バイトの文字コード)を使用していたので、
上記の例ではこのカラムだけで(10,000文字 * 3バイト) + VARCHARのコード長を示す2バイト = 30,002バイトを確保してしまっていることになります。

#####TEXT型
再度リファレンスマニュアルより。
>BLOB および TEXT のカラムは、行サイズ制限に 9 から 12 バイトのみ寄与します。これは、その内容が行の他の部分とは別に格納されるためです。

VARCHAR型が入力された文字列をテーブル上にそのまま保存するのに対し、TEXT型ではポインタのみをテーブルに保持しデータ自体は別の場所に格納します。

```sql
CREATE TABLE`t1` (
    `id` INT(7) NOT NULL AUTO_INCREMENT,
    `long_text1` TEXT NOT NULL, -- 10,000文字格納してもテーブル上は9～12バイトのみ確保される
);
```


###本当にこの対応でいいの？

#####TEXT型のデメリット

- データを取り出すときに一度参照を挟むため、データを直接格納しているVARCHAR型よりは処理に時間がかかる（未検証）
- インデックスを貼るときに長さを指定する必要があり、考慮することが増える

#####そもそもVARCHAR(4000)みたいな行が複数存在するテーブルは良い設計でない可能性が高い
調べれば調べるほど、処理速度のことを考えると基本的にはTEXT型の使用は避けるべきというのが一般論のようです。VARCHAR型を使用できるようににテーブル設計を見直してみます...。
【VirtualBox】GuestAdditionsが入らない時の対処法

## はじめに

VirtualBoxを利用しているユーザーであれば、仮想マシンの機能拡張に「GuestAdditions」を実装したことは一度はあるかと思います。ただ、今回は以下のようなエラーメッセージでGuestAdditionsをインストールすることができませんでした。ネットで調べ周り、一つ成功例ができましたので備忘録がてら共有します。

### エラーメッセージ
「仮想光学ディスク C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso をマシンXXXに挿入できません」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/fb74ab80-b14c-416c-6138-4be6db29a0e6.png)


## 手順

1. 現時点で仮想マシンを立ち上げているのであれば、一度シャットダウンします。
1. 「VirtualBox マネージャー」で対象デバイスを選択し、[設定]>[ストレージ]から[光学ドライブの追加]をクリック
    *  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/5a67c395-2552-a9bf-7f74-a79f1a96aaac.png)
1. 選択肢の中からGuestAdditionsを選んで追加
1. 仮想マシンを起動させる
1. 仮想マシンが起動した状態で、[デバイス]>[Guaest Additions CDイメージの挿入]をクリック
1. **再度エラーとなる(はず)**
1. 仮想マシンを起動させた状態で、再び「VirtualBox マネージャー」>[設定]>[ストレージ]から挿入されているディスク[VBoxGuestAdditions.iso]を右クリック>[割り当てを除去]を選択
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/e9933912-a6b3-0f5e-24e5-7d67ddb68b65.png)
1. 再度仮想マシン上で、[デバイス]>[Guest Additions CDイメージの挿入]をクリック
1. これでエラーなく挿入されると思います。
Before starting UiPath:回数が分かっている繰り返し（For）

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

★★★この記事はUiPathブログ発信チャレンジ2021サマー、7/24の記事です。★★★

今回は、ちょっとしたシリーズです。UiPathを使うに当たって、UiPathの機能ではなく、コンピュータ言語を使う上での基礎知識を展開していこうと思います。

#回数が分かっている繰り返し（For）

お財布の中の10円玉を積み上げてみてください。その中に、令和に発行された硬貨は何枚あるでしょうか？
さて、どうやりますか？積み上げた、すべての硬貨を、一枚一枚、確認していきますね？

このように、予め枚数が分かっている積み上げた硬貨を一枚一枚確認していくような処理、
処理を何回も行う事を、「繰り返し」と言います。

繰り返しは、以下のようなフローチャートになります。

　　　　積み上げた硬貨【すべてを確認しおわるまで】、以下の動作を行う。
　　　　　　１）硬貨を手に取る
　　　　　　２）発行年が見える面にする
　　　　　　３）令和ならカウントアップ
　　　　　　４）確認した硬貨を脇に置く
　　　　　　５）１）に戻る

UiPathでは、回数が分かっている繰り返しには下の二つがあります。
　　　　「繰り返し（コレクションの各要素）」アクティビティ（For Each）
　　　　「繰り返し（各行）」アクティビティ（For Each Row）

「繰り返し（コレクションの各要素）」アクティビティは、コレクションを対象にしたものです。
コレクションとは、同じ属性の変数をまとめて管理できるようにした変数です。
　　　　コレクションの例
　　　　　　・あるフォルダのファイル情報(String[])
　　　　　　・データテーブルの列情報(DataColumn.Count)

「繰り返し（各行）」アクティビティは、DataTableの行に特化したアクティビティです。
データテーブルを指定することで、簡単に全行を対象に処理する事ができます。
「繰り返し（コレクションの各要素）」アクティビティで代用も出来ますが、事前に用意されているのでそちらを使いましょう。
　　　　コレクションの例
　　　　　　・データテーブルの行情報(DataRow)

##おわりに
いかがでした？

繰り返しも、代入、条件分岐に続いて使用率が高いと思っています。4人掛けの机にマットを敷く、１～１２チャンネルをザッピングするなど、繰り返しは無意識に行っているんです。

是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！
CollectionViewまとめ(Swift)

UICollectionViewとは
--
複数のデータ項目をカスタマイズして、綺麗にレイアウトできるもの

使い方
----
①　```UICollectionViewDelegate, UICollectionViewDataSource```のプロトコルを持ってくる

```swift:delgate.swift
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

...}
```

② viewdidiLoadの中で自分がつかう！ってことをしっかり宣言しておく

```swift:delegate2.swift
//delegateの宣言
  myCollectionView.delegate = self
//dataSourceの宣言
  myCollectionView.dataSource = self
```

③ あとはお好きにカスタマイズ！！

```swift:layout.swift
      //CollectionViewのレイアウトを初期化してあげる
        let layout = UICollectionViewFlowLayout()
        // Cell一つ一つの大きさをCGFloat型で指定
        layout.itemSize = CGSizeMake(30,30)
        // Cellのマージンを上下左右で設定
        layout.sectionInset = UIEdgeInsetsMake(10, 10, 20, 10)
        // セクション毎のヘッダーサイズをCGFloat型で指定
        layout.headerReferenceSize = CGSizeMake(50,15)
        // CollectionViewに上記で作ってきたデータを引数に入れてつくる
        myCollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
        // Cellに使われるクラスを登録（Id、今回はMyCell)
        myCollectionView.registerClass(CustomUICollectionViewCell.self, forCellWithReuseIdentifier: "MyCell")
```

④関数で実際に描画

```swift:kansu.swift
   //Cellが選択された際に呼び出される関数
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    }
    //Cellの総数を返す
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 100
    }
    //Cellに値を設定する
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
//さっき登録したMycellIDを型キャストして定数cellに入れてあげる
 let cell : UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", 
forIndexPath: indexPath) as! UICollectionViewCell
//背景色の変更
        cell.backgroundColor = UIColor.redColor()
//cellを返す。
        return cell

    }
```

まとめ
---

基本TableViewと使い方は変わらない　。両方の使用方法さえ理解できていれば幅広いデータのレイアウトの仕方ができそう。
Riot.js v3 (IE11) と v6(IE11非対応) の書き方の違い

## version 3 (v3.13.2)

| 項目 | v3 | v6 |
|:--|:--|:--|
| IE9対応 | (要確認) | × | 
| IE11対応 | 〇 | × | 
| compile指定 | 〇不要 | ×必要 | 
| type名指定 | `<script src="a.htm" type="riot/tag"></script>` | `<script src="a.htm" type="riot"></script>` | 
| tagの中にscriptタグ | 〇可能 | ×不可能 | 

* version 3 はIE11対応している、
* version 6 との大きな違いは、type名。

```html:version3の書き方
<script src="my-sample.htm" type="riot/tag"></script>

<script>
  riot.mount('sample')
</script>
```

```html:version6の書き方
<script src="my-sample.htm" type="riot"></script>

<script>
(async function main() {
  await riot.compile()
  riot.mount('sample')
}())
</script>
```

## version 3 の例

```html:index.html
<sample />
<script src="my-sample.htm" type="riot/tag"></script>
<script src="//unpkg.com/riot@3/riot+compiler.min.js"></script>

<script>
  riot.mount('sample')
</script>
```

```html:my-sample.htm
<sample>
    <h1>ハロワ4</h1>
    <h2>ハロワ5</h2>
</sample>
```

## version 6 (v6.0.1)

### ドキュメント

https://riot.js.org/ja/compiler/#%E3%82%A4%E3%83%B3%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB

* https://github.com/riot/riot/releases
    * 2021/7/24時点では 最新版は 6.0.1

### サンプル

* index.html
* my-sample.htm

```html:index.html
<sample />
<script src="my-sample.htm" type="riot"></script>
<script src="//unpkg.com/riot@6/riot+compiler.min.js"></script>

<script>
(async function main() {
  await riot.compile()
  riot.mount('sample')
}())
</script>
```

```html:my-sample.htm
<sample>
    <h1>ハロワ4</h1>
    <h2>ハロワ5</h2>
</sample>
```

![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/4a101d35-e3d9-4f41-8bbf-1d27a122f901.png)
AtCoderログ：0031 - ABC 053 B

# 問題：[ABC 053 B - A to Z String](https://atcoder.jp/contests/abc053/tasks/abc053_b)

## 問題文
> すぬけくんは文字列 $s$ の連続した一部分(部分文字列という)を取り出して先頭が A であり末尾が Z であるような文字列を作ることにしました。 すぬけくんが作ることのできる文字列の最大の長さを求めてください。なお，$s$ には先頭が A であり末尾が Z であるような部分文字列が必ず存在することが保証されます。

## 制約
> ・$1 \le |s| \le 200,000$
> ・$s$ は英大文字のみからなる
> ・$s$ には先頭が A であり末尾が Z であるような部分文字列が必ず存在する

## 収録されている問題セット
-  [AtCoder に登録したら次にやること](https://qiita.com/drken/items/fd4e5e3630d0f5859067) ([第03問類題](https://qiita.com/drken/items/fd4e5e3630d0f5859067#%E7%AC%AC-3-%E5%95%8F--abc-081-b---shift-only-200-%E7%82%B9))


# 回答1 (AC)
文字列 s を読み込んだ後、最初の文字から順番に 'A' を探し、最後の文字から順番に 'Z' を探すことで、先頭が A であり末尾が Z であるような部分文字列を探しました。コードは以下のようになりました。

```C++:abc053b-1.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  string s;
  cin >> s;

  int left = 0, right = s.size()-1;  
  while ( s.at(left)!='A' ) {
    left += 1;
  }
  while ( s.at(right)!='Z' ) {
    right -= 1;
  }
  
  cout << right-left+1 << endl;
}
```

# 回答2 (AC)
C++ の文字列に関する関数を調べたところ、回答1で用いたような関数が用意されていることを知りました。文字列 s に対し、s.find('A') で最初の 'A' の位置を、s.rfind('Z') で最後の 'Z' の位置を求めることができます。コードは以下のようになりました。

```C++:abc053b-2.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  string s;
  cin >> s;

  cout << s.rfind('Z')-s.find('A')+1 << endl;
}
```

# 調べたこと
## [AtCoder の解説](https://atcoder.jp/contests/abc053/tasks/abc053_b/editorial) → [コンテスト全体の解説](https://img.atcoder.jp/arc068/editorial.pdf)
回答1,2と同じ方針でした。

# リンク
- 前の記事 → [AtCoderログ：0030 - ARC 123 A](https://qiita.com/RoadLynton/items/98111cdbac8846894597)