OmniAICreator/Qiita-1.07M huggingface dataset:
ガンタンクをRaspberry Piで動かすことを目指す#4 RaspberryPi導入編

[ガンタンクをRaspberry Piで動かすことを目指す#3 タミヤキット作成編](https://qiita.com/never_nothing_jp/items/c62fb219c1ec42a0b7cc)
の続き

今回はRaspberryPiの導入について書く。
やっとQiitaっぽいことを書ける。

#1.RaspberryPiの用意
今回は小型のRaspberryPi Zero WHを使う。

RaspberryPI ZERO はGPIOのピンが付いているWHと
GPIOのピンが付いていない無印のものがあるので購入時に注意すること。
今回はGPIOのピンが付いているWHの方を使う。

[RaspberryPI ZERO WHの写真]

写真のRaspberryPI ZERO WHは既にヒートシンクを付けたもの。

##他に用意するもの
・<b>Micro SDカード</b>
余裕を見て64GBのものを使用した。
Class10のものを使うこと。
・<b>電源用ACアダプタ</b>
5V2.4A～3A対応のUSBで給電できるもの。
スマホに付属のものは電流が足りないことが多いのでできれば別途用意することをお勧め。
・<b>電源用のUSBケーブル(micro USB Type-B <-> USB Type-A[ACアダプタに対応したもの])</b>
5V2.4A～3Aの充電対応タイプのものを使うこと。
これもスマホについている充電用のものでは電流が足りないことが多いので別途購入することをお勧め。
・<b>ディスプレイ</b>
OSのインストール時に必要となる。
HDMI対応のもの。
・<b>HDMIケーブル</b>
RaspberryPiに刺す方がMINI HDMIなので片方がMINI HDMIのもの。
場合によっては変換機をかます。
・<b>USBマウス</b>
OSのインストール時に必要となる。
・<b>USBキーボード</b>
OSのインストール時に必要となる。
・<b>USB HUB</b>
RaspberryPiに接続する側がMicro USB Type-Bに対応したもの(場合によっては変換ケーブルをかます)
RaspberryPi ZERO WHのUSBポートが2つしかなく片方が電源用なので、
マウスとキーボードを接続するためにUSB HUBが必要になる。
・<b>USBホスト変換アダプタ micro USB オス-USB A メス</b>
RaspberryPi側がmicro USB(メス)なのでUSB Aとの変換ケーブルが必要になるかもしれない。
・<b>無線LAN環境</b>
今回は無線LAN経由でOSをインストールする。
・<b>Micro SDカードに書き込みができる環境</b>
ノートPCであればSDカードを刺せる場合が多いがディスクトップ機など
SDカードを刺せない場合は別途USBによるSDカードアダプタを用意する。
・<b>Windowsパソコン</b>
Micro SDカードにOSを書き込むのに必要。
LinuxやMacOSでも可能であるが今回はWindows10で行う。

#2.RaspberryPiにOS(Raspbian)を導入
DebianをRaspberryPi用にビルドされたRaspbianというOSを導入する。

##2-1.MIcro SDカードのフォーマット
Micro SDカードは64GB未満のものは購入時はFAT32でフォーマットされているが、
64GB以上の場合は購入時はexFATでフォーマットされている。
しかしRaspberryPiはFAT32でフォーマットされたものしか認識できない。
よってFAT32にフォーマットしなおす必要がある。
フォーマットには以下のようなソフトを使う。
[MiniTool Partition Wizard Free版](https://www.partitionwizard.jp/free-partition-manager.html)
使い方まではここでは書かない。

##2-2.NOOBSのダウンロードとMicro SD カードへの書き込み
[Raspberry Piの公式サイト](https://www.raspberrypi.org/)へ行き、
DownloadsをクリックしてNOOBSをダウンロードする。
NOOBSというのはRaspberryPiに各種OSをインストールするパッケージソフト(ツール)である。
ここではNOOBS LiteのZIPファイルをダウンロードする。
ダウンロードしたZIPファイル(ここではNOOBS_lite_v3_2.zip)を展開してその中身を
先ほどフォーマットしたMicro SD カードにコピーする。
書込んだMicro SD カードをRaspberry Pi ZERO WHに差し込む。

##2-3.OS(Raspbian)のインストール
Raspberry Pi ZERO WHにUSBハブ、USBキーボード、USBマウス、HDMIディスプレイを繋ぎ、
最後に電源用USBケーブルをつなぐ。

ラズベリーの表示がでて、しばらくするとIPアドレスが取得できない旨の表示が出るので、
無線LANのIDを選択してパスワードを入れる。

画面の下の「Language」で日本語を選ぶと表示が日本語になる。

画面中央にインストールできるOSの一覧がでるので「Raspbian Lite」を選ぶ。
これはGUIがないDebianである。

「インストール」を押すと本当にインストールしていいのか聞いてくるので「はい」でインストールを開始する。

しばらく待つとRaspbianのインストールが完了する。
「OSのインストールが完了しました」
と表示がでて「はい」を押せば再起動する。
コンソール表示がでれば成功。

これ以降の設定は続きで。
[ガンタンクをRaspberry Piで動かすことを目指す#5 RaspberryPi設定編](https://qiita.com/never_nothing_jp/items/14ae6352923beed9b374)
地理的最近傍データを検索（MongoDB）

こんにちは。
MongoDB + Python (pymongo) 利用で、与点からの最近傍データを検索する関数例です（```2dsphere``` インデックス付与を仮定）。

```$maxDistance``` も与えており、また何も検索されなかった場合には、定義しておいた ```NO_DATA``` を返すようにしました。推奨の API を用いるようにしました [^1]。

[^1]: 今回例では、```$geoNear```、```.count()``` をもしも使用すると現在は非推奨だそうです。なお「[MongoDBの地理空間インデックス・クエリ整理](https://qiita.com/fetaro/items/7f110f18c6dd9ccd0c90)」も参考になります。

```python
NO_DATA = {}
def 2dsphere_near():
  point = [135.0, 35.0]
  query = {"loc": {"$nearSphere": {
           "$geometry": {"type": "Point", "coordinates": point},
           "$maxDistance": 1000}}}  # in meter
  for nearest_data in mycollection.find(query).limit(1):
    return nearest_data
  return NO_DATA
```
HP ProBook 450 G3 でHyper-Vプラットフォームが有効化できないときの対処法

# 目的

- HP ProBook 450 G3にてHyper-Vプラットフォームが「Hyper-Vをインストールできません: ファームウェアで、仮想化サポートが無効化になっています。」と出てしまいHyper-Vを有効化できない時の対処法をまとめる。

# 実施方法概要

1. BIOSでの設定
1. Windowsの機能から有効化

# 実施方法詳細

1. BIOSでの設定
    1. 下記方法を実行してBIOSを開く
        1. 通常起動する。
        1. 「shift」を押下しながら画面上のシャットダウンをクリックする。
        1. 完全に電源が落ち切るまで「shift」は押したままにする。
        1. 「F2」を押下したまま電源ボタンを押し「hp」のロゴが2回出た後に「HP PC Hardware Diagnostics UEFI」画面が表示されるまで待つ。※初めてBIOSを起動する時は言語選択画面が表示される事がある。任意の言語を選ぶ。
        1. 「HP PC Hardware Diagnostics UEFI」画面の一番下の「終了」をクリックする。
        1. 「よろしいですか？」で「はい」をクリックする。
        1. 「Startup Menu」画面が開いたことを確認する。
        1. 「Startup Menu」画面の「BIOS Setup(F10)」をクリックする。
        1. 「Advanced」→「System Options」→「Virtualization Technology(VTx)」にチェックを入れる。
        1. 右下の「Save」→「Yes」→右下の「Exit」→Save Change?「Yes」と進む。 
1. Windowsの機能から有効化
    1. 下記の方法を実行してHyper-Vプラットフォームを有効化する。
        1. コントロールパネルを開く。
        1. 「プログラム」→「Windowsの機能の有効化または無効化」
        1. Hyper-Vの横にある「+」マークをクリックし「Hyper-Vプラットフォーム」にチェックを入れる。
        1. 「OK」をクリックする。
        1. 「今すぐ再起動(N)」をクリックする。
CodePen : HTML + JavaScriptで入力音声のスペクトルを音階上に描画してみた

<p class="codepen" data-height="700" data-theme-id="default" data-default-tab="result" data-user="kob58im" data-slug-hash="RwNdewK" style="height: 700px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="ToneAnalyzerTest">
  <span>See the Pen <a href="https://codepen.io/kob58im/pen/RwNdewK">
  ToneAnalyzerTest</a> by kob58im (<a href="https://codepen.io/kob58im">@kob58im</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

A4 = 440Hzとしています。(CDEFGAB=ドレミファソラシド)

※描画位置の調整をさぼっているため、表示が最大で半音くらいずれていそうです。気が向いたら見直します。

# キャプチャ

880Hzと440Hzのsin波を鳴らしたとき
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438183/7e3bc124-6110-219f-1544-ca50ddd12a38.png)

# アクセス権限についての注意

[JavaScriptでgetUserMediaでマイク・カメラ（ビデオ）を使うときの注意点とデバイスへのアクセス権限について](https://qiita.com/kob58im/items/ace00d6dd4ee4509a95d)

# 参考サイト

[getUserMediaで音声を拾いリアルタイムで波形を出力する](https://qiita.com/mhagita/items/6c7d73932d9a207eb94d)
【TypeScript】Qiita 週間いいね数ランキング【自動更新】

# タグ別

[`Android`](https://qiita.com/items/8b3af051428d746f26c5) [`AWS`](https://qiita.com/items/e24b6279326a462d456c) [`初心者`](https://qiita.com/items/402899ec543aff109505) [`Docker`](https://qiita.com/items/ae11fca7d2eba445b037) [`Git`](https://qiita.com/items/74eacdbf363e260981c3) [`Go`](https://qiita.com/items/49d4537d95f878b3e91a) [`iOS`](https://qiita.com/items/e61a29a383d0403e92fc) [`Java`](https://qiita.com/items/4c3f84836bfdbb137226) [`JavaScript`](https://qiita.com/items/eaa7ac5b62a0a723edbb) [`Linux`](https://qiita.com/items/362e81e53c3f9dee22f1) [`Node.js`](https://qiita.com/items/66ed7ad8f7c9673e9d50) [`PHP`](https://qiita.com/items/3318cbdbc45c6ebd4014) [`Python`](https://qiita.com/items/9d7f2ffeafb36cf59a77) [`Rails`](https://qiita.com/items/93b9e7f7d143e9ce650e) [`React`](https://qiita.com/items/f9712f8acace22815b99) [`Ruby`](https://qiita.com/items/72c3d2e896bdc3e1a6b3) [`Swift`](https://qiita.com/items/e2b6f0645e29f0e2b761) [`TypeScript`](https://qiita.com/items/25b7c0870afa6d41d19b) [`Vim`](https://qiita.com/items/f5361177baef95e447d1) [`Vue.js`](https://qiita.com/items/2774e02c6eea5c830d99) 

# 集計について

- 集計期間: 2025-06-16 ~ 2025-06-23
- 条件: ストック数が **2** 以上の記事


# GitHub

https://github.com/koki-develop/qiita-ranking

スターをもらえるととっても励みになります :bow:

# いいね数ランキング

## 1 位: [【TypeScript】as const の使いどころ・注意点まとめ](https://qiita.com/Yasushi-Mo/items/fed7712c385433a2585e)

[`TypeScript`](https://qiita.com/tags/TypeScript) 
**8** いいね　**2** ストック
[@Yasushi-Mo](https://qiita.com/Yasushi-Mo) さん ( 2025-06-18 08:47 に投稿 )

## 2 位: [StaticQL: 静的ファイルをクエリできる TypeScript ライブラリを作りました](https://qiita.com/migiwa-ya/items/47548b1e1f180416eca6)

[`JavaScript`](https://qiita.com/tags/JavaScript) [`TypeScript`](https://qiita.com/tags/TypeScript) [`フロントエンド`](https://qiita.com/tags/フロントエンド) [`OSS`](https://qiita.com/tags/OSS) [`JAMstack`](https://qiita.com/tags/JAMstack) 
**2** いいね　**2** ストック
[@migiwa-ya](https://qiita.com/migiwa-ya) さん ( 2025-06-20 18:17 に投稿 )

## 3 位: [TSの鬼 第1回：TypeScriptは“考えさせてくるJS”である](https://qiita.com/mukai3/items/044269903848d3a5183f)

[`JavaScript`](https://qiita.com/tags/JavaScript) [`初心者`](https://qiita.com/tags/初心者) [`TypeScript`](https://qiita.com/tags/TypeScript) 
**1** いいね　**2** ストック
[@mukai3](https://qiita.com/mukai3) さん ( 2025-06-19 14:06 に投稿 )
Unity入門 03 スワイプの距離

# やったこと
Unityの教科書 Unity2019完全対応版 2D&3Dスマートフォンゲーム入門講座の4章。

# スワイプの長さ（距離）判定
- スワイプの開始はGetMouseButtonDownで求まる
- スワイプの終了はGetMouseButtonUpで求まる
- タッチした位置はInput.mousePositionで求まる
- 終了位置から開始位置を引いた距離がスワイプの長さ

# 音を鳴らす
- コンポーネントにアタッチする
- GetComponent<AudioSource>().Play();

# 終わりに
音をつけられるようになると俄然ゲームっぽくなってきた。
1本の棒を1cmごとに切り分ける(Ruby)

１本の棒があり、それを複数人で半分に切っていって、最終的に1cmのかけらの集合体にします。
ただし、１本の棒を同時に切ることが出来るのは１人だけです。（切り分けられた棒が2つあれば、同時に２人で切ることが出来る。）

#####m人の人がいる時に、長さncmの棒は最低何回で1cmのかけらの集合体になるかを考えていきます。

##考え方
棒の長さとかけらの数、切られた棒の個数と人の数によって処理を変えていきます。

###まずはかけらの個数が棒の長さよりも大きくなった場合の処理を書きます

```ruby:qiita.rb
def barcutting(people, length, pieces)
  if pieces >= length
    0
  end
end
```
ここでは、長さをlength(cm)、人数をpeople(人)、かけらの数をpeices(個)とします。
また、barcutting関数を定義し、値が与えられると自動的に切り分ける回数を返す様にします。

piecesは最終的には1cmになっているはずなので、その合計の長さが元々の棒の長さ(length)以上になった場合に、切る回数のカウントを止めています。

###次にかけらの個数より切る人数が多い場合の処理を書いていきます
```ruby:qiita.rb
def barcutting(people, length, pieces)
  if pieces >= length
    0
  else pieces < people
    1 + barcutting(people, length, pieces * 2)
  end
end
```
かけらの数よりも人数が多い場合は、全てのかけらを半分に切ることが出来るので、かけらの数は２倍になります。ここではbarcutting関数の中で再度barcutting関数を呼び出して、piecesの数を２倍にしています。また、その際に１を足すことで、切る回数のカウントも1つ増やしています。


###最後に切る人数よりかけらの個数が多い場合の処理を書いていきます
```ruby:qiita.rb
def barcutting(people, length, pieces)
  if pieces >= length
    0
  elsif pieces < people
    1 + barcutting(people, length, pieces * 2)
  else
    1 + barcutting(people, length, pieces + people)
  end
end
```
切る人数よりもかけらの数が多い場合は、全てのかけらを半分に切ることができません。１本の棒（かけら）を同時に切ることが出来るのは１人だけです。なので、人数分のかけらだけ半分に切ることができます。
ここでは再度関数内でbarcutting関数を呼び出し、piecesの数に人数分の値を加えています。そうすることで、人数分だけ、かけらの数を増やす事が出来ます。また、その際に切る回数のカウントも1つ増やしています。

###答え
```ruby:qiita.rb
def barcutting(people, length, pieces)
  if pieces >= length
    0
  elsif pieces < people
    1 + barcutting(people, length, pieces * 2)
  else
    1 + barcutting(people, length, pieces + people)
  end
end
puts barcutting(3, 20, 1)
puts barcutting(5, 100, 1)
```
```ruby:qiita.rb
8
22
```

###ちなみに
再帰関数を使わない方法も模索中です。。。
【Vim】Qiita 週間いいね数ランキング【自動更新】

# タグ別

[`Android`](https://qiita.com/items/8b3af051428d746f26c5) [`AWS`](https://qiita.com/items/e24b6279326a462d456c) [`初心者`](https://qiita.com/items/402899ec543aff109505) [`Docker`](https://qiita.com/items/ae11fca7d2eba445b037) [`Git`](https://qiita.com/items/74eacdbf363e260981c3) [`Go`](https://qiita.com/items/49d4537d95f878b3e91a) [`iOS`](https://qiita.com/items/e61a29a383d0403e92fc) [`Java`](https://qiita.com/items/4c3f84836bfdbb137226) [`JavaScript`](https://qiita.com/items/eaa7ac5b62a0a723edbb) [`Linux`](https://qiita.com/items/362e81e53c3f9dee22f1) [`Node.js`](https://qiita.com/items/66ed7ad8f7c9673e9d50) [`PHP`](https://qiita.com/items/3318cbdbc45c6ebd4014) [`Python`](https://qiita.com/items/9d7f2ffeafb36cf59a77) [`Rails`](https://qiita.com/items/93b9e7f7d143e9ce650e) [`React`](https://qiita.com/items/f9712f8acace22815b99) [`Ruby`](https://qiita.com/items/72c3d2e896bdc3e1a6b3) [`Swift`](https://qiita.com/items/e2b6f0645e29f0e2b761) [`TypeScript`](https://qiita.com/items/25b7c0870afa6d41d19b) [`Vim`](https://qiita.com/items/f5361177baef95e447d1) [`Vue.js`](https://qiita.com/items/2774e02c6eea5c830d99) 

# 集計について

- 集計期間: 2025-06-16 ~ 2025-06-23
- 条件: ストック数が **2** 以上の記事


# GitHub

https://github.com/koki-develop/qiita-ranking

スターをもらえるととっても励みになります :bow:

# いいね数ランキング

## 1 位: [coder/claudecode.nvimを使うとNeovimとClaude CodeがIDE統合できて便利だった](https://qiita.com/getty104/items/c332e5f632da71523dbc)

[`Vim`](https://qiita.com/tags/Vim) [`neovim`](https://qiita.com/tags/neovim) [`Claude`](https://qiita.com/tags/Claude) [`ClaudeCode`](https://qiita.com/tags/ClaudeCode) 
**23** いいね　**14** ストック
[@getty104](https://qiita.com/getty104) さん ( 2025-06-17 18:17 に投稿 )

## 2 位: [VS Codeをv1.101.0にアップデートしたら日本語入力の変換がおかしくなる問題を解決する](https://qiita.com/sigma_devsecops/items/bf6f9412795ce6959c2f)

[`Vim`](https://qiita.com/tags/Vim) [`error`](https://qiita.com/tags/error) [`VSCode`](https://qiita.com/tags/VSCode) 
**2** いいね　**3** ストック
[@sigma_devsecops](https://qiita.com/sigma_devsecops) さん ( 2025-06-18 10:59 に投稿 )
Pleasanterをサクッと起動できるcompose

# 概要

[Pleasanter](https://github.com/Implem/Implem.Pleasanter) というOSSのビジネスアプリケーション プラットフォームがあります。ローカルPCやAWSのEC2やBeanstalkなど、あちこちでデプロイしてテストしてみたいと思い、Docker化できないかググったところ、[プリザンター(クロスプラットフォーム版)をDocker上で動かしてみた](https://pleasanter.hatenablog.jp/entry/2019/04/08/191954) という記事がありました。

個人的に、デプロイ＆デストロイを楽に繰り返したかったので、docker-composeにまとめました。付加価値が非常に低いですが、同じような試し方をしたいと考えている方がいるかも？ということで紹介します。

https://github.com/coleyon/pleasanter-docker

# 取得＆ビルド

    $ git clone https://github.com/coleyon/pleasanter-docker pleasanter
    $ cd pleasanter
    $ docker-compose build
    $ docker-compose up -d
    $ docker container ls
    $ docker exec -it $CONTAINER_ID cmdnetcore/codedefiner.sh   # 初回DB生成・構築
    <INFO> RdsConfigurator.Configure: Implem.Pleasanter
    <INFO> LoginsConfigurator.Execute: Implem.Pleasanter_Owner
    <INFO> LoginsConfigurator.Execute: Implem.Pleasanter_User
    <INFO> TablesConfigurator.ConfigureTableSet: Tenants
    <INFO> Tables.CreateTable: Tenants
    <INFO> Tables.CreateTable: Tenants_deleted
    <INFO> Tables.CreateTable: Tenants_history
    <INFO> TablesConfigurator.ConfigureTableSet: Demos
    <INFO> Tables.CreateTable: Demos
    ...
    <SUCCESS> Starter.ConfigureDatabase: Database configuration is complete.
    <SUCCESS> Starter.Main: All of the processing has been completed.

# アクセス

http://localhost にアクセスし、以下の初期ID・パスワードでログインできます。

```
user: Administrator
pass: pleasanter
```
[iOS] Host Applicationを無効化してユニットテストを爆速化する

# はじめに

iOSアプリ開発において、テスト駆動開発（TDD）を採用していたり、ユニットテストを部分的に採用しているプロジェクトではユニットテストの実行速度が生産性に大きく影響します。

本記事ではHost Applicationを無効化してユニットテストの実行時間を短縮するためのTipsをご紹介します。

# ユニットテストの実行プロセス

ユニットテストの主な実行プロセスは以下のようになっています。

1. テストターゲットのビルド
2. シミュレータ起動
3. **テスト対象のアプリケーションの起動**
4. ユニットテスト実行

テスト対象のアプリケーション起動には数十秒かかりますが、実はこのプロセスは省略することが可能です。

# アプリケーションの起動プロセスを省略する

ユニットテスト時にアプリケーションの起動プロセスを省略するには

 - **テスト対象のコードのEmbededd Frameworkへの切り出し**と
 - **Host Applicationの無効化**

をする必要があります。

Embededd Frameworkへの切り出し方法は以下の記事が参考になるかと思います。

 - [Qiita | 【iOS】オープンソースSwiftライブラリのつくり方 - Embedded Frameworkとして作成](https://qiita.com/shtnkgm/items/0f62398c66af159401a6#embedded-framework%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%9C%E6%88%90)
 - [Qiita | Embedded Frameworkの導入方法](https://qiita.com/edm/items/4cda53320dfa0858d542)

Host Applicationの無効化は以下のように、テストターゲット設定のGeneralタブで**Host ApplicationをNone**にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113553/5f594845-f56d-dd42-950f-54fb6dd08cb4.png)

もしもテスト対象のターゲットやテストターゲットがライブラリに依存している場合は、以下のようにBuild PhasesにCopy FilesのRun Scriptを追加し、DestinationをFrameworkとしてライブラリをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113553/4a0bf89b-89a5-7d9f-6927-ac8cce55aa80.png)
【SOP】Vue+Python(Flask)でCORSで詰まった話

# はじめに

Vue(127.0.0.1:8080)+Flask(127.0.0.1:5000)で認証機能の実装をしているときにCORSで詰まったときの話。


# 何をしようとした

VueからAPIをたたき(login api的な)、Flask側で認証を行います。認証が成功したら、CookieにJWT形式のトークンをセットしレスポンスを返すという実装を行う際、セットしたCookieがブラウザ側でセットされず、次のAPIリクエスト時に正しく認可が行えない問題が発生しました。

JWTの生成にはflask_jwt_extendedを使っています。


# 結論

flaskのモジュール**「Flask-CORS」**を使います。

[Flask-CORS](https://flask-cors.readthedocs.io/en/latest/)

```
pip install -U flask-cors
```


```python

app = Flask(__name__)
cors = CORS(app)
```

ただ、Cookieを扱う際は上記だけではだめで、以下の「supports_credentials=True」オプションを設定する必要があります。


```python

app = Flask(__name__)
cors = CORS(app, supports_credentials=True)
```

[Using CORS with cookie](https://flask-cors.readthedocs.io/en/latest/api.html#using-cors-with-cookies)



また、クライアント側でもPOSTなどのリクエスト時に**「withCredentials」**をtrueで設定してあげる必要があります。
（以下のソース文法ミスあるかもです）

```vue

<script>

import Axios from 'axios'

module.exports = new Vue({
  data: {
  },
  methods: {
    test(){
     axios.post('http://127.0.0.1:5000/api/v1/protected', {}, {withCredentials : true})
      .then(response => {
        console.log(response);
      })
   }
  }
});

</script>

```


# 最後に

同じようなところで詰まっている方の助けになれば幸いです。
CORSやCookieはセキュリティに大きく関わってくるところですので、正しく意味を理解して実装する必要がありますね。
お勉強頑張ります。。。

# P.S.
flask_jwt_extendedやflask-login便利なのに日本語の記事が少なくないですか？
需要がありそうなら自分で記事書こうかな。
macOS CatalinaにしてからLaravelの環境設定が詰まった

# Laravelの環境設定で詰まった

使用環境
MacOS Catalina
php Version 7.3.8
composer version 1.9.2
Laravel installer 3.0.1

<発生した問題>
composerを使用して、下記コマンドでlaravelインストールを実行しました。

```terminal
composer global require laravel/installer
```
すると、

```terminal
-laravel/installer v3.0.1 requires ext-zip * -> the requested PHP extension zip is missing from your system. 

-laravel/installer v3.0.0 requires ext-zip * -> the requested PHP extension zip is missing from your system. 

-Installation request for laravel/installer ^3.0 -> satisfiable by laravel/installer[v3.0.0, v3.0.1].
```
こういったエラーが吐き出されました。
（PHPのzipの拡張機能をインストールしてくださいということみたい）

phpは入ってるよなぁ、と思いつつ調べていくと、この記事にたどり着いた。

>
https://stackoverflow.com/questions/58290566/install-ext-zip-for-mac/58300437#comment102952298_58290566

原因は分かりませんが、僕の環境のphpにはzipが存在しないみたい。
なので、下記コマンドでそのzipを含んだphpをインストールします。

```terminal
brew update
brew install php@7.4
brew link php@7.4
```

それで、あとは再度composerでlaravelをインストールします。

あ、laravelコマンドは下記コマンドでパスを繋いであげないといけないのでお忘れなく。

```
export PATH=$PATH:$HOME/.composer/vendor/bin
source ~/.bash_profile
```

もし、これでターミナルを再起動した場合でまたコマンドが使えない場合があった場合。
ログインシェルがbashになっていない場合があるので、それを変えてあげましょう。
ちなみに僕の場合は、zshになっていました。
自動で.bash_profileを読みに行かないので、パスが通らないんですね。

以上です。
Next.jsでdotenvを使って秘匿情報を扱う

以下の公式ドキュメントでは`next.config.js`で環境変数を指定する方法しかなかったので、
使い慣れてるdotenvで秘匿情報を扱いたくなった。

[Environment Variables](https://nextjs.org/docs/api-reference/next.config.js/environment-variables)

## dotenvではなくdotenv-webpackを使う
`dotenv`だと環境変数を使うたびに、
`require("dotenv").config()`を実行する必要がある

そのため`dotenv-webpack`というライブラリを使うことで、
webpackのコンパイル時にenvファイルの内容をインポートしてくれるようにする。

## dotenv-webpackのインストール
```bash
yarn add dotenv-webpack --dev
```

## next.config.jsの変更
```js

const path = require('path')
const Dotenv = require('dotenv-webpack')

module.exports = {
  target: "serverless",
  webpack: config => {
    config.plugins = config.plugins || []
    config.plugins = [
      ...config.plugins,
      // Read the .env file
      new Dotenv({
        path: path.join(__dirname, '.env'),
        systemvars: true
      })
    ]
    return config
  }
};
```

上記のように記述することで.envファイルの中身を使うことができるようになる。
使う側では以下のようにprocess.env.xxxでアクセスする。

```js

process.env.API_KEY
```
重みの転用

```
from keras.models import load_model
model.save("a.h5")
#del model
ssd_loss_c = SSDLoss(neg_pos_ratio=3, alpha=1.0)
global pre_model
pre_model = load_model("a.h5", custom_objects={'AnchorBoxes': AnchorBoxes,'compute_loss': ssd_loss_c.compute_loss})
#model.save()
for i in range(30):
  print(i,model.layers[i].name)
  model.layers[i].set_weights(pre_model.layers[i].get_weights())
```
[Rails] cloud9でのパラメータ確認方法

#結論

コントローラーのPOSTに"raise"という文字を組み込む

#例

```
  def create
    @voice = Voice.new
    @voice.user = current_user
    @voice.voice = params[:voice][:voice]
    
    raise

    if @voice.save
      redirect_to @voice, notice: 'Voice was successfully created.'
    else
      render :new
    end
  end


```

#すると

![params.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561934/a9120c5f-4772-a045-d5d9-43e88b09ff9e.png)

parameters以下に値が入っていれば表示される。
Goでフィールド処理するコマンドラインツールを作ってみた

# 背景

フィールド処理の定番って`awk`だと思うんですが、コマンドラインからawkうつのってめんどくさくないですか？
`cat test.txt | awk '{print $1}'`みたいな感じですが、`'`とか`{`とか`$`とか打ちづらい...
ワタシ指短いんで...

# 探してみた

やっぱ探したらあるもんですね、USP研究所様
https://uec.usp-lab.com/TUKUBAI_MAN/CGI/TUKUBAI_MAN.CGI?POMPA=MAN1_self

が、pythonか....pythonは好きなんですよ、好きなんですけどね
RHEL7とかCentOS7のデフォルトpythonってpython2なんだよおおおおお
python3のインストールとかダメっていわれるんだよおおおお
Goないのかよおおおおおおバイナリでもっていきたいよおおおお

車輪の再発明するか！wという決意が湧きました

# 作ってみた

https://github.com/kuritayu/infra-tools/blob/master/cmd/gosf/main.go
(go select fieldの略でgosfにしてみた)

`gosf [-f separator] f1 f2 ...`
`cat aaa.txt | gosf 1 2`みたいにパイプで渡すこともできるし、`gosf 1 2 aaa.txt`みたいにファイル指定することもできます
`cat aaa.txt | awk '{print $1,$2}'`と同じ動きですね
※NFも指定できます

# 測ってみた
100万行、"A B C"と書かれたファイルで、`awk` vs `gosf`で対決！

```
23:33:35 kuritayu@kuritayunoiMac.local gosf master ? wc -l test.txt                                                                                                                                                                                                                   130 ↵
 1000000 test.txt
23:33:38 kuritayu@kuritayunoiMac.local gosf master ? time awk '{print $1,$2}' test.txt > /dev/null
awk '{print $1,$2}' test.txt > /dev/null  0.66s user 0.01s system 98% cpu 0.676 total
23:33:49 kuritayu@kuritayunoiMac.local gosf master ? time gosf 1 2 test.txt > /dev/null
gosf 1 2 test.txt > /dev/null  1.00s user 0.26s system 100% cpu 1.261 total
```

処理自体はawkのほうが早いですが、`'`とか`{`のキーストロークで0.6秒以上かかってる気がするから、結果的には早いだろう!w

めでたしめでたし
Github Action の作り方メモ

Github Actionを作る側のメモ。
ワークフローの中で使う側のメモはこちら => [Github Actionsの使い方メモ](https://qiita.com/HeRo/items/935d5e268208d411ab5a)

## ドキュメント

- [カスタム アクションについて - GitHub Docs](https://docs.github.com/ja/actions/creating-actions/about-custom-actions)
    - [Metadata syntax for GitHub Actions - GitHub Docs](https://docs.github.com/ja/actions/creating-actions/metadata-syntax-for-github-actions)


## パブリックなアクション

パブリックなリポジトリを Github に作り、リポジトリのルートに *action.yaml* または *action.yml* という名前のファイルを作って次のドキュメントを参考にメタデータを記述してアクションを定義する。
他のリポジトリでも利用できる形式だけど、前述のようにリポジトリをパブリックにする必要がある。

- [GitHub Actionsのメタデータ構文](https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions)

アクションの実行環境は大きく分けて２種類ある

- Javascript アクション
- Docker コンテナアクション

### Javascript アクション

Node.jsをランタイムにするアクション。
*action.yaml* の `runs.using` に `'node16'`を指定する(ドキュメントによると `node12` も指定できそうだけど、流石にもう古すぎるだろう)。

次のリポジトリにアクションの開発をサポートするツールが公開されている

- [actions/toolkit](https://github.com/actions/toolkit)


### Docker コンテナアクション

Docker コンテナで処理を実行するアクション。
コンテナで実行するので、実装言語は何でも使える。
*action.yaml* の `runs.using` に `'docker'` を指定し、`runs.image`に次のいずれかを指定する

- Dockerfile
- Dockerhubなどパブリックなレジストリで公開されている Docker イメージ
- Github謹製のDockerコンテナ （[GitHub Actions](https://github.com/actions?type=source)で公開されているやつかな）

Dockerイメージを指定すると、ワークフローの実行ごとにビルドが走るので、イメージを作ってそれを利用したほうがワークフローの実行時間は短くできる。

### コンポジットアクション

前述の２種類とは異なり、Githubワークフローの様に `step:` 以下に `run:` や `use:` で実行したい処理ステップを定義するアクション。
`use:` が使えるということは別の Github Action を呼び出すこともできるということ。
後述するが、プライベートアクションで共通処理をくくりだすのに便利。

### マーケットプレイスへの登録

パブリックなアクションで、Releaseを作成すると、このリリースをマーケットプレイスで公開するか？ と聞かれるので指示に従えば、[GitHub Marketplace · Actions to improve your workflow](https://github.com/marketplace?type=actions)で公開することができる。

別にマーケットプレイスで公開しなくても、他のリポジトリでパブリックなアクションは利用できる。

## プライベートなアクション

プライベートなアクションはそれを利用するリポジトリで定義する。
パブリックなアクションと同じく *action.yaml* というファイルを作ってアクションを定義する。

*action.yaml*の置き場所はどこでも構わない。例えば、*.github/actions/<アクション名>/action.yml* でアクションを定義したら、それを利用するワークフロー定義で`use: .github/actions/<アクション名>` の様に *action.yaml* を置いたディレクトリをリポジトリのルートからの相対パスで指定すればよい。

### プライベートアクションの使い所

プライベートなアクション内で実行することはワークフロー内に実装してもできるだろう。
ワークフロー内で `run:` を使えば、少々複雑なこともできてしまう。なんならスクリプトを書いてそのファイルを `run:` で叩けばワークフローが肥大したり、煩雑になることも避けられる。

とするとプライベートアクションはどこで使うのが効果的か？
例えばほとんど同じなのだけど、CI/CDの都合で環境ごとにちょっとづつ処理を変えたいが、`if:` で分岐するのもいまいち見通しが悪い。
そういうときに共通部分をプライベートアクションにくくりだしてコンポジットアクションを作って、呼び出すようにすれば良い。
そうすれば、`run:`だけでなく`use:`で他の Github Action も利用した処理ステップを共通化できる。