OmniAICreator/Qiita-1.07M huggingface dataset:
Sphinxで電子書籍を作成するための、最低限の設定

## 概要

ドキュメントジェネレーターのSphinxに興味を持って試しているときに、電子書籍のフォーマットの1つである、EPUBの作成が案外簡単に行えることがわかりました。

Kindleの出版に使えるかもしれないと思い、確認してみました。

## EPUBに関する設定

### バージョンの記載をした方が良い

conf.pyに以下の設定を行います。

    version = '1.0'

HTMLのビルド(`make html`)では指定していなくても警告されませんが、EPUBのビルド(`make epub`)では警告されます。

EPUBのビルドでversionを指定せずともEPUBのファイルは作成できますが、「WARNING: EPUB3出力では設定値 "version" が必要です」と表示されます。

https://www.sphinx-doc.org/ja/master/usage/configuration.html#confval-version

```
HTMLページは_build\htmlにあります。
Sphinx v5.0.2 を実行中
翻訳カタログをロードしています [ja]... 完了
保存された環境データを読み込み中... 完了
WARNING: EPUB3出力では設定値 "version" が必要です
ビルド中 [mo]: 更新された 0 件のpoファイル
ビルド中 [epub]: 更新された 0 件のソースファイル
環境データを更新中0 件追加, 0 件更新, 0 件削除
更新されたファイルを探しています... 見つかりませんでした
更新が必要な対象はありませんでした
ビルド 成功, 1 warning.
```

### EPUBだけ索引のページを非表示にする

Sphinxでは各ページにindexディレクティブを記述することで、索引を作成できます。

ただ、indexディレクティブを記述していなくても、ドキュメントの最後に索引のページが作成されます。indexディレクティブを1つも書いていない場合は、空の索引ページが作成されます。

EPUBで索引ページを作成しないようにするには、conf.pyに以下の設定を行います。

    epub_use_index = False

デフォルトでは、HTMLの索引に関する設定である`html_use_index`がTrueとなっているため、EPUBも索引が作成されますが、HTMLとは別にEPUBだけ索引を作成しないことが可能です。

https://www.sphinx-doc.org/ja/master/usage/configuration.html#confval-epub_use_index

## EPUBとしてのドキュメントを作成する上で実施したほうが良いことについて

### 書籍の目次を作成する

目次は、index.rstにtoctreeディレクティブを使ってファイルを構成すればOKです。

各ファイルで見出しを付けて文章を構成し、toctreeディレクティブを使えば、それでもう目次が出来上がります。

```index.rst
================================
SphinxでEPUB出版を行う
================================

.. toctree::
   :maxdepth: 2
   :caption: もくじ:

   contents/intro
   contents/sphinx
   contents/epub
```

上記の設定では、toctreeのオプションとして以下を設定しています。

* maxdepth
    * 目次として表示する階層は第2階層まで
* caption
    * 目次のページの見出しを「もくじ」とする

すべての見出しを目次に表示すると、目次が煩雑に見えてしまうことになりがちなので、maxdepthで表示する階層を絞っておいた方が良いと考えています。

https://www.sphinx-doc.org/ja/master/usage/restructuredtext/directives.html#table-of-contents


## まとめ

Sphinxでは、簡単な設定で電子書籍用のフォーマットであるEPUBが作成できることがわかりました。

Sphinxでは、reStructuredText(reST)で文章を記述することで、文章と文章に対する装飾をきっちり分けておくことが可能です。HTMLやMarkdownなど、見出しや段落、リストなどの文章構成要素を意識して文章を書くことに慣れている人にとっては、SphinxでEPUBが簡単に作成できることはメリットだと思われます。

Sphinxの標準であるreSTに馴染めるかどうか、という問題はありますが(SphinxでもMarkdownで記述する方法はありますが、筆者はまだ試していません)、reSTに馴染める・既に馴染んているのであれば、Sphinxは電子書籍を作成するのに有力なツールと言えそうです。
Flutter入門 DropDownMenu 配列から選択肢を作成する

# この記事のゴール
配列からDropDownMenuのitemを作成できるようになる
早速行ってみましょう！

### まずは通常のDropDownButton
```
DropdownButton(
    hint: Text("選択してください"),
    items: [
        DropdownMenuItem(
            child: Text("選択肢1"),
            value: "選択肢１"
        ),
        DropdownMenuItem(
            child: Text("選択肢2"),
            value: "選択肢２"
        ),
    ],
    onChanged: (value){ print(value); }
)
```
### 結果
![スクリーンショット 2022-09-24 11.21.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522684/9b0e9248-c64f-e280-3c4c-98cfa630839b.png) ![スクリーンショット 2022-09-24 11.21.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522684/be3c6a87-d54b-5ae3-6035-38eb28484d05.png)

### 続いて本題の配列から作成するパターン

```
List<String> selectList = ["選択肢１", "選択肢2"];

DropdownButton(
    hint: Text("選択してください"),
    items: selectList.map((String str) => 
            DropdownMenuItem(child: Text(str), value: str)).toList(),
    onChanged: (value){ print(value); }
    ),
```

こんな感じで簡単に作成できます。
結果は通常のものと全く同じになります。
注意点は、map関数の最後にtoList()を入れてあげること！

今回は以上です！
これからもFlutterで開発していく中で少しずつ記事にしていきますのでよろしくお願いします！
Db2地理空間分析: 地理空間分析機能を有効にする

`Db2地理空間分析`シリーズ


当記事は「2. 地理空間分析機能を有効にする」です。

1. [Db2の地理空間分析機能](https://qiita.com/nishikyon/items/2f8bc4858e2d54bf9b1a)
1. [**地理空間分析機能を有効にする**](https://qiita.com/nishikyon/items/4cd0430e4ebb7d541a82)
1. [JGD2011座標系の設定](https://qiita.com/nishikyon/items/fc97391f02b4e9e4bb9c)
1. [SHAPEファイルのインポート](https://qiita.com/nishikyon/items/fd6d166fdbf6523930d4)
1. [緯度・経度情報をインポート](https://qiita.com/nishikyon/items/cf90796a13fa7d2cf769)
1. [DBeaverでDb2の地理空間情報を表示してみる](https://qiita.com/nishikyon/items/60e23324b1ec1f65deb5)
1. [空間処理変数を使ってみる](https://qiita.com/nishikyon/items/7eeb7ee541e7d4f76a7f)


- - -
# 1. 地理空間分析機能を有効にする

参考: [Spatial Analytics コンポーネントの使用可能化
](//www.ibm.com/docs/ja/db2/11.5?topic=analytics-enabling-spatial-component)

Db2で地理空間分析機能を有効にする(=Spatial Analytics コンポーネントの使用可能化)には、以下のコマンドを使用するDbに対して発行します。

最近のDb2 Warehouse on Cloudは既に有効化されているので、SYSGEOスキーマが既にあれば、コマンド実行は不要です。SYSGEOスキーマがなければ実行してください。


```sql
CALL SYSPROC.SYSINSTALLOBJECTS('GEO', 'C', CAST (NULL AS VARCHAR(128)), CAST (NULL AS VARCHAR(128)))
```

Db2 CLIで対象のDbに接続後、あるいはDb2 Warehouse on CloudのWebコンソールの「SQLの実行」画面より実行してください。

尚、Db2 on Cloud(StandardプランとEnterpriseプランのみ)は正式サポートされていませんが、一部機能は使用できましたので、Db2 on Cloudで無理矢理使いたい場合も上記コマンドの実行をしてください。Db2 on Cloudでは [SHAPEファイルのインポート](https://qiita.com/nishikyon/items/fd6d166fdbf6523930d4)ができません。

このコマンドはDbに対して一度だけ実行すればOKです。

このコマンドは、以下のことを行うそうです:

- SYSTOOLSPACE 表スペースと SYSGEO スキーマに Spatial Analytics メタデータ表をインストールする
- すべての空間処理関数の EXECUTE 特権を PUBLIC に付与する
- SYSGEOADM 役割を作成し、管理ストアード・プロシージャーを実行するために必要な特権を付与する

SYSGEOスキーマに関連テーブルができてますので、興味があれば確認してみてください。

以上です。
Pythonのバージョン確認 for macOS

Pythonの環境構築のため

macにあるPythonのバージョンを確認

macOS 10.14

ターミナルappで
`$ python --version`
結果
`Python 2.7.16`

IDEには3.10.6とあるため
ターミナルappで
`$ python3 --version`
結果
`Python 3.10.6`

と確認。
単純にPythonとだけいれるのでなく、バージョンの番号をつけてコマンド実施が必要と認識。
LogicDesignerで更新資材を確認するには

最近流行りのノンプログラミング開発をintra-martのLogicDesignerを利用してやっています。

環境が開発環境、本番環境に分かれていて、リリース時には「差分だけ」の運用をしていますが、ノンプログラミングなのでSVNで管理できるわけもなく、リリース漏れによるデグレードが非常に怖いです。（※intra-mart 2019winter の話です）

そこで、DB上に登録されるフロー定義の更新日付を見て資材に更新が発生したかどうかを確認する方法を考えました。
結果の項目名、項目数を合わせているのは、LogicDesignerで結果をまとめてCSV出力する際に都合が良いからです。
あまり検証できていませんので過信はできませんが、チェック用には使えると思います。

更新のあるロジックフロー取得
------

```sql
--- 更新のあるロジックフロー取得
SELECT
   'LD' AS kbn
  ,FC.category_name AS detail_kbn
  ,TB1.flow_id AS id
  ,TB1.flow_name AS name
  ,'' AS note
  ,TB1.create_date AS create_date
  ,TB1.record_date AS record_date
FROM
   imld_logic_flow AS TB1
  ,imld_flow_category AS FC
  ,imld_flow_category_relation AS FCR
  ,(
     SELECT
        flow_id
       ,MAX(record_date) AS max_rec_date
     FROM
       imld_logic_flow
     WHERE
       delete_flag = '0'
     GROUP BY flow_id
   ) AS MAX_TB
WHERE
     TB1.flow_id = MAX_TB.flow_id
 AND TB1.record_date = MAX_TB.max_rec_date
 AND TB1.record_date >= /*targetDate*/'2022/09/24' -- ここは任意の日付に
 AND FCR.flow_id = TB1.flow_id
 AND FC.category_id = FCR.category_id
ORDER BY detail_kbn, id
```

更新のあるユーザ定義の取得
----

```sql
-- 更新のあるユーザ定義の取得
SELECT
   'UT' AS kbn
  ,UC.category_name AS detail_kbn
  ,UD.definition_id AS id
  ,UD.definition_name AS name
  ,UD.definition_type AS type
  ,UD.create_date AS create_date
  ,UD.record_date AS record_date
FROM
   imld_user_category UC
  ,imld_user_category_relation UCR
  ,imld_user_definition UD
WHERE UC.category_id = UCR.category_id
  AND UCR.definition_id = UD.definition_id
  AND UD.delete_flag = '0'
  AND UD.record_date >= /*targetDate*/'2022/09/24' -- ここは任意の日付に
ORDER BY detail_kbn, id
```

以上です。
現場で作成したものを手動で転記したので間違いあるかもです。
同じやり方でForma定義とか、データソース定義とかも抽出できると思います。
Amazon Redshift で 列レベルアクセス制御

例えばPIIやPCIなどの機密情報対策として、テーブル、ビュー、マテリアライズドビューで列（カラム）レベルでGRANT/REVOKE形式のアクセス制御ができるRedshiftの機能.
SQLだけで操作できる。

参考）
- AWS公式ブログ：[Amazon Redshift で列レベルのアクセス制御を行い、よりきめ細かなデータセキュリティを実現する](https://aws.amazon.com/jp/blogs/news/achieve-finer-grained-data-security-with-column-level-access-control-in-amazon-redshift/)
- [公式ドキュメント](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html#r_GRANT-usage-notes-clp)


# 列レベルでの権限追加例

公式ブログの内容抜粋をベースに、一般的にはユーザ単位よりグループ単位やROLEで権限管理が便利なので、ここではグループ単位での例で。 

### 1) まずはサンプル顧客テーブルとサンプルSalesユーザ準備
```SQL
CREATE TABLE customer 
(
  customerid       INT8 NOT NULL,
  customername     VARCHAR(25) NOT NULL,
  phone            CHAR(15) NOT NULL,
  nationid        INT4 NOT NULL,
  marketsegment    CHAR(10) NOT NULL,
  accountbalance   NUMERIC(12,2) NOT NULL
);

INSERT INTO customer VALUES
(1, 'Customer#000000001', '33-687-542-7601', 3, 'HOUSEHOLD', 2788.52),
(2, 'Customer#000000002', '13-806-545-9701', 1, 'MACHINERY', 591.98),
(3, 'Customer#000000003', '13-312-472-8245', 1, 'HOUSEHOLD', 3332.02),
(4, 'Customer#000000004', '23-127-851-8031', 2, 'MACHINERY', 9255.67),
(5, 'Customer#000000005', '13-137-193-2709', 1, 'BUILDING', 5679.84)
;

CREATE USER sales WITH password 'Abcd1234!'; 
CREATE GROUP division;
ALTER GROUP division ADD USER sales;
```

## 2) 権限付与

普通にテーブル単位で参照権限を付与するなら

``` GRANT SELECT ON [table name] TO GROUP [group name] ```
だが、列レベル指定したい場合は、
単純に以下のようにSELECT（[列名]）とするだけでOK
``` GRANT SELECT([列名]) ON [table name] TO GROUP [group name] ```

列レベルで付与できる権限は、```SELECT```と```UPDATE``` のみ

**権限付与例）**
```SQL
GRANT SELECT (marketsegment, accountbalance),UPDATE (marketsegment) 
ON customer 
TO GROUP division;
```

customerテーブルの marketsegment と accountbalance カラムに参照権限、marketsegment に更新権限を、divisionグループに対して付与

### 3) 動作確認

```SQL
SET SESSION AUTHORIZATION 'sales';

-- 許可あり列の参照
select marketsegment from customer;

-- 許可なし列の参照
select phone from customer;
select * from customer;

RESET SESSION AUTHORIZATION;
```
許可あり列の参照は成功するが、許可なし列を含む参照は意図通りに ``` permission denied```エラーになる

### 4) 列レベル権限設定状況の確認方法

システムテーブル```pg_attribute_info```を活用した以下のクエリでチェックできる

```SQL
SELECT b.attacl, b.attname as columnname, c.relname as tablename 
FROM pg_catalog.pg_attribute_info b 
JOIN pg_class c ON c.oid=b.attrelid 
WHERE  b.attacl IS NOT NULL AND b.attacl != '{}' ORDER BY c.relname, b.attname;
```

結果イメージはこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112537/dca294df-0960-33b4-366d-9ea128c4bb44.png)
customerテーブルのaccountbalance列には、divisionグループに r (参照）が、marketsegment列には rw（参照と更新）がそれぞれ付与されている。"IAM:xxxx"は付与者。
下の２行はグループ単位ではなくユーザ単位でGRANTした場合の見え方例。

**備考**
GitHubで公開されている```amazon-redshift-utils```の、グループ単位でテーブル権限を確認する以下のAdminViewsでは、上記列レベル設定の結果は出力されないので、使ってる人は注意。

https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_get_tbl_priv_by_group.sql

### 5) 権限のREVOKE

こんな感じで通常REVOKE同様にテーブル単位での設定。

```SQL
REVOKE UPDATE ON customer FROM GROUP division
```

# まとめ
従来型の別途表示範囲を絞ったビューを使ったやり方でも同様の要件は満たせるが、通常にテーブル単位のGRANT操作にカラム指定するだけでできる点は便利。
後で読む論文リスト

# 後で読む論文リスト

なんか調査してる最中に見つけて読んでみたくなったやつを忘れないようにリンク貼っとく。古いやつとかも結構出てくる予定

## ルール

**タイトル**　
一言, キーワード等
リンク

## 時系列

　**A Complexity-Invariant Distance Measure for Time Series**
時系列クラス分けの手法。classical. 2014年のやつで300くらい引用されてる
[pdf](https://www.cs.ucr.edu/~eamonn/Complexity-Invariant%20Distance%20Measure.pdf)

**Time Series Shapelets: A New Primitive for Data Mining**
shapeletの原論文。2009年とか
[pdf](https://www.cs.ucr.edu/~eamonn/shaplet.pdf)

**Question and Answering Using BERT**
BERTをQ&Aに適用する理論と実装に関する説明.
[pdf](https://red.mnstate.edu/cgi/viewcontent.cgi?article=1018&context=sac)

### ウェアラブルデータ系


- [ ] [Detecting motion artifact ECG noise during sleeping by means of a tri-axis accelerometer](https://pubmed.ncbi.nlm.nih.gov/18002544/) 
    - 加速度を使用したecgの動作アーチファクトの補正.
- [x] [Review of noise removal techniques in ECG signals](https://ietresearch.onlinelibrary.wiley.com/doi/10.1049/iet-spr.2020.0104)
    - ECGのノイズ除去手法のレビュー論文
- [x] [Two-stage motion artefact reduction
algorithm for electrocardiogram using
weighted adaptive noise cancelling and
recursive Hampel filter](https://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0207176&type=printable)
     - ECGに対するモーションノイズ除去手法
- [ ] [A Personalized Zero-Shot ECG Arrhythmia Monitoring System: From Sparse Representation Based Domain Adaption to Energy Efficient Abnormal Beat Detection for Practical ECG Surveillance](https://arxiv.org/abs/2207.07089v1)
    - zero-shot ecg model

## 画像系


- [x] [Emerging Properties in Self-Supervised Vision Transformers](https://arxiv.org/abs/2104.14294) 
    - DINOの論文. 自己教師あり学習.
- [ ] [Unsupervised Data Augmentation for Consistency Training](https://arxiv.org/pdf/1904.12848.pdf)
    - 画像半教師ありのFixMatchの元アイデア.
- [x] [Smooth Neighbors on Teacher Graphs for Semi-supervised Learning](https://arxiv.org/pdf/1711.00258.pdf)
    - 半教師ありやconsistency regularizationにおける平滑性の仮説に言及してる.
- [ ] [HarDNet-DFUS: An Enhanced Harmonically-Connected Network for Diabetic Foot Ulcer Image Segmentation and Colonoscopy Polyp Segmentation](https://arxiv.org/abs/2209.07313)
    - HarDNet-DFUSという内視鏡ポリープのセグメンテーションモデル
- [ ] [ESFPNet: efficient deep learning architecture for real-time lesion segmentation in autofluorescence bronchoscopic video](https://arxiv.org/abs/2207.07759)
    - transformerベースでfeatureピラミッドを構築したセグメンテーション用のモデル
数のリスト ln と数 n を受け取って、ln の要素のうち、n より大きい個数を返す関数

# はじめに

「[Pythonプログラミング入門](https://utokyo-ipp.github.io/index.html)」という、東京大学 数理・情報教育研究センターさんが作成された教材でPythonを学習しています。

Pythonの学習を進めつつ、同じ内容を[Elixir](https://elixir-lang.org/)で置き換えてみたらどうなるだろう？　という視点でも眺めています。
私はどうしようもなく[Elixir](https://elixir-lang.org/)が好きなのです。

今日は、「数のリスト ln と数 n を受け取って、ln の要素のうち、n より大きい個数を返す関数」をやってみます。

# Python

お手本は

https://utokyo-ipp.github.io/6/6-2.html

に書いてあります。

```python
def number_of_big_numbers(ln, n):
    return sum(map(lambda x: 1, filter(lambda x: x>n, ln)))
```

実行してみます。

```python
>>> number_of_big_numbers([10, 0, 7, 1, 5, 2, 9], 5)
3
```

:tada::tada::tada: 

# [Elixir](https://elixir-lang.org/)

[Elixir](https://elixir-lang.org/)で書いてみます。

```elixir
iex> number_of_big_numbers = fn ln, n -> 
  ln |> Enum.filter(& &1 > n) |> Enum.map(fn _ -> 1 end) |> Enum.sum()
end

iex> number_of_big_numbers.([10, 0, 7, 1, 5, 2, 9], 5)
3
```

:rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket::rocket: 

上記は、Pythonのお手本に寄せてみました。
お手本といっても、「高階関数」という章立てにおいて、なんとしてでも「高階関数」を駆使するという条件下でのお手本です。

その条件を取っ払ったほうが素直なコードになります。
処理の本体は、
`ln |> Enum.filter(& &1 > n) |> Enum.count()`でもよいです。


:qiitan::rocket::rice::rocket::rice::rocket::rice::qiitan:

## 別解

```elixir
iex> number_of_big_numbers2 = fn ln, n -> 
  for(x <- ln, x > n, do: 1) |> Enum.sum()
end
```

## さらに別解

```elixir
iex> number_of_big_numbers3 = fn ln, n -> 
  Enum.count(ln, & &1 > n)
end

iex> number_of_big_numbers3.([10, 0, 7, 1, 5, 2, 9], 5)
3
```

[Enum.count/2](https://hexdocs.pm/elixir/Enum.html#count/2)で一撃でした。


# おわりに

「数のリスト ln と数 n を受け取って、ln の要素のうち、n より大きい個数を返す関数」を楽しみました。
PGP、OpenPGP、GnuPG（GPG）の違い

👇について、理解が曖昧だったので調べてみた。たぶん違うところあるかも。。
・PGP
・OpenPGP
・GnuPG（GPG）

■ソフトウェアとしてのPGP
・Zimmermannが本流のPGPを開発。そこから様々な派生PGPが登場。
・本流のPGPは、現在はシマンテックが所有。
・派生したPGPの代表としてGPG(GnuPG)がある。

■規格としてのPGP
・初期の頃のPGP規格と、そこから派生した様々なPGP規格を一括にしてPGP規格という？
・派生したPGP規格の代表として、OpenPGP規格がある。
・IETFのRFC勧告
　・初期のPGP規格：RFC1991に準拠
　・OpenPGP規格：RFC2440に準拠

■GPG(GnuPG)とは
・OpenPGP規格のソフトウェア。
・特許で制限されているアルゴリズムを含め無いため、完全無償。

■PGPとOpenPGPの違い
・両者を比較する場合、規格としての違いに焦点を当てる。
　OpenPGP：PGPからの派生規格。
　PGP：意味としてはOpenPGP規格も含む為、文脈によって内容を読み取る

■PGPとGPG(GnuPG)の違い
・両者を比較する場合、ソフトウェアとしての違いに焦点を当てる。
　所有者の違い
　　・PGP：シマンテック社が所有
　　・GPG：なし（GNUプロジェクトによって開発されている）
　有償/無償の違い
　　・PGP：商用での利用の場合、有償になる。
　　・GPG：商用の有無を問わず、無料。
　使用できる暗号アルゴリズム
　　・PGP：特許を持つ暗号化アルゴリズムなども利用できる。
　　・GPG：は特許に抵触するアルゴリズムは利用できない。


■参考
PGP（Wikipedia）
https://ja.wikipedia.org/wiki/Pretty_Good_Privacy
PGPとGPGの違い１
https://www.web-dev-qa-db-ja.com/ja/security/pgp%E3%81%A8gpg%E3%81%AE%E9%81%95%E3%81%84/959824057/
PGPとGPGの違い２
http://handasse.blogspot.com/2008/03/pgpgpg.html#:~:text=PGP%E3%81%A8GPG%E3%81%AE%E9%81%95%E3%81%84,%E3%81%A7%E3%82%82%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%8F%E5%B0%8E%E5%85%A5%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82
PGPとGPGの違い３
https://sehermitage.web.fc2.com/crypto/openpgp.html
PGPとGPGの違い４
https://www.ipswitch.com/jp/blog/the-difference-between-pgp-openpgp-and-gnupg-encryption
PGPの歴史
https://www.confrage.com/security/pgp/pgp6_01.html
Google Apps Script でスプレッドシートの最終行に値をコピーする話

## はじめに

Google Apps Script (GAS) の `copyTo()` 関数を使ってスプレッドシートのセルをコピー＆ペーストします。

> Apps Script リファレンス

[copyTo(destination)](https://developers.google.com/apps-script/reference/spreadsheet/range#copytodestination)

## サンプルコード

```
function onCopy() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const source = spreadsheet.getSheetByName("<コピー元のシート名>").getRange("<セルの範囲>");
  const row = source.getLastRow();
  const column = source.getLastColumn();

  // コピー
  const sheet = spreadsheet.getSheetByName("<コピー先のシート名>");
  const insert = sheet.getLastRow() + 1;
  const destination = sheet.getRange(insert, 1, row, column);
  source.copyTo(destination);
}
```
STM32G071で「HELLO」と液晶表示(AQM0802A)(NUCLEO-G071RB)


x NUCLEO-G071RB


1.SCLとSDAを接続、プルアップも忘れずに
2.電源の接続
3.下記のソースコードを書き込む
4.コンパイル実行で表示されたら終了
5.おわり


![o_con794.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b45c67be-975f-0502-d190-605a02b3dc0b.jpeg)



```c++



#include <Wire.h> //I2C library

// I2C  address. 
#define I2Cadr  0x3e  // 固定

char    data_read[2]={'@','t'}; //i2cバッファー
int     ii;                     //ループカウンター

//液晶初期化配列
char INIT_com[]={0x0,0x38,
0x0,0x39,
0x0,0x4,
0x0,0x14,
0x0,0x70,
0x0,0x56,
0x0,0x6C,
0x0,0x38,
0x0,0xC,
0x0,0x1,
0x40,0x41};

//オールクリア
char INIT_cls[]={0x0,0x1};

//I2Cに2文字送る
void i2c_led_w(char *buff1){
  Wire.beginTransmission(I2Cadr);
  Wire.write(buff1[0]);
  Wire.write(buff1[1]);
  Wire.endTransmission();
  delay(2);
}//i2c_led_w


//初期化
void setup() {

  //i2cの初期化
  Wire.begin(); // initialise the connection //767 UNO 071

  //液晶の初期化
  for(ii=0;ii<11;ii++){
    i2c_led_w(&INIT_com[ii*2]);
  } //for

}//setup


//メインループ
void loop() {

  //画面のクリア
  i2c_led_w(INIT_cls);

  //HELLOを表示
  char dat[]="HELLO";
  ii=0;
  while(dat[ii] != 0){
    
    //制御文字'@'と表示文字1文字を液晶に送る
    data_read[1]=dat[ii];
    i2c_led_w(data_read);
    ii++;

  }//while

  delay(1000); //1秒待つ

}//loop




```
How keeping Azure Bastion on can be costly

Backstory
-
The other day, I was testing out how much it cost to setup a most bearbone network environment in Azure.
It turned out that I was charged for 17$ in 3 days. Surprisingly, it turns out that the most of the cost didn't even come from VM computing or storage costs.

My setup
- 
My setup is very simple. I just had a VM with other things. The instance was B1s with S4 Standard HDD managed disk.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381893/fcbb0f69-a1e5-8926-c0da-353eff2f9659.png)
I was expecting to just pay less than 12$ a day. (According to Azure Pricing Calculator)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381893/f8bd05c8-0b31-3594-1bd8-98f5dc7ff84c.png)

Problem
-
My mistake was having Azure Bastion on in the first place. 
Azure Bastion is like a feature you can use to remote into the VM without RDPing into your VM with public IP.
You can basically do everything on your browser. I just turned it just for a convenience.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381893/c43e7145-22cd-0848-32fa-2e42463d820a.png)

My expected total bill is already reaching 17 and 14 is just for 1 Bastion connection....
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381893/3242d131-371a-e494-2b38-6a1cb3858dd3.png)

Fix
-
You can simply go to the Bastion and delete it.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381893/6ef07ba3-dc13-684c-6851-961fb4691d3a.png)
You will have to confirm the deletion.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381893/d2b5a982-d3f1-64f0-9943-ea5a2a9738ce.png)

Comment
-
It was a surprise that the bastion can be very costly. Looking at the cost analysis under cost management will save your life.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381893/2addb410-4c51-89b4-5c8f-9ceaaff53df8.png)
UIColorの設定小技

# はじめに
UIColorをとりあえず設定したい時、コードで書いてある文字だとイメージがしづらい時、あると思います。
そんな時のちょっとした小技を紹介したいと思います。

## 1.メニューからShow Colorsを選択する
Edit→Format→Show Colorsを選択します。

![スクリーンショット 2022-09-24 7.03.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428088/9a750ecc-af55-1941-580b-a4447fdaef13.png)
## 2.視覚的に好みのカラーを選択してドラッグアンドドロップ!!
![Qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428088/9ca1505d-fe2e-11ca-dbe9-8c69fab4c757.png)

これだけです!!
この四角形がUIColorを表してくれています😄
Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較 | プログラミング言語比較

<a href="https://qiita.com/yuki_kimoto/items/f9c2454e7f9130ddb003">Qiita > プログラミング言語の比較</a>

プログラミング言語Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較

# Python

https://qiita.com/Sunset_Yuhi/items/fa6e97867ac46a604780

# Ruby

https://qiita.com/u651601f/items/52af880d1569c6c1066f

# PHP

https://qiita.com/mpyw/items/346c535ade9dcf6e1b12

# Java

https://qiita.com/takahirocook/items/748990882f2de7a630a1

# JavaScript

https://qiita.com/daikw/items/663bc0b5a4c025694974

# Perl

https://perlzemi.com/blog/20161026147748.html
プログラマの中国語

中二病的にゾクゾク来るIT界隈の中国語、「無限ループ」を「死循環」という辺りがツボ...
大きく2系統
- いわゆる「音読み」に基づくもの
- 漢字の意味に基づくもの

ということで、好きな中国語をまとめた。
[IT用語の中国語訳一覧 - Qiita](https://qiita.com/hiroyuki7/items/46b7e2b6e92c622b2991) なども参考

## 設計
- Proxyパターン 代理模式
- Strategyパターン 策略模式
- Visitorパターン 访问者模式

https://github.com/ascoders/weekly/tree/master/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F

- データベース database 数据库
- デフォルト default 黙示値
- エコシステム ecosystem 生态系统、生态体系 / 生態系
- 無限ループ infinite loop 死循环 / 死循環
- インフラ infrastructure 基础
- インターネット internet 互聯網
- ネットワーク network 网络 / 網絡
- プロトコル protocol 通信规约 / 通信規約
- セキュリティ security 安全
- サーバー server 服务器 / 服務器
- 仮想 virtual 虚拟的
- VPN Virtual Private Network 虚拟专用网络
- プログラム program 程序 
- オブジェクト指向プログラミング object-oriented programming  面向对象的程序设计
- ポリモーフィズム Polymorphism 多态
- カプセル化 Encapsulation 封装
- クラス class 类 
- インターフェイス interface 接口
- アクセストークン access token 访问令牌


## 企業
- Google　谷歌
- Amazon　亚马逊 / 亜馬遜
- Microsoft　微軟
- Cisco　思科
- Red Hat　紅帽
- Oracle　甲骨文
- Intel　英特尔 / 英特爾
- HP 惠普
- Symantec 赛门铁克
- DELL 戴尔
- ヤフー 雅虎
- Facebook 脸書
- IIJ 艾杰

https://www.iij.ad.jp/global/column/column42.html




## 参考
- Weblio 日中・中日辞典 https://cjjc.weblio.jp
- Wikipedia [软件 - 维基百科，自由的百科全书](https://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6)

## gitHubのトレンドにも中国語
- https://github.com/doocs/advanced-java
- [【随時更新】中国語のプログラミング・IT用語は案外わかりやすいかも - Qiita](https://qiita.com/ruteshi_SI_shiteru/items/a468ac134f1d51ca2934)
【夏休み企画】#IT用語一問一答【毎朝投稿24日目】QUIC

# この記事を読むと、、
- 「関連用語」を使って「QUIC」を説明できるようになる
- 「QUIC」がもっと好きになる(多分)

# 関連用語
head-of-line blocking / HTTP/3

[**復習用**] 記事の内容を見る前に上記の言葉で「QUIC」を説明してみよう！

# 企画説明
- クラウドって何？って人に聞かれて説明してるけど俺もよく知らないや、、
- ドキュメント読んでみてるけど半分くらい何言ってるか分かんない、、
- 今日の夕飯はナスの炒めものにしよっかな〜、あれ、NASってなんだっけ？

みたいなことが結構あったので、知ったかしていたIT用語を毎日一個ずつちゃんと学んでいこうっていう企画です！

昨日の記事はこちら↓

https://qiita.com/acta/items/dbdd73d09543125a20dd

# QUICとは
QUIC = UDPを基盤としたTCPの代替となるトランスポートプロトコル

- Google QUIC = gQUIC = Googleがchromium上に実装していたプロトコル
- IETF QUIC = iQUIC = Google QUICがIETFに持ち込まれ、諸々の修正を経て出来上がった汎用プロトコル
    - RFC 9000で標準化
    - 以降はIETF QUICについて説明するよ

- TCPの代替なので、UDP上といっても再送制御、輻輳制御などの機能を備えている

- **head-of-line blocking**を解決
    - cf. (トランスポート層の)head-of-line blocking = 多重化したストリームの一つがパケットロスすることですべてのストリームが通信を待たされてしまう現象
    - QUICではパケットロスしても他のストリームに影響しない

- プロトコル内部に組み込まれたTCP/1.3で暗号化

- **HTTP/3** = 2022年にRFC9114として標準化されたHTTP
    - QUICをトランスポートプロトコルとして用いている
    - QPACKアルゴリズムでヘッダ圧縮を行う
        - HTTP/2ではHPACKを用いた


# 参考資料
- https://www.chromium.org/quic/
- https://www.rfc-editor.org/rfc/rfc9000.html
- https://www.nic.ad.jp/ja/newsletter/No68/0800.html
- https://blog.cloudflare.com/the-road-to-quic/
react-router-dom v5⇨v6のhistoryの置換

どうも、React初心者です。

先日、UdemyでReactを始めました。
(https://www.udemy.com/course/firebase-react-hookstypescriptweb/)
そこで使用したコードを
なんとなくreact-router-dom v5 ⇨ v6へ移行していたとき、

App.ts(旧)だと、
props.historyで
```
TypeError: Cannot read properties of undefined (reading 'push')
``` 
ってエラー出ました。

- App.ts（旧）
```App.ts
import React, { useState, useEffect } from 'react';
...


const App: React.FC = (props: any) => {
...
  useEffect(()=>{
    const unSub =auth.onAuthStateChanged((user)=>{
      !user && props.history.push("login")
    });
    return () => unSub();
  });
...

  return (
  ...
  );
}

export default App;

```

エラーはDoc等で解決しました。

react-routerではRouteコンポーネントの render prop　をv6からサポートを削除、historyをnavigateへリプレイスしたとのこと。
history.pushに関してはuseNavigateに置き換えれば、問題なさそう。

https://reactrouter.com/en/v6.3.0/upgrading/v5

https://github.com/remix-run/react-router/issues/8146



- App.ts（新）
```App.ts
import React, { useState, useEffect } from 'react';
...
import { useNavigate } from "react-router-dom";

const App: React.FC = (props: any) => {
  const navigate = useNavigate();
  ...
  useEffect(()=>{
    const unSub =auth.onAuthStateChanged((user)=>{
      !user && navigate("login")
    });
    return () => unSub();
  });
...

  return (
  ...
  );
}

export default App;

```

ということで無事動きました。
（React初心者なので、どこか理解間違っていたら教えてください）
2022/9/24主にITとかセキュリティの記事

2Kがユーザーサポート関連への不正アクセス被害報告―公式アドレスから悪意のあるメールが送信されていることへの注意喚起も【UPDATE】(9/23)
https://gunosy.com/articles/ecrjy

警察庁が2022年上半期のランサムウェア被害状況を調査、調査・復旧費用は1,000万円以上が55％を占める(9/22)
https://scan.netsecurity.ne.jp/article/2022/09/22/48223.html

ニトリ、13万2000件の個人情報流出の可能性　氏名や電話番号、クレジットカード番号の一部も(9/21)
https://www.fukuishimbun.co.jp/articles/-/1634202

サイバー関連の相談　上半期１０２２件　去年同時期より増加(9/22)
https://www3.nhk.or.jp/lnews/toyama/20220922/3060011476.html

2022年上半期はサプライチェーンリスクが国内で具体化、トレンドマイクロ上半期レポート(9/22)
https://scan.netsecurity.ne.jp/article/2022/09/22/48222.html

Javaで書いた4行のコード、依存関係をたどると51万行に――超複雑化するソフトウェア構成、SBOMで探るには(9/22)
https://atmarkit.itmedia.co.jp/ait/articles/2209/22/news013.html

パソコンのウイルス感染を防ぐには？ 3つの重要ポイントを解説(9/22)
https://news.mynavi.jp/techplus/kikaku/20220922-security_frontline_v177/

防衛省のサイバーセキュリティ調達基準の元となったNIST SP 800-171とは？～日本企業が取り組むべき対策を解説～(9/21)
https://www.trendmicro.com/ja_jp/jp-security/22/i/securitytrend-20220926-01.html

先週のサイバー事件簿 - リクルートの中学生向け講座で他人のアカウントにログインできる不具合(9/21)
https://news.mynavi.jp/article/20220921-security/

フィッシングによるものとみられるインターネットバンキングに係る 不正送金被害の急増について（注意喚起）(9/22)
https://www.npa.go.jp/cybersecurity/pdf/20220922press.pdf

フィッシング詐欺？ネットバンクの不正送金被害が8月から急増で警察庁が注意喚起　今年上半期の被害額を8月からの1か月半ですでに上回る(9/22)
https://newsdig.tbs.co.jp/articles/-/160667?display=1

教育機関のランサムウェア被害が増加　ソフォスの業界別の調査レポートで明らかに(9/22)
https://enterprisezine.jp/news/detail/16666

AWS Cognitoを導入し、認証画面を作成してみた！(9/20)
https://qiita.com/ps-uema/items/53fc5c8f69e037f0b98e

「Microsoft Teams」2022年8月のアップデートまとめが公開 ～自動文字起こし機能が利用可能に
共有コンテンツを別のウィンドウにポップアップ表示する機能も(9/22)
https://forest.watch.impress.co.jp/docs/news/1442018.html

イーサリアムのシャーディング、スケーラビリティのトリレンマを解決できる＝専門家(9/22)
https://jp.cointelegraph.com/news/sharding-could-resolve-ethereum-scalability-trilemma-says-researcher

仮想通貨決済のスマホアプリをOSSで公開(9/22)
https://prtimes.jp/main/html/rd/p/000000002.000108488.html

ベトナムを救ったアルゴリズムがネパールでも活躍　データ分析“驚きの汎用力”(9/22)
https://techtarget.itmedia.co.jp/tt/news/2209/22/news02.html

SSDとHDD、その捨て方で本当に大丈夫？ノートPCの内蔵ストレージなど、重要データ抹消方法を専門家に聞く(9/22)
https://pc.watch.impress.co.jp/docs/topic/feature/1439040.html

コインベース・クラウド、Web3開発者プラットフォームがデビュー(9/22)
https://jp.cointelegraph.com/news/coinbase-cloud-debuts-web3-developer-platform

「次のフロンティアはメタバース」アクセンチュアに3D都市モデルの可能性を聞く(9/22)
https://ascii.jp/elem/000/004/105/4105387/

スマホのセキュリティ対策実施状況をラックが調査、性別や年齢で大きな差も(9/22)
https://news.mynavi.jp/techplus/article/20220922-2460735/

オープンソースとは？　企業や国家の利用も広がるソフトウエアの実力(9/22)
https://business.nikkei.com/atcl/gen/19/00081/040500348/

職場でまん延する「ログイン疲れ」、働く気をゼロにする「現代病」の弊害とは(9/22)
https://atmarkit.itmedia.co.jp/ait/articles/2209/22/news100.html

国産パケットキャプチャでネット解析　プロじゃなくても異常・障害がわかる!(9/22)
https://businessnetwork.jp/article/10891/

セキュリティ担当者が燃え尽きる“本当の原因”とは？(9/22)
https://techtarget.itmedia.co.jp/tt/news/2209/22/news10.html

政府、クラウドを活用した産業データのセキュリティー強化を促進（フランス）(9/22)
https://www.jetro.go.jp/biznews/2022/09/cf570e0494613b7b.html

パテントトロールによるオープンソースプロジェクトへの攻撃が急増している理由(9/21)
https://japan.zdnet.com/article/35193282/

WordPress、アップロードされたJPEG画像をWebpに自動変換する機能先送り(9/22)
https://news.mynavi.jp/techplus/article/20220922-2459794/
CSS(SCSS) で Windows/Apple/iPhone/iPad/Macintosh/Chrome/Safari/Firefox/Edge/... などの分岐を仕込む手口のメモ

# 解決したいこと

- XXXX環境だとスクロールバーが出ないので `grid` がズレる💀
- XXXX環境だと `flex` で中央に寄せてるはずなのに下にズレる💀

などなどそういうやつらにチームのデザイナーさんやコーダーさんが時間と精神力を無駄に浪費して死んでしまう事態💀

# やること

ユーザーが視認するより前に動きそうな辺りで `script` で分岐に必用な環境判定処理を行い `documentElement` の `classList` にぶちこむ。力こそパワー！💪

```js
 // ⇩ 実際には必用な分岐だけ設置すれば十分です。
 if (navigator.userAgent.match(/Chrome/))
  document.documentElement.classList.add('device-Chrome');
 else if (navigator.userAgent.match(/Safari/))
  document.documentElement.classList.add('device-Safari');
 else if (navigator.userAgent.match(/Firefox/))
  document.documentElement.classList.add('device-Firefox');
 else if (navigator.userAgent.match(/Edg/))
  document.documentElement.classList.add('device-Edge');
 if (navigator.userAgent.match(/Windows/))
  document.documentElement.classList.add('device-Windows');
 if (navigator.userAgent.match(/Linux/))
  document.documentElement.classList.add('device-Linux');
 if (navigator.userAgent.match(/iPhone/))
  document.documentElement.classList.add('device-iPhone', 'device-Apple');
 if (navigator.userAgent.match(/iPad/))
  document.documentElement.classList.add('device-iPad', 'device-Apple');
 if (navigator.userAgent.match(/Macintosh/))
  document.documentElement.classList.add('device-Macintosh', 'device-Apple');
 if (navigator.userAgent.match(/Android.+Mobile/))
  document.documentElement.classList.add('device-Android', 'device-Android-Mobile');
 else if (navigator.userAgent.match(/Android/))
  document.documentElement.classList.add('device-Android');
```

# ⇨ CSS(SCSS) で簡単に分岐できる

```scss
.some-selector {
 width: 10em;
 // SCSS の後置き & を使う (pure な CSS なら親要素側から素直に書く)
 html.device-Safari & {
  width: 11em;
 }
}
```

# 参考

- https://aya404.com/blog/develop/352_touch-device-css/
  - 原型として参考になりました。この記事では "touch っぽいデバイスで分岐" しています。Thank you❣

# なお…

本来はこのような仕込み分岐の要らないキレイなCSS1つであらゆる環境でデザイナーとユーザーの期待通りに動作してくれる事が望ましいし、あまりこうした本来仕様にない分岐を外から注入すべきではないのは言うまでもありません。わかった上で使いましょう…。悲しみ。
solidityで外部コントラクトと接続する方法

既存の記事がありましたがsolidityのバージョンが上がったことで動作しなくなっていたため以下の記事を参考にし改良しました。

参考にさせていただいた記事
【Solidity】ブロックチェーン上の外部コントラクトの関数を実行する方法
@ryu-yama(株式会社FromTo) 様
https://qiita.com/ryu-yama/items/bc94b43a0d0a20de12c7

勉強を始めたばかりですので間違いなどあるかもしれませんがご容赦ください。

## 実行の流れ
1.既存のコントラクト sub.sol=>Memo をデプロイ
2.Memoのコントラクトアドレスをコピー
3.呼び出し元のコントラクトに interfaceを定義する
4.呼び出し元のコントラクト内で2.でコピーしたコントラクトアドレスを貼り付ける
5.4.のコントラクトアドレスを引数として宣言を行う
6.呼び出し元のコントラクト内で実行を行う


### プログラム
#### main.sol
```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

interface MemoInterface {
    function getMemo(address _myAddress) external view returns (string memory);
}

contract MyContract {
  // 使用したいコントラクト(BloodTypeコントラクト)のイーサリアム上のアドレス
  address BloodInterfaceAddress = 0x794387c524f7......................;
   MemoInterface memoContract =  MemoInterface(BloodInterfaceAddress);

  function execFunction() public view returns (string memory) {
    string memory memo = memoContract.getMemo(msg.sender);
    return memo;
  }
}
```

#### sub.sol
```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

contract Memo {
  mapping(address => string) memos;

  function setMemo(string memory _memo) public {
    memos[msg.sender] = _memo;
  }

  function getMemo(address _myAddress) public view returns (string memory) {
    return memos[_myAddress];
  }
}
```
AWS初心者は必ず読むべき！必見！AWSの基本⑨RDSを冗長化

# この記事を読む前に



# この記事の概要
この記事で行う捜査は****サービスを継続的に利用する状態***にすることが目的です。
WEbサーバーとDBサーバーを***２台以上にして冗長化***していきます。
1台あること前提なので１台増やしていきます。
ここでは```マスタースレーブ方式```にします。

## この記事の目的
DBサーバーを増やすのは目的です。


# マスタスレーブ構成
***RDSでマスタスレーブ構成にするにはマルチAZの機能***を使います。
同じエンドポイントで接続し、アベイラビリティゾーンはレプリケーション（複製)します。

まずRDSに移動します。

![スクリーンショット 2022-10-10 4.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/4d628944-98bc-0be9-1265-c2f237e1338b.png)

設定のマルチAZなしが確認できると思います。

![スクリーンショット 2022-10-10 4.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/3fa4b147-4e35-3865-8e73-2a6981d5a9be.png)

変更のボタンをクリックします。
![スクリーンショット 2022-10-10 4.06.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/ad223bc9-dabc-147a-e758-be882e7ef323.png)

マルチAZの配置をします。そして続行をクリックします。

![スクリーンショット 2022-10-10 4.08.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/1ed17b96-0089-fa64-28b7-28b958c2a9bc.png)

変更のスケジューリングはすぐに適用をクリックします。
そしてDBインスタンスの変更をクリックします。

![スクリーンショット 2022-10-10 4.09.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/65b8907a-2585-8ffe-e38b-b16d4ebe219e.png)

ステータスは利用可能になっています。

![スクリーンショット 2022-10-10 4.24.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/0e04f897-1689-fa50-5585-06d0fde1a0db.png)

マルチAZもありになっています。
![スクリーンショット 2022-10-10 4.24.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/58ecb12d-2db6-28fd-02f3-26ec2f8d1fcf.png)

aws-infraは１つでは裏では２台動いていることになっています。
![スクリーンショット 2022-10-10 4.25.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/10bcd90f-def7-78cf-a5d5-aa50b415a91f.png)




# 資料

https://www.udemy.com/course/aws-and-infra/?aEightID=s00000016735001&AID=190908007224&a8=PlQKLlknX1zBDBaq.wzJncu_p1fqzQucJwA5k1yg05hnX1QlC1QHRJzHrD0GZGuAv56JgVQTvlQKjs00000016735001
Blender奮闘記⑦

# 初めに
前回の終わりに、クリームソーダを回そうとか言ってましたが、たくさんの素材から生成された物体を回す方法がわからなかったため、いったん保留としました。その代わりにyukiさんの動画を進めます。モンブランを作ろうを見ながらモンブランを作成します。
動画は以下になります。

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

# 作成経過
モンブランの作成というよりも上にかかっているクリームの作成が作成時間の7割くらいでした。

![スクリーンショット 2022-09-23 045831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782192/2223fb7f-a382-0d60-ac1b-06da97f51977.png)

1本まともに作成し、その後それを増やして調整して……をずっと繰り返してました。上の画像でも結構雑になってしまいましたが、色がつくとあまり目立たないかなとなりました。

最後に、このような形となりました。
![Mont_Blanc_render.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782192/cf4f0dcb-66fc-cef8-c954-b899d96f9827.png)

結構悪くなさそうな出来です。

# テクスチャおさらい

ここでも重要なのはやはりシェーダーエディターの存在でしょう。上にかかっているクリーム1つに対してこれだけの設定を行っています。
![シェーダーエディター.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782192/08c5366f-3115-b92a-0cd3-98ab19bd625b.png)

ノイズテクスチャ、カラーランプ、ミックスについては前にも書いたのでここでは割愛させていただきます。中でも今回登場し何度も使ったのは「波テクスチャ」です。

[マテリアルのノードのメモ（波テクスチャ、カラーランプ）](https://caramel.hateblo.jp/entry/2018/06/07/140902)
上記ブログによると波テクスチャは「線状（バンド）または円状（リング）に…→白→黒→白→…のパターンを作る」テクスチャのようです。そのままですね。
![波テクスチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782192/4d749e36-60ab-ab49-c54b-c0b5ddabc21e.png)
[Wave Texture (波テクスチャ)ノード](https://docs.blender.org/manual/ja/2.90/render/shader_nodes/textures/wave.html)
上記リンクから詳細を確認します。よく見るとバンド(線状)設定やY(軸方向)、サイン(波の形式)の設定があります。
おそらく重要なのがY(軸の設定)です。これは波を生成する方向を決める設定です。生成する波形に対して垂直方向を設定する必要があるようです。

次に、頻繁にシェーダーエディター上でCtrl+tを押していましたが、これは何なのかも調べました。

[Blender2.9】Node Wrangler：ノード作業には必要不可欠！！](https://cgbox.jp/blender-nodewrangler/#index_id9)

このサイトよりCtrl+tをシェーダーエディター上で押すと〔マッピング〕と〔テクスチャ座標〕が接続されたノード群を生成するコマンドだったようです。頻繁にシェーダーエディター上で使用するそうなので、忘れないようにしたいところです。

バンプについて

[【バンプマップ】テクスチャで凹凸を描く方法 / 画像のピクセル感を軽減する【Blender】](https://bookyakuno.com/how-to-bump/)

バンプはテクスチャで凹凸を描くためのノードです。本当に凸凹を作るのではなく、陰影等で凸凹しているように見せかけるものです。
![バンプノード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782192/8f52d0d5-9eef-98f3-3c2c-73ec98fd3fe8.png)
強さはバンプがどれだけかかるかの量、距離は高さの差の設定となるようです。

最後にディスプレイスメントです。
[[Blender 2.8] テクスチャを使って立体的に変形 [ディスプレイスモディファイアー]](https://horohorori.com/blender-note/modifiers/deform/about-displace-modifier/)

[Displacement (ディスプレイスメント)ノード](https://docs.blender.org/manual/ja/2.90/render/shader_nodes/vector/displacement.html)
これら2つのサイトから、テクスチャ的に頂点を法線方向に移動させることがこのノードの役割だと思われます。
実際、特にいじらずにノードを接続すると、磁石に砂鉄がくっついたような見た目となっていました。中間レベルは変位量の設定であり、スケールは移動量を設定するモノのようです。

これらを駆使すると上記のモンブランのようなテクスチャを作成することができます。

# 終わりに
yukiさんの動画を元にBlenderでモンブランの作成を行いました。Blenderの地道な作業の体験にはなりましたが、色がつくと思ったよりも粗が目立たないなというのも学びました。あまり力をかけなくてもいい場所、かけるべき場所も判断しながら作る必要がありますね。次もモンブランおさらいを行います。
Laravel 参考にしている記事　（自分用のメモ）

# はじめに
<!-- 発端や概要を記載 -->
メモ用として残しておきます。
どんどん追加していく予定です！
# 目次
<!-- タイトルとアンカー名を編集 -->
1. [YOUTUBE](#Chapter1)
1. [WEBサイト](#Chapter2)
1. [書籍](#Chapter3)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# 1.YOUTUBE

## 打田裕馬さん
https://www.youtube.com/watch?v=NLqO2b3xEW0&list=LL&index=1&t=2403s

<a id="#Chapter2"></a>
# 2.WEBサイト
- [https://reffect.co.jp/laravel/laravel-sail#sail_up](URL)
<a id="#Chapter3"></a>
# 3.書籍
初学者には難しく感じました！
- [https://www.socym.co.jp/book/1300](URL)
django モデルのフィールド(カラム)を全て表示する ( Model._meta.fields )

# 例

```py
User._meta.fields

(<django.db.models.fields.AutoField: id>,
 <django.db.models.fields.CharField: password>,
 <django.db.models.fields.DateTimeField: last_login>,
 <django.db.models.fields.BooleanField: is_superuser>,
 <django.db.models.fields.CharField: username>,
 <django.db.models.fields.CharField: first_name>,
 <django.db.models.fields.CharField: last_name>,
 <django.db.models.fields.EmailField: email>,
 <django.db.models.fields.BooleanField: is_staff>,
 <django.db.models.fields.BooleanField: is_active>,
 <django.db.models.fields.DateTimeField: date_joined>)
```


# チャットメンバー募集


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

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


# Twitter

https://twitter.com/YumaInaura
Larval sail をインストール！！

# はじめに
<!-- 発端や概要を記載 -->
Larval sail インストールしてみます！
今回の記事の通りに行えば、ログイン画面が初めからついてきます！！

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [Dockerをインストール](#Chapter1)
1. [Laravelをインストール](#Chapter2)
1. [sailコマンド](#Chapter3)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# 1.Dockerをインストール
https://www.docker.com/
<a id="#Chapter2"></a>
# 2.Laravelをインストール
DockerにLaravelをインストール
```言語名:zsh
% curl -s https://laravel.build/memo-app | bash
```
インストールしたディレクトリに移動して、起動
```言語名:zsh
% cd memo-app && ./vendor/bin/sail up
```
Laravelのバージョンを確認
```言語名:zsh
% sail artisan -V
```
sailコマンドを利用してDocker上のLaravel環境でテーブルの作成
```言語名:zsh
% sail artisan migrate
```

Breezeパッケージとはログイン機能のことです！
Breezeパッケージはcomposerコマンドを利用してインストールします。
```言語名:zsh
% sail composer require laravel/breeze --dev
```

```言語名:zsh
% sail artisan breeze:install
```
npmコマンドを実行し、JavaScriptライブラリのインストール
```言語名:zsh
sail npm install && npm run dev
```

<a id="#Chapter3"></a>
# 3.sailコマンド
起動コマンド
```言語名:zsh
% sail up -d
```
停止コマンド
```言語名:zsh
% sail down
```
Laravelの入ったコンテナ上でコマンドを実行
```言語名:zsh
% sail shell
```

<a id="#reference"></a>
# 参考文献
- [https://reffect.co.jp/laravel/laravel-sail#Laravel ](URL)
- [https://qiita.com/tkrtmy1031/items/80c292fab5d631c6d4ba](URL)
reactでURLの値を取得する方法

はじめに
--
ReactでURLのpathの値を取得をしたい場面があり、調べた内容を備忘録として残そうと思います。
以前URLからパラメータを取得する方法をまとめましたが、今回は'/'とその後に続くURLのpathの値を取得する方法をまとめます。

https://qiita.com/shuhei_m/items/ce8a5c168b7f2864b08c

URLの値を取得
--
値を取得するにはreact-router-domからuseLocationをimportし、pathnameプロパティを使用します。
現在のURLのpathを取得して、pathによって表示する内容を変えたい場合の記述が下記になります。

~~~react
//urlが"https://hoge.com/fuga1"か"https://hoge.com/fuga2"だった場合

import React from 'react';
import { useLocation } from "react-router-dom";

const NameQuery: React.FC = () => {
  const pathname = useLocation().pathname;

  return(
   {pathname === (`/fuga1`) &&
    <>
     <p>fuga1のページです</p>
    </>
   }
   {pathname === (`/fuga2`) &&
    <>
     <p>fuga2のページです</p>
    </>
   }
  )
}
~~~

URLの"/"以降のpathを取得できるので、pathnameの変数は下記のようになります。
~~~
urlが"https://hoge.com/fuga1"の場合
⇨pathname = /fuga1

urlが"https://hoge.com/fuga2"の場合
⇨pathname = /fuga2
~~~

このように値を取得できるようになったので、useParamsを使ってpathからidを取得したりしようと思います。


参考
--
https://v5.reactrouter.com/web/api/Hooks/useparams

https://developer.mozilla.org/ja/docs/Web/API/URL/pathname
【環境構築】Fortranでgnuplotを起動する方法

## 背景
- Fortranで計算した結果を描画するにはgnuplotを使用することが多い。
- Fortranのプログラム内からgnuplotを呼び出して表示させたいことがある。

## 目標
- Fortranのプログラム内からgnuplotを起動して表示させる。

## Fortranからgnuplotを起動するプログラム

```fortran:Fortranからgnuplotを起動してファイルロードによってグラフを作るプログラム
program anime
implicit none
character(500) :: gnu

gnu = "gnuplot > load 'ファイル名'"

call system(gnu)

end program anime
```

## 関連記事
https://qiita.com/takuma-1234/items/22f5f496a968fff74c85

## 参考資料

## 個人ブログ

https://takuma-tech.com/2023/01/13/368/
[Python] 自動的にスクショを取るプログラムの作成レポ

**初投稿につき、コメントやSuggetion等ありましたら幸いです。**

# 1. 初めに
　毎時ごとにスクリーンショットを取る必要が出たため、Pythonの勉強を兼ねて簡単なコードを作成、その後三日ほど運用しました。

# 2. 使用したものとバージョン
　Windows 10 Home: 21H2
　VS Code: 1.71.0
　Python: 3.10.1, pip: 22.2.2
　ライブラリ
　schedule: 1.1.0
　PyAutoGUI: 0.9.53

導入に際しては `pip install schedule`, `pip install PyAutoGUI`としました。
　
# 3. 書いたコードと説明
　以下のコードを使用しました。
~~~python:AutoGetFig.py
import datetime         # 現在時刻を取得するためのライブラリ
from time import sleep
import pyautogui        # スクリーンショットを取るためのライブラリ
import schedule         # 時間ごとに実行するためのライブラリ

# 保存場所の指定
currentDir = "C:\Python\screenshots\\"
# 拡張子の指定
extention = ".png"

# 実行内容の定義
def task():
    dt_Now = datetime.datetime.now()
    # 今日の日付と時間までをファイル名にする
    fileName = str(datetime.date.today()) + " " + str(dt_Now.hour) + "-" + str(dt_Now.minute) + "-" + str(dt_Now.second)
    Path = currentDir + fileName + extention
    # スクリーンショットを取って保存する
    pyautogui.screenshot().save(Path)
    # スクショを取ったらコマンドプロンプトで報告
    print("Got screenshots" + "\t" + fileName)

# 毎時ごとにtask()を実行
schedule.every().hours.at(":00").do(task)

# プロブラムを止めるまで続ける
while True:
    schedule.run_pending()
    sleep(1)
~~~

各部分について説明していきます。
## 保存場所
　保存場所についてですが、今回はCドライブのあるフォルダ上（動作プログラムとは別のもの）に保存したかったため
`currentDir = "C:\Python\screenshots\\"`
としています。
また、task関数内ではファイル名のみを扱いたかったため、この時点でバックスラッシュをエスケープさせつつ入れています。

## タスク本体
　今回は「スクリーンショットを取る」を毎時行いたいのでスクリーンショットを取る関数を作成しました。
### ファイル名について
スクショを取った時間が欲しいので
`dt_Now = datetime.datetime.now()`
として現在時刻を取ってくる変数を作っています。dtはdatetimeの略です。
したがって、実際のファイル名は
`fileName = yyyy-mm-dd(今日の日付) hh-mm-ss(その時の時間)`
となります。なお、結合などを便利にするため`fileName`の時点でdatetimeでとってきた各値（時間や秒数など）はString値にキャストしています。

### スクショを取る
スクショを取るには`pyautogui.screenshot().save("ファイルの名前.png")`とします。今回は絶対パスと組み合わせてファイルの名前を決めていますが、ファイル名のみの指定ならばカレントディレクトリ上に画像ファイルが出来上がります。
なお、`.save()`の引数はString値で拡張子込みのため、拡張子を忘れたりするとエラーを吐きます（１敗）。

## scheduleの実行
　タスク本体を実行するために２つのパーツを用意しました。
### scheduleの設定
　scheduleの実行条件（いつ何を実行するか）を書いています。
`schedule.every().hours.at(":00").do(task)`では
`.every()`と`.hours.at(":00")`で頻度を、`.do(task)`で実行する関数を指定しています。
今回は毎時０分０秒の値が欲しかったのでこのようになっていますが、例えば
”30秒ごとにスクショしたい” であれば`.every(3).seconds.do(task)`とすればいいはずです。
### 実行条件
　「いつまで（どのくらい）実行するか」をwhileを使って書いています。
今回は ”とりあえず続けて中止はコマンドプロンプトでしよう”　と考えていたので`while True`となっています。その後、`schedule.run_pending`で先ほど設定したscheduleを実行させます。

# 4. 終わりに
いかがでしたでしょうか。今回は急に必要になったためペライチ（ペラ紙一枚の意）のコードでしたが、今後頻繁に必要になるようならtkiterを使用して、ファイル名や保存先を指定できるアプリ状のものに変えようかと思います。

この記事は以下の情報を参考にして執筆しました。

- [Pythonで現在時刻・日付・日時を取得](https://note.nkmk.me/python-datetime-now-today/)
- [【Python】Scheduleモジュールを用いたイベント定期実行｜指定時間動作のスケジュール関数作成例と使い方解説](https://di-acc2.com/programming/python/4574/#index_id6)
- [【Python】PyAutoGUIによるスクリーンショットの撮影](https://self-development.info/%E3%80%90python%E3%80%91pyautogui%E3%81%AB%E3%82%88%E3%82%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%81%AE%E6%92%AE%E5%BD%B1/)
- [Qiitaで記事を公開するときに気を付けるべきマナーについて 〜無断でネットや書籍の内容を丸写しするのはやめよう〜](https://qiita.com/jnchito/items/215c2d51599eb29adabc)
学生が2週間クラウドの勉強してみた(AZ-900)

### 学習の経緯
- 夏休みインターンでAzureサービスを使ったWebサイト開発をすることになったので、それに先駆けて何も知らなかったクラウドの資格に挑戦した。
- **クラウドとは？から始まった状況**だったがAZ-900の勉強を通じて、クラウドについてのイメージは掴むことができた。
- 一方で、AZ-900は入門資格になるため、Azureのサービスについての詳細についてはこれだけでは理解はできないと思ったが大枠のイメージは掴めた(気がする！)
- 学習期間は**2週間**くらい

### 学習方法
1. [参考書](https://www.amazon.co.jp/%E6%A8%A1%E6%93%AC%E5%95%8F%E9%A1%8C%E4%BB%98%E3%81%8D-Microsoft-Azure-Fundamentals%E6%95%99%E7%A7%91%E6%9B%B8-AZ-900/dp/429501141X/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1EEKWS9NLF6BL&keywords=az900&qid=1663940713&sprefix=az900%2Caps%2C234&sr=8-1)めちゃくちゃ浅く一周
- 章末の問題みたいなのも一周だけしました。
- ほとんどUdemyの問題で間違ったところやわからないとこを調べる辞典的な感じで使用していました。

2. [Udemyの講座](https://www.udemy.com/share/1042X8/)模擬問題集1-6まで2回ずつ
- 最後の第6回は1-5回までのまとめのような感じで問題数が多いので1-5の順番は何でも良さそうですが6は最後に復習として使うのが良さそうです。
- 正直参考書がなくてもここの6回分の問題を記憶したら合格すると思います。
- Udemyの講座はセールの時に買うのがおすすめです！

### 参考書について
-![](https://i.imgur.com/ou8zT7w.png)
- 黒い本[徹底攻略 Microsoft Azure Fundamentals教科書 AZ-900対応](https://www.amazon.co.jp/%E6%A8%A1%E6%93%AC%E5%95%8F%E9%A1%8C%E4%BB%98%E3%81%8D-Microsoft-Azure-Fundamentals%E6%95%99%E7%A7%91%E6%9B%B8-AZ-900/dp/429501141X/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1EEKWS9NLF6BL&keywords=az900&qid=1663940713&sprefix=az900%2Caps%2C234&sr=8-1)
    - 私的には見やすかった&Amazonの評価良かったので選びました
    - 参考書の章末問題だけでは厳しいと思います。


![](https://i.imgur.com/M5iCzmM.png)
- 白色の合格対策[ Microsoft認定 AZ-900:Microsoft Azure Fundamentalsテキスト&問題集](https://www.amazon.co.jp/%E5%90%88%E6%A0%BC%E5%AF%BE%E7%AD%96-Microsoft%E8%AA%8D%E5%AE%9A-AZ-900-Microsoft-Fundamentals%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/dp/4865942319/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1EEKWS9NLF6BL&keywords=az900&qid=1663940713&sprefix=az900%2Caps%2C234&sr=8-3)
    - 他の資格所有者の話では、こちらがいいという話もちらほら聞きました




### 受験時の注意点
- 受験料について
    - [マイクロソフト公式の特典](https://www.microsoft.com/ja-jp/events/top/training-days/)を使用すると無料で受けられるようです。
    - 普通に受けると12500円します、、。
    
- 受験方法について
    - 在宅受験とテストセンターを選択できます
    - 私は在宅受験を選択しましたが、室内の環境の点検(監督官とチャットしながらなので手間がかかりました。)や近くの本棚に手が届かないかなど厳密なチェックがあります。
    - 部屋の片付けを指示されることもあるようなので面倒な方はテストセンターの方がいいと思います。
connpassイベントの人気ランキングを閲覧できるサイトをstreamlitで実装してみた

connpassには有意義なイベントがたくさん開催されておりとても利用しています。
人気があるconnpassイベントの傾向が見れるサイトがあったらいいのにと思ったふしから
今回connpassAPIとstreamlitを用いてランキングがわかるサイトを作ってみました。

# streamlit

## streamlitとは

https://streamlit.io/

streamlitとはフロントエンドの技術（HTML･CSS･Javascript）を用いずにpythonだけでwebサイトを作成できるpythonフレームワークです。
Streamlitは、plotly、matplotlib、pandas、numpyのような様々なデータ処理、可視化ライブラリなどとの連携をサポートしているおり、webでデータを可視化することができます。

詳しくはこちらをごらんください

https://qiita.com/tamura__246/items/366b5581c03dd74f4508

## streamlit Cloudとは

streamlitで作成したwebアプリをホスティングできる実行環境です。
streamlitCloudにデプロイされたwebアプリは外からアクセス可能なサイトとして利用できます。
実行環境も利用できるのはありがたいですね。ちなみに2022/09/23時点では無料でした。

デプロイする際はGithubと連携してリポジトリやブランチを指定します。
（リポジトリ上のpythonファイルの直リンクを指定することもできました。

詳しくはこちらをごらんください

https://camp.trainocate.co.jp/magazine/streamlit-web/

# 作ったもの

[connpassイベントの人気ランキング](https://otowmoyarng-eventanalysis-srctop10-0qfuoc.streamlitapp.com/)

向こう７日間で開催されるconnpassイベントの申込数をランキング形式で表示したサイトです。
現時点の実力ではここまでしか作成できなかった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150628/9c05bf1b-e8db-2502-c38a-b7db113d87b7.png)

## なぜ作ったのか

私はconnapssのイベントにはよく参加しており、企画や運営をすることもあります。
イベントを企画すること運営することは思った以上に大変なんです。運営者には頭上がらない。
たくさんのイベントに参加した経験から、イベント運営に役立てるものがないかと考えていました。
イベントについて何かを可視化することができればイベントへのフィードバックに繋がるのではという思いから、
運営者に貢献できるような仕組みを構築することに取り組みました

## 今後実装したいこと

まずはURLをリンク形式で表示できるようにしたい。
次はイベント内容を分類する可視化したい。下記のメリットがあるのではないかと思っています。

1. イベント内容の分類結果と参加者数を可視化することでイベントの流行が可視化される。関心が高い技術領域や開催形式が
1. SNSへの投稿数を表示することで参加者のリアクションが可視化できる。イベントの盛り上がりも可視化できる。

# まとめ

pythonだけの知識でwebアプリを作れるstreamlitは便利
特にstreamlitCloudで実行環境を簡単に構築できることは大変ありがたい。
Django等のwebフレームワーク使ってたら環境面でもっと苦悩することが多かったでしょう。

個人開発ではノリで初めてみたものの、わからないことが増えてきて途中であきらめることが多く、
再開できる状況になっても当初のモチベーションもないので進まないことも多かったです。
そんな思いから今回は期限を決めてチャレンジHackathonに参加してみました。

https://embodiea-lab.connpass.com/event/256835/

実現したいことが全部実装できることは99％ないので

* 一番やりたいことだけはやる
* できない理由がわかるまではやる

そこだけ決めて今後も取り組んでいきたいと思います。

最後まで読んでいただきありがとうございました
paizaラーニング レベルアップ問題集 ソートメニュー応用編 JavaScript ソートによる高速化まとめ

ソートによる高速化まとめ (paizaランク B 相当)

https://paiza.jp/works/mondai/sort_advanced/sort_advanced__problems_speedup_boss

ポイントは、get(k): 数列 A の中から大きい順で k 番目の値を出力するとき、
元の数列Aを変更しないように`.slice()`でコピーを作り、
`.sort((a, b) => b - a)`で大きい順に並べ替えているところです。

```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//数列の要素数 N とクエリの数 Q 
const [N, Q] = lines[0].split(" ").map(Number);
//数列 A
const A = lines[1].split(" ").map(Number);

//クエリに答えていく
for (let i = 1; i <= Q; i++) {
    //クエリの種類 query, k 番目の値, 変更する値 x
    const[query, k, x] = lines[1 + i].split(" ")
        //k,xだけを数値変換
        .map((v, j) => j === 0 ? v : Number(v));

    if (query === "update") {
        //列の先頭から k 番目の値を x に変更
        A[k - 1] = x;
    } else if (query === "get") {
        //数列 A の中から大きい順で k 番目の値を出力
        //元の数列Aを変更しないように.slice()を入れています
        console.log(A.slice().sort((a, b) => b - a)[k - 1]);
    }                        
}
```
scoopでgitの代わりにmingitを使う

# この記事の概要

[scoop] では、任意の `bucket` を扱うには `git` パッケージを入れろと指示が出る。

よくよく確認すると、 [scoop] の `main` bucketに含まれる、gitを含むパッケージは `git` と `mingit` の二種類あって、フットプリントがそれぞれ200MB, 50MBと大きく差がある。

じゃぁ小さい `mingit` を使えないのか。
また `git` と `mingit` の何が違うのか。


# まず簡単な結論

もちろん使える。

間違って普通に `git` をインストールした人がほとんどだと思うので、普通に `git` をuninstallして `mingit` をインストールする。ただそれだけ。

```
>scoop uninstall git
>scoop install mingit
```


# 何が違うのか

`mingit` に含まれないのは以下くらいなんじゃないかな。

- git gui 関連のコマンドは含まれない
- bashなどのshell関連由来コマンドは含まれない
- readline関連など、コマンドライン支援のライブラリはリンクされてない
- opensshも別枠。（ `mingit` インストール時に警告される。そもそもWin10の標準に含まれるから要らないよね。。）

ちなみに、scoop関連で支障がないことを確認してるだけです。
（フットプリント小さくしたいのが主で、だいたいのところが使い分けできれば十分なので）
興味のある人は元記事関連確認の上、すみませんがコメントで指摘をください。

# 参考

[海外で普通に疑問に思ってた方がおられたようだ](https://github.com/ScoopInstaller/Scoop/issues/3843)。
（…が、回答はない。今さらissueの回答ぶら下げる気にもなれず…というかcloseされてるね）


[scoop]:<https://qiita.com/tags/scoop>