OmniAICreator/Qiita-1.07M huggingface dataset:
MacOSにHomebrewで異なるバージョンのPHPをインストールして切り替える

# インストール

`brew install php@[version]` でインストール

7.4の例

```bash
brew install php@7.4
```

8.2の例

```bash
brew install php@8.2
```

# 切り替え

```bash
brew link php@7.4 --force --overwrite
```

# バージョン確認

```bash
php -v

PHP 8.2.4 (cli) (built: Mar 16 2023 16:13:06) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.4, Copyright (c), by Zend Technologies
```


# 仕組み
Homebrewでインストールされるものは、PHPに限らず `/opt/homebrew/bin` にシンボリックリンクが張られます。

```bash
$ which php
/opt/homebrew/bin/php

$ ls -latr  /opt/homebrew/bin/php
lrwxr-xr-x  1 yousan  admin  27 Apr 11 22:29 /opt/homebrew/bin/php -> ../Cellar/php/8.2.4/bin/php
```

このリンクを張り替えればバージョンが切り替わります。
エディタなどで、例えば静的解析を行わせるために指定されたバージョンのバイナリが必要な場合、シンボリックリンク側ではなくバージョンごとのバイナリを直接指定したほうがよいかもしれません。

ただしbrewに依存しない `~/.composer` などは注意が必要かもしれません。
【Flutter】単振動アニメーションを書いてみる

# 目的
Flutterの**CustomPaint** を用いて単振動のアニメーションを描くことです。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491433/a317dc8a-8fe3-2f0f-c67f-712563e39f15.gif width=400>

# 前提知識
## 単振動とは
>単振動とは、最も基本的な振動のことで等速円運動を、その円の直径上に投影したのと同じように動く、物体の往復運動のこと。 このとき、往復に要する時間を周期、振動半径を振幅という。


https://ja.wikipedia.org/wiki/%E5%8D%98%E6%8C%AF%E5%8B%95

## 方程式
$$
{\displaystyle x=A\cos(\omega t+\phi )}
$$
等速円運動の周期を T [s]
角速度を ω [rad/s]
回転数を f [Hz]
円の半径を A [m]
単振動は、正弦波と密接な関係がある運動です。等速円運動と単振動と正弦波は密接な関係があります。これらにおいては以下の式が一般的に成り立ちます。
$$
{\displaystyle  f={\frac 1T}}
$$

$$
{\displaystyle  ω = 2πf = {\frac {2π}T}}
$$
単振動は、次のように円上を等速運動する点を直線上へ投影したものとも見なせる。xy-平面上に、始点 O、終点 P、一定長さ A の幾何ベクトル OP を考える。点 P が点 O を中心として一定速度 ω で反時計回りに回転しており、t = 0 で点 P は角度 φ の位置にあるとする。この点を x 軸に正射影すると、
$$
{\displaystyle x=A\cos(\omega t+\phi )}
$$
となり、y 軸に射影すると、
$$
{\displaystyle y=A\sin(\omega t+\phi )}
$$

<img  src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491433/7402f6b9-7603-c503-d690-a9a385381893.gif width=400>

## Flutterのアニメーション知識
下記本のアニメーション篇を確認ください。

https://zenn.dev/cxj/books/07def04506182d

# Flutterでアニメーション
まずは、球体移動の座標x,yを求める
```dart
  late AnimationController _ctrl;

  final Duration animDuration = const Duration(milliseconds: 2000);

  @override
  void initState() {
    super.initState();
    _ctrl = AnimationController(
      duration: animDuration,
      lowerBound: 0,
      upperBound: 2 * pi,
      vsync: this,
    );
  }
  double value = _ctrl.value;

  double get x => cos(value);

  double get y => sin(value);
```
次は１つの球体単振動のアニメーションを作る
```dart
canvas.translate(size.width / 2, size.height / 2);
    Path path = Path();
    Paint paint = Paint()
      ..style = PaintingStyle.stroke
      ..color = Colors.red
      ..strokeWidth = 1;
    path.addOval(Rect.fromCircle(center: Offset.zero, radius: 100));
    // 破線path
    path = DashPath().dashPath(path);
    canvas.drawPath(path, paint);
    path.reset();
    path.addOval(Rect.fromCircle(center: Offset(0, y * 100), radius: 10));
    canvas.drawPath(
      path,
      paint
        ..style = PaintingStyle.fill
        ..color = Colors.purple,
    );
```
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491433/f4ccc72b-b6b2-bd21-75ad-07e7c08e2e74.gif width=400>

１個目できたので、２つ、３つ...８つも簡単です。
```dart
    path.reset();
    value = value + pi * 0.125;
    canvas.rotate(pi * 0.125);
    path.addOval(Rect.fromCircle(center: Offset(0, y * 100), radius: 10));
    canvas.drawPath(
      path,
      paint
        ..style = PaintingStyle.fill
        ..color = Colors.purple,
    );
```
|２つ|8つ|
|-|-|
|<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491433/daac3317-4337-f0d5-d5a2-87af324179a5.gif width=400>|<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491433/a317dc8a-8fe3-2f0f-c67f-712563e39f15.gif width=400>|

# リポジトリ

https://github.com/ling350181/flutter_ui/blob/main/lib/application/loading/diameter_run.dart
UiPath StudioWeb Qiitaブログキャンペーン開催

<h2>新しいことにチャレンジする季節</h2>
UiPathをご利用いただいている皆さん！

Studio, StudioXに続き、StudioWeb がトライアル利用が可能になっています。
春といえば、新しいことをはじめるにはうってつけの季節です。
春の訪れをお祝いして、新しいStudioWebを触ってみたキャンペーンを開催します。

<h2>UiPath StudioWebとは</h2>

インストール不要でWebブラウザ上で動作する新しい開発ツールです。

https://www.uipath.com/product/studio-web

StudioWeb については、UiPath Friends/MVPのみやぎさんが記事を書いてくださっています！

https://qiita.com/miya_gis/items/8decc5c77d72d6a097ba

<h2>キャンペーン概要</h2>
<h3>第１期</h3>

|  | 説明 |
|:-:|:-:|
| 開催期間  | 2023年4月14日(金)　から5月12日(金)まで  |
| 参加方法  | Qiitaで記事を公開し [UiPathStudioWeb](https://qiita.com/tags/uipathstudioweb) および [UiPath記事投稿キャンペーン](https://qiita.com/tags/uipath%e8%a8%98%e4%ba%8b%e6%8a%95%e7%a8%bf%e3%82%ad%e3%83%a3%e3%83%b3%e3%83%9a%e3%83%bc%e3%83%b3)をタグ付け  |
| プレゼント  | 対象者にUiPath事務局より連絡  |

期間中に、QiitaでStudioWebを触ってみた記事（Integration Serviceの併用も歓迎）を書いてくださった方には、UiPathロゴ入りグッズをプレゼントします！

参加者が想定以上となった際には、記事についたいいねの数が多い方を優先させていただく場合がございます。

::: note warn
本キャンペーンはUiPathが独自に行うもので、Qiitaは関係ありません
:::

参考になる記事を書いてくださった場合には、UiPath事務局が公式アカウントで投稿記事をSNS等で紹介させていただく可能性がございます。

この機会に記事を書いてみませんか。
参加をお待ちしております。

![3D Searching Bot Pose 03 Right Shadow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953716/59a0274d-8bc2-9333-c2a9-9c835321a005.png)

<h2>どんな記事を書けばいい？</h2>

UiPath Friendsのさおさんも[Qiitaアドベントカレンダー](https://qiita.com/advent-calendar/2022/uipath)参加記事を書いてくださっています。

https://qiita.com/saosao885/items/68da412b29f02d5a47b9

4/14(金)19:00から開催のFriends春のLTワールドでもStudioWebのLT(ライトニングトーク)登壇をされるようです

https://uipath-friends.doorkeeper.jp/events/151742

UiPathの中の人も記事を公開しています

https://qiita.com/fujinc/items/0e9fe32a0b492dac4ce3

Microsoft Ofice365やGoogle Workplace対応の新しいアクティビティも用意されていますので、ぜひトライアル版を触ってみて記事を書いてみてください。

https://cloud.uipath.com/portal_/register?selected_language=ja&subscriptionPlan=trial&

UiPathの中の人によるトライアルの記事

https://qiita.com/MUCHIUCHI_OJISAN/items/c37f16eaeb08dfbc7a7d
AmplifyでDynamoDBのプライマリーキーを変更する

Amplify Studioでモデルを作ろうとしたら、idがプライマリーキーとして登録されていて変更できないという経験をお持ちではないでしょうか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/3379f6cf-451a-4d54-bbf6-79d9c053f5cc.png)
ここでも、デバイスのテーブルを作ろうとしたのですが、各デバイスはDeviceIDを持っていて、このDeviceIDをプライマリーキーにしたいという場合の解決方法です。

## 解決: @primaryKeyを使いましょう
Amplifyのアプリケーションフォルダ配下 `backend\api\APP_NAME`にある`schema.graphql`を編集します。

```schema.graphql
# 変更前
type MetcomDevices @model @auth(rules: [{allow: public}]) {
  id: ID!
  DeviceID: String!
  Name: String
  AppID: String
  Latitude: Float
  Longitude: Float
  Accuracy: Float
  Calibration: Boolean
}

# 変更後
type MetcomDevices @model @auth(rules: [{allow: public}]) {
  DeviceID: String! @primaryKey
  Name: String
  AppID: String
  Latitude: Float
  Longitude: Float
  Accuracy: Float
  Calibration: Boolean
}
```
プライマリーキーに設定したいフィールドに`@primaryKey`を付与するだけです。`@key`で指定する方法はAmplify GraphQL Transformer v2以降使えなくなりました。

スキーマを書き換えた後、プッシュしたいのですが、プライマリーキーを変更すると、DyanamoDB上の該当テーブルの情報がクリアされるそうなので、それを明示的に指定して、プッシュします。--allow-destructive-graphql-schema-updatesオプションを追加するだけです。
`amplify push --allow-destructive-graphql-schema-updates`


## 確認
プライマリーキーが切り替わったことを確認するために、Amplify Studioを立ち上げてData modelingを見てみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/105889cb-de3e-a69e-e1ba-05eb81b15240.png)
残念ながら、Visual editorは使えなくなっていました。プライマリーキーが想定したものじゃなくなっているからという理由のようです。
でも、DyanamoDBのテーブル概要を見ると、ちゃんとidからDeviceIDに切り替わっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/625cbbd0-bc11-38dd-19a3-2b54470ad68c.png)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/d6ad10bc-75ba-8124-14d4-f144657c6473.png)](https://twitter.com/ghibi)
IBM i Merlin 初回アクセス時の証明書インストール手順

IBM i Merlin (Modernization Engine for Lifecycle Integration) はRed Hat OpenShift上に展開されたIBM i 向けの開発環境です。OSSなど一般的な言語のほか、RPG,COBOL,CLPなどのいわゆるレガシー系言語の開発もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/019ad88c-94e9-4076-3917-89f57dc2bdc9.png)

MerlinはブラウザーからOpenShift(OCP)上のコンテナアプリケーションとして実装されたMerlinにアクセスして開発を行いますが、初回にMerlinにアクセスした際、Merlinの証明書をPC,Mac等のクライアントにインストールする必要があります。（証明書をインストールしないとMerlinにログインできない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/efbfd50e-c273-a1f6-6583-1bffd9ca32da.png)

以下ではWindows（Windows11）PCでの手順を記載します。
マニュアルとしてはこちらに記載があります。
https://www.ibm.com/docs/ja/merlin/1.0?topic=ug-manage-browser-certificates

手順1. Merlinのログインページをブラウザーでアクセス
https://（Merlinアプリケーション名）/merlin/ などのMerlinのログインページを開きます。Merlin証明書がPCにインポートされていない場合、Merlinのログインページを表示しようとして、以下のようにLoading... で止まってしまいます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/56d4ad3e-0f36-82bb-9ed5-e8e0d1f7a935.png)

手順2.
手順1のブラウザー画面で、上記マニュアルの手順に従って、ブラウザーからMerlin証明書を開き、証明書をPCにダウンロードします。
証明書（認証局）の名前は ingress-opereator@xxxxのようになっていると思います。
証明書をPCにダウンロードする際のポイントは下記二点です。
・merlinから証明書ダウンロードする際、DER エンコード・バイナリー X.509　形式でダウンロードする
・証明書をインポートする際、「信頼されたルート認証局 (Trusted Root Certification Authorities)」にインポートする
　※明示的にインポート場所を指定しないと、「信頼されない認証局」にインポートされてしまうこともありますので注意。

手順3.
PCにダウンロードした証明書をWINDOWSの証明書ストアにインポートする
ダウンロードした証明書（ingress-operator@xxx.der等の名前）をダブルクリックします。下記のような証明書のウィンドウが表示されます

証明書のインストールをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/fff2e2d3-89c8-8121-87a5-3b20c8847010.png)

証明書インポートウィザードが開始されるので、現在のユーザー　を選択して　次へ　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/ef356732-9c27-03b6-1d09-d8006cdd6256.png)

証明書をすべて次のストアに配置する　を選択して　参照　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/383e4e84-dc55-6f44-14ee-9f3c75303cef.png)

信頼されたルート証明機関　を選択して　OK　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/905829ea-4f79-a112-b28b-1599fa87870e.png)

信頼されたルート証明機関　が証明書ストアに表示されます。　次へ　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/39ebba0e-a936-c510-fee3-167c6d714b82.png)

完了　をクリック
以上で証明書のインポートは完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e641ac95-f9d3-f253-deed-100cf5eaaac8.png)

手順4.
念のためブラウザーからインポートした証明書を確認します。Chromeの場合は、
プライバシーとセキュリティ
↓
デバイス証明書の管理
↓
信頼された発行元
に先ほどインポートした
Merlinの証明書がインポートされていればokです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/a14a92eb-3e07-154a-9135-901bd36000e5.png)

※注意
左記の　信頼されない発行元　に前ページで確認したmerlinの証明書が登録されていないことを確認してください。もし登録されていたらこのページの削除ボタンで削除してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/178ea8e8-8635-fec2-f8d2-30edc79ca335.png)

以上で作業は完了です。
ブラウザーを再起動後、最初のMerlinのログインページにアクセスするとMerlinのログインページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/ede3bfc0-21a2-592e-dc3b-8ae2000bb4a7.png)
オンプレMotionboardのアプデで忘れてはいけないこと

オンプレ版Motionboardを使用していると「アップデート」というイベントを定期的に迎えます。

定期的とはいえ、〇年スパンだとおもいますので、個人的の環境に基づいた忘れてはいけないことを忘備録として共有いたします。

## 私のMotionboard環境
・サイレントバックアップを設定してある
設定の仕方はこちらから↓↓
https://qiita.com/yoshi_b/items/39377e0236c7215df595
マニュアルはこちらから↓↓
https://cs.wingarc.com/manual/mb/6.3/ja/UUID-1f85960c-49b3-a516-1322-7267afc2e9aa.html

・MySQLとkintoneを外部接続している
MySQLとの接続マニュアルはこちらから↓↓
https://cs.wingarc.com/manual/mb/6.3/ja/UUID-ca0fa646-f07c-7b37-7453-e2f4d8d579b0.html
kintoneとの接続マニュアルはこちらから↓↓
https://cs.wingarc.com/manual/mb/6.3/ja/UUID-b5de7c5a-785d-2dc4-631a-8f0a8179ac94.html

・帳票出力オプションを導入している

・dejirenを使用している

## インストール時のあれ？どうだったけか？
オンプレ版なのでインメモリOLAPを使用しています。メモリの割り当てどうしますか？と聞かれるのですが、値を変更せず、前回の値を引き継ぐのが良いかもしれません。。。

## 通常のインストールの他にやること
### ①サイレントバックアップ設定
サイレントバックアップの設定ファイルはマイグレーションによって
サイレントバックアップを指示するコマンドファイル（私のqitta記事ではmb_silentbackup.cmd)
は複製されるっぽいです。なければ作ればよいのですけど…
しかし、ファイル内の「パス」を変更する必要があります。

例えばMotionboard6.1の場合
@set JAVAEXE="C:\MotionBoard61\system\jre\bin\java.exe"
という記述を6.3にアプデする場合は
@set JAVAEXE="C:\MotionBoard63\system\jre\bin\java.exe"
にする必要があるということです。

何か所かあるので注意が必要です。

### ②MySQLとkintoneの外部接続
インストールしたMotionboardの規定フォルダにドライバを入れる必要があります。旧バージョンで外部接続をしていれば、ドライバーをコピペしてMotionboardを再起動すればOKでした。

格納先は
「<InstallDir>\system\resources\communicator\drivers\extra」
です。旧バージョンの上記フォルダから新バージョンの上記フォルダにコピーしましょう。

### ③帳票出力オプション
Motionboardをインストールしただけでは帳票出力オプションは使用できません。アクティベートをしないといけないので「ライセンスマネージャー」でアクティベートキーを追加します。
マニュアル↓↓
https://cs.wingarc.com/manual/mb/6.3/ja/UUID-888c7eea-82b7-60b1-ba7a-d65c914e39f9.html

### ④dejiren
dejirenのドライバーは更新しなくてよいとの事でした…

## 滅多にやらない作業だから…
備忘録とっておかないと…ってなるのですが、個人的なノートよりもqiitaで残したほうがいいと思い殴り書きですが記載しました。皆様にも参考になると…いいな。
DaVinci Resolveで10bit動画が読み込めない&ffmpegのh264_nvencで10 bit encode not supportedエラーが出る場合の対処法

# 結論
どちらも動画の色深度が10bitであることに起因する問題だった。
## ①DaVinci Resolveで10bit動画が読み込めない問題

**無償版のDaVinci Resolveは色深度が10bitの動画に対応していない。**(※1)
そのため、色深度を8bitに変換してやることで読み込めるようになる。
そのため、以下のように`-pix_fmt`オプションで`yuv420p`(8bitの意)を指定してやる。
```shell
ffmpeg -i in.mp4 -c:a copy -pix_fmt yuv420p out.mp4 
```
## ②ffmpegのh264_nvencで10 bit encode not supportedというエラーが出る問題
**ffmpegのh264_nvencは10bitへのエンコードには対応していない。**
(*10 bit encode not supported*とエラーが出る)
が、8bitへのエンコードには対応している。
そのため、こちらも`-pix_fmt`オプションで`yuv420p`を指定して
```shell
ffmpeg -i in.mp4 -c:v h264_nvenc -c:a copy -pix_fmt yuv420p out.mp4
```
とすることでCPUを使うよりも高速にエンコードできる。
(音声部分も圧縮したい場合は`-c:a copy`を外してください。)

# 経緯
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576615/a0b9886c-b160-c08f-5121-7b58e0e48a64.png)
①友人に以前撮影してもらった動画を編集用に送ってもらい
②容量削減のためエンコードし
(この時`h264_nvenc`でエンコードしようとしたが、
*10 bit encode not supported*とエラーを吐かれたため、仕方なく`libx264`でエンコードした)
③できたファイルをdavinci resolveに読み込ませた
→サムネイルが正常に表示されず、波形のみの表示になってしまった。

# 原因
友人の端末が**iPhone12**であり、
彼からもらった動画が**ドルビービジョンHDRで撮影された**ものだった。
(iPhone12から対応した方式、既定でオンのようで色深度は**10bit**で撮影される (※2))
「いつも通り`-c:v h264_nvenc`をつければ動くやろ...」とたかをくくっていたが、ffmpegのh264_nvencオプションは10bitへのエンコードには対応していないためエラーを吐いた。
そのためどうにかしようとしてlibx264を使ったら変換できてしまった(10bitはそのままに)ことが今回の問題につながった。

# オチ
ちなみに、ずっと前に全く同じ問題に遭遇している方が[Twitter](https://twitter.com/ktfs/status/1354359081931137028)にいらっしゃった。
もっと早くに調べていれば...

# 教訓
・**オプションはネット上のを鵜呑みでコピペしないで、ちゃんと調べ中身を理解してから書く。**
・エラーメッセージはちゃんと読んで、ちゃんと理解する。
・ソフトをDLする際は無償版と有償版の機能の違いを調べておく。
・異常が起こった際には、正常に読み込みできているものと異常なものをそれぞれ詳細表示ソフトにかけ、差異がないかを細かく比較していくと解決への糸口が見つかる。
・同じ会社の端末でも機種が違えば得られるデータも違う可能性があることに留意する。
・Google検索だけでなくTwitterでも調べてみる。

# 未だにわからないこと
・GPUだけでなくCPUも処理率100%になってしまう理由
・なぜh264_nvencは10bitへのエンコードに対応していないのか(技術上の制約がある？)
わかる人いたら教えてください...

### 注釈
※1 [これは有償版のDaVinci Resolve Studioだと読み込める。](https://asteriscus.jp/davinci-resolve/378/)
※2 [iPhoneのHDRカメラ設定を調整する](https://support.apple.com/ja-jp/guide/iphone/iph2cafe2ebc/ios)の「HDRビデオのオン/オフを切り替える」の項を参照のこと。
[OCI]OCIボールト・シークレット内のシークレット・コンテンツを取得するPL/SQLファンクションを作成してみた


# シークレット・コンテンツを取得するPL/SQLファンクションの作成
引数としてシークレットのOCIDを渡して実行するとシークレット・コンテンツを返すファンクションget_secret_contentを作成します。
処理の内容は以下のコードのコメントを参照してください。
```sql:get_secret
CREATE OR REPLACE FUNCTION get_secret_content( secret_ocid VARCHAR2 )
  RETURN VARCHAR2
IS
    -- 変数の宣言
    region             VARCHAR2(100);
    request_uri        VARCHAR2(200);
    resp               DBMS_CLOUD_TYPES.resp;
	secret_base64      VARCHAR2(1000);
	secret_text        VARCHAR2(1000);
BEGIN
    -- リージョン識別子を取得 
    SELECT JSON_VALUE(cloud_identity, '$.REGION') INTO region FROM v$pdbs;
    -- APIコール用のURIを生成
    request_uri := 'https://secrets.vaults.'||region||'.oci.oraclecloud.com/20190301/secretbundles/'||secret_ocid;
    -- シークレット・バンドルを取得するAPIをGETメソッドでコール
    resp := DBMS_CLOUD.SEND_REQUEST(
                credential_name => 'OCI$RESOURCE_PRINCIPAL',
                uri             => request_uri,
                method          => DBMS_CLOUD.METHOD_GET
            );
    -- APIコールのレスポンスからBASE64でエンコードされているシークレット・コンテンツを取得
    secret_base64 := JSON_VALUE(DBMS_CLOUD.GET_RESPONSE_TEXT(resp), '$.secretBundleContent.content');
    -- BASE64でエンコードされているシークレット・コンテンツをデコード
	secret_text   := UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(secret_base64)));
    -- デコードしたシークレット・コンテンツを返す
    RETURN secret_text;
END;
/
```
Database ActionsやSQL*Plusから実行してファンクションget_secret_content作成します。
```
SQL> CREATE OR REPLACE FUNCTION get_secret_content( secret_ocid VARCHAR2 )
  2   RETURN VARCHAR2
  3  IS
  4      region             VARCHAR2(100);
  5      request_uri        VARCHAR2(200);
  6      resp               DBMS_CLOUD_TYPES.resp;
  7      secret_base64      VARCHAR2(100);
  8      secret_text        VARCHAR2(100);
  9  BEGIN
 10      SELECT JSON_VALUE(cloud_identity, '$.REGION') INTO region FROM v$pdbs;
 11      request_uri := 'https://secrets.vaults.'||region||'.oci.oraclecloud.com/20190301/secretbundles/'||secret_ocid;
 12      resp := DBMS_CLOUD.SEND_REQUEST(
 13                  credential_name => 'OCI$RESOURCE_PRINCIPAL',
 14                  uri             => request_uri,
 15                  method          => DBMS_CLOUD.METHOD_GET
 16              );
 17      secret_base64 := JSON_VALUE(DBMS_CLOUD.GET_RESPONSE_TEXT(resp), '$.secretBundleContent.content');
 18      secret_text   := UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(secret_base64)));
 19      RETURN secret_text;
 20  END;
 21  /

ファンクションが作成されました。

SQL> 
```
問題なく作成できました。

# 作成したPL/SQLファンクションの実行

[こちら](https://qiita.com/500InternalServerError/items/5f5c546c915a1b8f3fbd)の記事で作成したシークレットのOCIDを引数に指定して、ファンクションget_secret_contentを実行してみます。
```
SQL> SELECT get_secret_content('ocid1.vaultsecret.oc1.ap-tokyo-1.a*******************************************q') secret FROM dual;

SECRET
--------------------------------------------------------------------------------
Demo#1Demo#1

```
OCIボールト・シークレット内のシークレット・コンテンツの値が取得できました。
超初心者がドットインストールとYouTubeでPHPの理解を深めた話。

YouTuber「キノコード」さんの動画を見て、PHPの理解が深まったお話をします。
https://www.youtube.com/watch?v=bLxQYJV75h4


-自己紹介-
・29歳
・四大卒（外国語学部）
・プログラミング勉強：1ヶ月
・教材：ドットインストールの有料版
・勉強した言語：HTML、CSS、PHP
・直近の目標：どこかの企業でSE（フルリモート）
・長期的な目標：スマホアプリ開発 → 教育系のAI開発
-終わり-


プログラミングの勉強を始めて、1ヶ月。
ドットインストールを使い、学習してきました。

毎日は勉強できなかったため、次に学習するときには
前回の内容をほぼ忘れていました。

「『プログラミングは暗記じゃない』って言われてるし、
忘れても大丈夫か」と思いながら学習を進めていました。

そう思っていても、心のどこかで不安が募ります。
「今、何をやっているのかほぼ分からん…」
「echo は何かを表示させたいときに使う、は分かるけど、
for(){}のカッコの中がどうゆう動きをするのか分からん」
こんな状態でした。

ドットインストールの「PHP入門 基礎文法編（全34回）」が終わり、
「これはいかん！」と思い、Google先生にお尋ねしました。
一番上に出てきたのが、
キノコードさんの「PHPのプログラミング初心者向けの超入門講座｜たった1時間で学べる【文字書き起こし、ソースコードも完全無料】

1時間13分聞きました。
途中で確認問題も解きました。

完ぺきではないですが、
ドットインストールで募ったモヤモヤは9割無くなりました。

キノコードさんの何が良かったのかというと、
頭の中で「今、何をやっているのか」のイメージが持てた
ことです。

例えば、ドットインストールの「変数を使ってみよう」の回ですが、
いきなり「変数は『＄name』のように書きます」という解説がなされ、
混乱します。
私：「変数って何だっけ…？」
↑超初心者はここから始まるんです。
まず、「変数」というワードを聞くのが高校生のとき以来で、
脳みその奥の方から記憶を引き出す必要があります。

そして変数については、特段説明されず動画が進んでいきます。
「とりあえず動画を進めるか」精神で勉強し、
最後には「なんかよくわからんな」という結果になりました。

キノコードさんの動画では、最初に
「そもそも変数ってなんなの？」から解説してくれるので
文系・超初心者にもやさしい動画だと思いました。

イラストや比喩などを使い、解説されているので
頭の中でイメージしながら学習を進めることができます。

余談ですが、キノコードさんは主にPhysonを学ぶチャンネルですので
PHPに関する動画は超初心者向けだけでした。

ほかのYouTuberさんのPHP動画も拝見したいと思います。
最後までお読みいただきありがとうございました！

早く実務経験が積めるように頑張るぞ～！
評価における観点とは？を考える

# 記事のきっかけ

開発チームに観点確認を依頼した際、「これは観点レビューではなく試験表レビューです」と指摘されことがあった。
検証チームはその指摘が理解できなかったため、観点とは何かについてカレーライスで例えて、何を確認依頼すべきだったのかを考察する。

# 観点の考え方
観点とは、ある問題や対象を評価する際に重要とされる視点や基準のことです。
観点を設定することで、検証対象の品質や適切性を客観的に評価し、分析することができます。
一方、検証項目（試験表）は、これらの観点に基づいてカレーライスを評価するための具体的な手順や方法をまとめたものです。試験表には、試験の目的、手順、評価基準、結果の記録などが含まれます。

例えば、カレーライスを作る場合、開発者がカレーライスを作り、評価チームがカレーライスを評価します。
商品として販売するというケースにおいて、観点は以下のようになります。

## 1. 味

- スパイスのバランスは適切か
- 甘さ、辛さ、塩分は適切か

## 2. 食感

- 野菜や肉の触感は適切か
- ルーの濃度、コクは適切か

## 3. 外見

- 盛り付け・色合いは適切か
- 野菜や肉のサイズが適切か

## 4. 栄養

- 栄養バランスは適切か
- アレルゲンや特定のダイエット制限に配慮は適切か

## 5. 原料・品質

- 添加物や保存料の使用は適切か
- カロリーや糖質、脂質、たんぱく質の含有量が適切か

## 6. 価格

- 原材料費や製造コストに対する利益率が妥当か
- 価格帯別のバリエーションがあるか

## 7. 販売・流通

- 販売チャネルや店舗での陳列が効果的か

---

上記の観点をもとに、実際の評価項目を設定します。
例:

- 観点：盛り付け・色合いは適切か
  - 試験項目：盛り付けが、見本どおりであること。
  - 試験項目：色が、#AA8738であること。
- 観点：甘さ、辛さ、塩分は適切か
  - 試験項目：辛さが、中辛であること。
- 観点：野菜や肉のサイズが適切か
  - 試験項目：サイズは、2cm四方であること

注意点: 辛さが甘辛、中辛、激辛があるとして、検証項目に「辛さが、激辛であること。」のみがあった場合、これは、
項目作成の漏れとなる。

# まとめ

検証チームが開発チームに観点確認を依頼した際、確認物が観点ではなく、試験項目となっていたため、
開発チームから「これは観点レビューではなく試験表レビューです」と指摘されたと考えられる。
今回の場合、観点確認をする際は、以下のように修正する必要があった。

[修正前]
試験項目：盛り付けが、見本どおりであること。
試験項目：色が、#AA8738であること。
試験項目：辛さが、中辛であること。
試験項目：サイズは、2cm四方であること

↓

[修正後]
観点：盛り付け・色合いは適切か
観点：甘さ、辛さ、塩分は適切か
観点：野菜や肉のサイズが適切か
Kotlin で Long 型のプロパティを String 型に移行したときの備忘録

# はじめに

自分が作成しているアプリ(ZonePane、およびTwitPaneのMastodon機能)で使っている"ID"をLong型からString型に変更する必要があり、いくつかの段階を経て移行したのでその備忘録としてこの記事に残しておきます。


# やりたいこと

```Kotlin
data class AccountId(val value: Long)
```

を

```Kotlin
data class AccountId(val value: String)
```

のように変えたい。

# フェーズ1: 内部の型を String に変更する

```Kotlin
data class AccountId(val rawValue: String) {
    val value: Long get() = rawValue.toLong()
}
```

内部のデータ型のみ `String` に変更しました。

`toString` や `equals` なども必要に応じて適宜修正します。

これでビルドするとインスタンス生成部分でエラーになるのでそこをいい感じに変更します。いわば setter の移行という形です。

```Kotlin
AccountId(8192L), AccountId(user.id)

// ↓

AccountId(8192L.toString()), AccountId(user.id.toString())
```

# フェーズ2: getterの移行

```Kotlin
data class AccountId(val value: String) {
    val valueAsLong: Long get() = value.toLong()
}
```

内部データも `rawValue` ではなく `value` に変更しました。これで値の使用箇所(getter)も`String`型に移行する必要があります。実際の値としても`Long`型のまま使うことが保証できる部分(うちのアプリではTwitterのIDをそのまま保存するロジック)なら `valueAsLong` を使ってもいいでしょう。

# はまりどころ

`JSONObject`や`Bundle`などは`Long`の値をgetStringで取得してもほぼ問題ないんですが、`SharedPreferences`は内部キャスト例外が発生するので別キーとして保存する必要がありました。

また、上記のフェーズ1からフェーズ2にかけて、Kotlinの謎のエラー(getValueがないなど)が発生して困りましたが、いわゆるビルドキャッシュをクリアすることで対処できました。
Unityで再生中にスクリプトを編集してもコンパイルが走らないようにする

環境:Unity2021.3.11f1 or Unity2022.3.4f1 で確認


Unityはデフォルトの設定では再生中にスクリプトを編集・保存した場合、「NullReferenceException: Object reference not set to an instance of an object」のエラーが出て進行不能になってしまいます。

「<b>Preferences -> AssertsPipeline -> AutoRefresh</b>」 を 「<b>Enabled Outside Playmode</b>」にする事で、再生を停止した後にコンパイルが走るようになり、再生中にスクリプトを保存しても進行不能にならなくなります。

日本語版UnityのPreferences画面のスクリーンショットを添付します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704946/f9495ed6-1b18-9b80-daf8-dbd82a514776.png)

※Unity 2018.3では「Preference -> General -> Script Changes While Playing」を「Recompile After Finished Playing」にする事で同じ事ができたようです。
amplify × create-react-appのプロジェクトでReactのコード上から環境名を参照する方法

## はじめに
amplifyで構築したReactのコード上でamplifyの環境名を参照したかったのですが、それを実現するスマートな方法がなさそうでした。

amplifyが生成する`aws-exports.js`に環境名が記載されていれば良いのですが、明示的な記載はされていません。
一部のリソースはそのリソース名に環境名を含むので、そこから取り出すこともできますがあまりお行儀がよくない気がします。

## TL;DR
現在チェックアウトしている環境名は以下のファイルに記載されているので、これを利用します。
`amplify/.config/local-env-info.json`

## ソースコード
`amplify env checkout`のhooksを使って、`.env`ファイルを書き換える方法などもあるかと思いますが、手っ取り早くstart/build実行時に環境変数を渡すようにします。

```package.json
"scripts": {
  "start": "REACT_APP_ENV=$(cat amplify/.config/local-env-info.json | jq -r '.envName') react-scripts start",
  "build": "REACT_APP_ENV=$(cat amplify/.config/local-env-info.json | jq -r '.envName') react-scripts build",
  ...
}
```

Reactのコード上では以下のようにして環境名を参照できます。
```ts
const envName = process.env.REACT_APP_ENV;
```

## 参考
本家も上記のjsonファイルから環境名を取得しているようです。
https://github.com/aws-amplify/amplify-cli/search?q=LocalEnvFileName
https://github.com/aws-amplify/amplify-cli/search?q=getLocalEnvFilePath
Jupyter環境venv内に構築してvscode上で動かすまでの流れ

# やりたいこと

 やりたいことは以下の2つです

1. jupyterをvscode上で動かしたい
2. ローカルの環境は汚したくない

というわけで今回はvenvを用いて環境を構築していきます

## venvとは

簡単に言えばpythonを仮想環境です

例えばweb開発をしたい場合,研究をしたい場合で使うpyhtonのライブラリが変わってくると思います

そこで使用する用途ごとにpythonを分ける必要があります

そういった時に使うものと思っておいてください,今回は趣旨に逸れるのであまり説明は致しませんがご了承ください

 **以下にわかりやすいと思った記事をいくつか載せておきます**
- [公式ドキュメント](https://docs.python.org/ja/3/library/venv.html)
- https://qiita.com/futakuchi0117/items/6030458a96f62cb64d37
- https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e

## venvの使用方法

まずは作りたいvenv環境を作っていきましょう

### 1. venvを作成する
```sh
python3 -m venv (作りたい仮想環境の名前を指定)
```
これでディレクトリ直下に指定した名前の環境ができていたと思います,lsコマンド等で確認してみてください

### 2. 作成したディレクトリに入ってみよう
```sh
source (作った仮想環境の名前)/bin/activate 
```

 ディレクトリを確認してみればわかりますが,作成した仮想環境の下にbinファイル存在し,その中にactivateファイルがあります

 ここにあるactivateを実行することで仮想環境に入ることができます

 「source」コマンドは、ファイルに書かれたコマンドを現在のシェルで実行する,というコマンドです

### 3. 本当に入れたか確認しよう
```sh
where python
```
以上のコマンドを打って以下のように出ていたら成功です
```sh
.../(作った仮想環境の名前)/bin/python
```

### 4. venvへのライブラリのインストール

ここから環境をjupyterに追加する必要があります

この処理をしないとせっかく作成したvenvをvscode上で使えません

まずはvenvに入ってることを確認した後以下の2つの手順を踏みます

1. ipykernelをインストール
    ```sh
    pip install ipykernel
    ```
2. カーネルを追加してください
    ```sh
    ipython kernel install --user --name=(自分で決めてください)
    ```

### 5. 実際に作成したJupyterの環境をVScodeで使ってみよう

以下の手順に沿って進めてください
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2300333/48589b1c-e7f2-3c2d-b8a3-2e863463651b.png)
    ここの右にあるボタン(Python3.9.6と書かれている場所)を押すと,以下のようなポップアップが出ます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2300333/960e1eb9-019d-def0-12dd-29fcd28da6dc.png)

   その後別のカーネルを選択,Python環境を選択を押すと次のように出てくると思います

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2300333/839c6b84-150e-a326-7d8d-870307ca8b0c.png)

   こちら先ほど作った仮想環境が出てこない場合は右上のロードボタンを押してください
    
   こうすることで作成したPython環境を選ぶことができます

また先ほどのところをカーネル選択 → Jupyter Kernel
と押すことで選択することもできますが,vscodeでの操作をする場合は**Python環境を選択することをお勧めします**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2300333/ba26f3f3-6953-56bf-d16e-8999042b4535.png)


最後にセルで以下のように打ち込んでください
```
!where pip 
```
こうすることで以下のようになったら成功です
```
.../(自分で作った仮想環境の名前)/bin/pip
```

わかりにくいかもしれませんので,以下に僕の場合の具体例を写真で添付しておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2300333/c19c67dd-9476-be0f-99fe-1ae4778d65f7.png)



**説明は以上です！お疲れ様でした！！！**

## 参考文献
- https://docs.python.org/ja/3/library/venv.html
- https://qiita.com/futakuchi0117/items/6030458a96f62cb64d37
- https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e
postgrest の使い方

## 前提条件
ユーザー scott
パスワード tiger123
データベース　city
でログインできるとします。

## サーバーの設定

```text:ex01.conf
db-uri = "postgres://scott:tiger123@localhost:5432/city"
db-schema = "public"
db-anon-role = "scott"
```

## サーバーの起動

```text
$ postgrest ex01.conf
13/Apr/2023:11:54:31 +0900: Attempting to connect to the database...
13/Apr/2023:11:54:31 +0900: Connection successful
13/Apr/2023:11:54:31 +0900: Listening on port 3000
13/Apr/2023:11:54:31 +0900: Config reloaded
13/Apr/2023:11:54:31 +0900: Listening for notifications on the pgrst channel
13/Apr/2023:11:54:31 +0900: Schema cache loaded
```

## 表示
参考ページ
[Tables and Views](https://postgrest.org/en/stable/api.html)

curl

```text
$ curl http://localhost:3000/cities
[{"id":"t3461","name":"広島","population":25176,"date_mod":"2003-09-24"}, 
 {"id":"t3462","name":"福山","population":47935,"date_mod":"2003-05-15"}, 
 {"id":"t3463","name":"東広島","population":28654,"date_mod":"2003-02-08"}, 
 {"id":"t3464","name":"呉","population":83152,"date_mod":"2003-10-09"}, 
 {"id":"t3465","name":"尾道","population":42791,"date_mod":"2003-08-04"}, 
 {"id":"t3466","name":"竹原","population":35687,"date_mod":"2003-01-21"}, 
 {"id":"t3467","name":"三次","population":81296,"date_mod":"2003-07-23"}, 
 {"id":"t3468","name":"大竹","population":21764,"date_mod":"2003-10-26"}, 
 {"id":"t3469","name":"府中","population":75423,"date_mod":"2003-12-15"}]
```

Httpie

```text
$ http http://localhost:3000/cities
HTTP/1.1 200 OK
Content-Location: /cities
Content-Range: 0-8/*
Content-Type: application/json; charset=utf-8
Date: Thu, 13 Apr 2023 02:58:52 GMT
Server: postgrest/10.0.0
Transfer-Encoding: chunked

[
    {
        "date_mod": "2003-09-24",
        "id": "t3461",
        "name": "広島",
        "population": 25176
    },
    {
        "date_mod": "2003-05-15",
        "id": "t3462",
        "name": "福山",
        "population": 47935
    },
    {
        "date_mod": "2003-02-08",
        "id": "t3463",
        "name": "東広島",
        "population": 28654
    },
    {
        "date_mod": "2003-10-09",
        "id": "t3464",
        "name": "呉",
        "population": 83152
    },
    {
        "date_mod": "2003-08-04",
        "id": "t3465",
        "name": "尾道",
        "population": 42791
    },
    {
        "date_mod": "2003-01-21",
        "id": "t3466",
        "name": "竹原",
        "population": 35687
    },
    {
        "date_mod": "2003-07-23",
        "id": "t3467",
        "name": "三次",
        "population": 81296
    },
    {
        "date_mod": "2003-10-26",
        "id": "t3468",
        "name": "大竹",
        "population": 21764
    },
    {
        "date_mod": "2003-12-15",
        "id": "t3469",
        "name": "府中",
        "population": 75423
    }
]
```

## 削除
参考ページ
[Deletions](https://postgrest.org/en/stable/api.html#deletions)

curl

```bash
curl "http://localhost:3000/cities?id=eq.t3467" -X DELETE
```

Httpie

```bash
http DELETE  "http://localhost:3000/cities" id=="eq.t3466"
```
MotionboardとLINEWORKS連携 API2.0移行ですること

LINEWORKSのWebAPI1.0が4月30日で終了します。

MotionboardにてLINEWORKS配信をしているのでWebAPI1.0から2.0へ移行しなければならないのですが、手順をウイングアークサポートに確認したので共有しますね。

## 1.ご利用のBotのAPIを2.0に移行する

LINE WORKS Developersサイトにアクセスし、リンクからLINE WORKSのDeveloper Consoleに遷移します。
https://developers.worksmobile.com/

左側のリストで［Bot］をクリックして、対象のBotをクリックした後、［修正］ボタンで［Bot 編集］画面を開き、［API Interface］を「API 2.0」にした後［保存］をクリックします。
※ここで［Bot ID］も控えておきます。

## 2.API 2.0 のアプリを作成します。

LINE WORKS Developersサイトにアクセスし、リンクからLINE WORKSのDeveloper Consoleに遷移します。
https://developers.worksmobile.com/

左側のリストで［API 2.0］をクリックして、［アプリリスト］画面を開き［アプリの新規追加］よりアプリを作成し、［OAuth Scopes］の［管理］で「bot」を選択して、設定を保存します。
※ここで次の内容を控えておきます。
　・Client ID
　・Client Secret
　・Service Account
　　「発行」ボタンをクリックしてService Accountを発行します。
　・Private Key

## 3.Motionboard設定
MotionBoardにて、［システム設定］-［接続/認証］-［チャット］にて対象チャット名を選択し
［基本情報］タブで［API 2.0］に必要な設定値を入力します。
　※「1.」「2.」で控えた内容を入力、設定します。

以上で、API 1.0 から 2.0 の移行は完了です。

手順は簡単ですぐに終わりました。
もし困っている方がいらっしゃいましたら参考にして下さい。
究極の裸族

ARMなガジェットで以前はumassにNetBSDをインストールしてたのですがeSATAの口があるので、使ってみることにしました。

SATAの3.5 inc HDはいくつか使っていないものがあるので、安いケースを探してみたのですが見当たりません。eSATAはUSB 3.0に駆逐されてしまったようです。eSATAで検索してもほとんどSATAしかでてきません。

いろいろ探したところ560円のeSATA-SATA変換のケーブルが見つかり、使えるか分からなかったのですが、ポチりました。

![IMG_20230413_112711.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/d8ca958f-2fe4-ece2-7661-0d04e4d9f1c0.jpeg)

電源はSCSIの外付けドライブを捨てた時にとっておいたものです。SATAの電源ケーブルはたまたま手元にありました。

本体を開けているのは、シリアルコンソールにアクセスするためです。

ちゃんとwd0として認識されてNetBSDインストールできました。

https://dmesgd.nycbug.org/index.cgi?do=view&id=7058

USBは2.0なのでumassより早いと思います。

あるものを最大限有効に使うことと、ガジェットには1K以上使わないがモットーです。

U-BOOTでも認識できているので、HDDにFAT領域を作ってそこにカーネルをおいてloadすることも可能と思われます。ただFAT領域のよいメンテ方法が思いつかないので、悩み中です。

あぶないので、何かに入れたほうがいいですね。

HP ProLiant MicroServer Gen7にもeSATAあったんで、試したところ問題なく使えました。ddでzeroの書き込みに1T/1時間くらいのようです。

SATAは3.5incと2.5incは同じコネクタでした。

今から思えばHDDケースも取っておけば、そのまま入れることも出来たのかもしれません。

ケーブルはコネクタから抜けやすくて、硬くあまりよくありません。
trello の rest api をたたいてカード作ったり動かしたりする。

# API KEYとAPI TOKENの取得

https://trello.com/app-key にアクセスして、 Power-Up管理者ポータルへ移動し、作成のリンクに移動し、必要なことを入力する。Power-UpとかREST API使うのにキーが欲しいのに何これ?と思っても進むとキーとトークンが得られる。
なんかこんなの使わないよcurlでAPIたたくだけしかしないよと思ってもそれっぽい値を入力して進む。
そうすると、APIキーが生成されて表示される。秘密(多分secret)は無視する。そこの手動でトークンを生成できますのリンクを辿り、
以下のアプリケーションへアウントへのアクセスをを許可しますかで許可をする。とトークンが表示されるので、コピーしてメモっておく。



# trelloの操作
## メンバー取得
これでメンバーのidを取得する。

```
curl -s "https://api.trello.com/1/members/$username?key=$apikey&token=$token"
```

## ボードID取得
```
curl "https://trello.com/1/members/$username/boards?key=$apikey&token=$token"
```

## list ID一覧

```
curl "https://trello.com/1/boards/$boardid/lists?key=$apikey&token=$token&fields=name"
```

## カード移動

```
curl --request PUT \
     --url "https://api.trello.com/1/cards/$cardid" \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json' \
     --data "{
       \"idList\": \"${listid_working}\",
       \"key\": \"${apikey}\",
       \"token\": \"${token}\"
     }"
```

## カード作成

```
curl -X POST "https://trello.com/1/cards?key=$apikey&token=$token&idList=$listid&name=i_create_a_new_card"
```
もしくは
```
curl -X POST "https://trello.com/1/cards?key=$apikey&token=$token&idList=$listid" \
  --data-urlencode "name=I create a new card."
```

## カード作成

```
curl --request POST \
     --url 'https://api.trello.com/1/cards' \
     --header 'Accept: application/json' \
     --header 'Content-Type: application/json' \
     --data "{
       \"name\": \"a new card name\",
       \"idList\": \"$listid\",
       \"idMembers\": \"$userid\",
       \"idLabels\": \"$labelid\",
       \"due\": \"2023-04-28T12:00:00.000Z\",
       \"desc\": \"description is here.\",
       \"comments\": \"hello, world!\",
       \"key\": \"${apikey}\",
       \"token\": \"${token}\"
     }"
```

## アクティビティログにコメントを追加する
```
curl -X POST -H "Content-Type: application/json" \
    -d '{"text": "アクティビティログに追加するコメント"}' \
    "https://api.trello.com/1/cards/${cardid}/actions/comments?key=${apikey}&token=${token}"
```  

## カードをアーカイブする

```
curl -X PUT -H "Content-Type: application/json" \
   -d '{"closed": true}' \
   "https://api.trello.com/1/cards/${cardid}?key=${apikey}&token=${token}"
```

## カード取得

```
curl -s "https://api.trello.com/1/search?query=$userid&modelTypes=cards&key=$apikey&token=$token" 
```

# jq 使ってフィルタ

```
cat foo.json | jq '.cards[] | select(.closed == false and .idList != "1234567890" )  | {name, id, desc, idList, labels: [.labels[] | {id: .id, name: .name}], comment: .badges.comments, closed }'
```
未経験からエンジニアになるために必要な能力とは？

# プログラミングにおいて必要不可欠な論理的思考力とその身につけ方

プログラミングをするにあたって、論理的思考力は欠かすことができません。論理的思考力も、もちろん社会人になってからも伸ばせるものだとは思います。もし苦手という自覚があるのであれば、積極的に論理学等の勉強をして、身につけましょう。

**おすすめの書籍**：[**大人のための学習マンガ それゆけ! 論理さん**](https://www.notion.so/024e261f08e54c6ca0c9ff0726ee30ec) 

# 未経験からエンジニアになるために必要な能力とは？

エンジニアになるには未経験からでも大変な道のりがあります。自分で考えて自分で動ける能力が必要不可欠です。しかし、理由をつけて何もしないというのではなく、条件が整わなくても試行錯誤しながら目標に向かって進むことが大切です。自分自身を客観的に見ることが重要であり、得意なことや苦手なことを理解することも必要です。

未経験からエンジニアになることは大変です。もちろん年齢によっては、大学卒業後何年も実務経験を積んでいる人や、大学入学時から勉強している人がライバルになるかもしれません。そのため、自分で考えて自分で行動できる能力がなければ、エンジニアとして続けることは困難です。

### **●時間や条件のせいにしない**

条件が整わなくても、自分の目指すところに近づくための方法を考えることが重要であり、非常に大切な力です。

面接をする際には、「何かしら理由があってまだ動き出せていない」という人が多いです。もちろん、やむを得ない理由もあるかもしれませんが、条件が整っていないから動き出せないというマインドでは、未経験からエンジニアになることは難しいと感じます。全ての条件が整うことは稀です。条件が整っていない中で、試行錯誤して自分の目指すところに近づくための方法を考えることが重要であり、非常に大切な力です。

### **●自分を客観的に見る**

自分自身を客観的に見ることは、人生において非常に重要なスキルです。自分が置かれている状況や課題について、冷静かつ客観的な視点を持つことができると、より効果的な問題解決策を見つけることができます。

また、自分自身が得意なことや苦手なことを理解することも重要です。自分自身の強みと弱みを理解することで、より適切なキャリアパスを選択することができたり、自分の成長に繋がる取り組みを行うことができます。いわゆる「彼を知り己を知れば百戦危うからず」という言葉がありますが、これは自分自身を深く理解し、他人を理解することができることで、人生において成功するために必要なスキルであるということを表しています。

📌「**彼を知り己を知れば百戦殆うからず」とは**

> 敵と味方の実情を熟知していれば、百回戦っても負けることはない。敵情を知らないで味方のことだけを知っているのでは、勝ったり負けたりして勝負がつかず、敵のことも味方のことも知らなければ必ず負ける
> 

### **●自分で考える力と質問をする力**

仕事では自分で考え行動することが大切であり、分からないことは積極的に質問して解決することが必要です。期限内に仕事を終わらせるため、先輩や有識者の助けを借りることもあります。質問する前に自分が何を知りたいか整理し、自分で考える力と質問する力を両方活用しましょう。

仕事において、「1から10まで教えてもらえる」と思うのは誤解です。社会人は学生と異なり、授業料を支払っているわけではありません。若手や新人であっても、対価を受け取っている以上、プロとしての自覚が必要です。自分で考え、自分のやるべきことを見つけられる人こそ、仕事に適しています。常に指示を待つ人は、仕事ができないでしょう。

ただし、自分で考え抜く力も重要です。分からないことがあれば、質問することも大切です。自分で悩んでいる時間よりも、質問をすることでより早く結論にたどり着くことができます。

仕事は時間内に終わらせなければなりません。一人で考えて結果期限を守れないような状況にならないように、解決に近づかない場合は先輩や有識者を積極的に利用しましょう。

ただし、質問する前には、「自分が何をわかっていないか？」や、「何を教えてほしいのか？」を整理しましょう。これにより、回答者への配慮になるだけでなく、回答に対する深い理解につながることでしょう。

自分で考える力と質問する力は相反するものではありません。今直面している課題は、自分で解決すべきか、それとも質問して解決すべきか？より良い結果を得るために、常に自分で判断することが大切です。

##### 「質問やアドバイスを求めることは恥ずかしいことではない」

あなたが質問やアドバイスを求めることは恥ずかしいことではなく、むしろ自分自身を高めるために必要なことです。知らないことを知らないままでいることのほうが、恥ずかしいことです。上司や先輩から不愉快な対応をされたときは、諦めて他の人に聞いたり、上の上司に相談することも大切です。

🔰 **ワンポイントハッキング**

たまに、せっかく質問をしたのに、上司や先輩から「忙しい」「時間がない」「そんなことも知らないのか？」など、不快な対応を受けることがあります。頑張って対処することも大切ですが、頑張りすぎると心が折れてしまうこともあります。そんなときは、諦めて他の人に相談するか、上司にばれないようにひそかに相談してみましょう。上司にも対応してもらえない場合は、その会社を辞めることも検討してみるべきです。


### ●与えられた職務を確実に遂行する責任感

与えられた職務を確実に遂行することは、仕事上で最も重要なポイントです。仕事が完了できなくなった場合に、「アクシデントがあったから仕方がない」という考え方は、信用や仕事の質を低下させることになります。

自分が誰かに仕事を頼む立場になった場合、消極的な考え方を持った人には頼みたくないものです。このような積極性や責任感は、エンジニアに限らず、どの職種においても大切な要素です。

**おすすめの書籍：[**ザ・ゴール**]() 、[**わが息子よ、君はどう生きるか――チェスターフィールド卿の現代にこそ輝く**](https://www.notion.so/457dbb1b5d40429bade8eb61eb757512)**
SQL・Databesを基本からまとめてみた【超入門】

## データベースとは？
大量の情報を保存し、コンピュータから効率よくアクセスできるように整理したデータの集まり。
情報（Data）基地（Base）

## データベースの用途
ECサイトやSNSなどのシステムのほとんど全て
➡︎ データを扱うシステムでデータベースを使っていないシステムはない

## データベースの仕組み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/3d3cb1d6-3109-0f65-0e7d-2c7e1efd1542.png)

## データベースを利用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/49a0eeeb-e9ae-02fd-575e-a7928d4bb635.png)

## リレーショナルデータベースとは？
Excelのように列と行からなる、テーブルと呼ばれる２次元表のような形式でデータを管理。主流であり、他のデータベースを理解する基礎になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/89e559ad-7dc3-99ff-d97f-e725353bd776.png)

## SQLとは？
RDBMSをコントロールするための言語
どのRDBMSに対しても使える標準SQLとRDBMSごとに特有の方言がある 
➡︎ まずは標準SQLを覚えるのが最も良い

## SQLの3つの機能
①データ操作・・・表のデータの登録・修正・削除・検索、複数の表の結合なdp
②データ定義・・・データベースのデータ構造の定義など
③データ制御・・・データベースへのアクセス制御など

## データ操作の構成要素
SQLのデータ操作は以下の4つの命令文から構成されている

①SELECT・・・テーブルからデータを抽出する
②INSERT・・・テーブルからレコードを追加する
③UPDATE・・・テーブルの中にあるレコードのデータの内容を更新する
③DELETE・・・テーブルの中にあるレコードを削除する

##### SELECT文によって必要なデータを取り出すこと『問い合わせ（クエリ）』と呼ぶ


## 参考サイト
[3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL](https://itplusjp.udemy.com/course/sql-begginer/learn/lecture/14052761#overview)
[データベースの基本を図解！ データベースの特徴や導入するメリットは？](https://codezine.jp/article/detail/13504)
[DBMSとは？なんの略？データベースを管理するためのシステムです](https://webs-studio.jp/program/sql/5975/)
[リレーショナルデータベースで増え続けるデータを効率良く管理しよう](https://www.tableau.com/ja-jp/learn/articles/what-is-Relational-Database)
VSCodeの拡張機能Genie AIを使ってみた

# ChatGPT-Genie AI
宇宙最強魔人:man_with_turban:
https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode

# 設定
- インストールしたら、とりあえずOpenAiのAPI Key（以下のリンクから取得）を設定。
https://platform.openai.com/account/api-keys
- このままでもいろいろできるけど、回答を日本語にしてほしいので質問文を日本語化。
設定の諸々に「in japanese」を追加。以下は例。命令を日本語訳にするのでも良さそう。
```
Add comments for the following code -> Add comments for the following code in japanese
```

# 使ってみた
- Add tests
選択したコードのテストを追加

- Find bugs
選択したコードのバグを分析

- Optimize
選択したコードに提案を追加して改善

- Explain
選択したコードを説明

- Add comments
選択したコードにコメントを追加


こんな感じでサイドバーに出る。Insertとかできる。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672888/63d6c8b4-6171-65ae-d605-fea60a0def66.png)

# まとめ
コーディング効率化できそう！機密情報とかを送らないように注意。

:::note warn
残件
他の設定もあとで見る。
他にもコマンドあるので見ておく。
:::
Azure仮想マシンを作成してssh接続する方法（公開キーver）

これからQiita投稿をはじめてみようと思い、超初心者ですがやってみようと思います。

仮想マシンを作成したとき、いつもどうやってssh接続したらいいんだっけ？と
忘れてしまっていつもググっていたので、記事にして残しておこうと思います。

OSはLinuxのUbuntuを使ってみました。

VM作成
------------
1\. Azureポータルにて、管理者アカウント-認証の種類項目で、「ssh公開キー」を選択。
<img width="700" alt="2023-04-13 071821.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321298/8fbf146b-ea6c-5c09-73fc-c8717a2de2b0.png">
#

2\. 流れに沿ってVM作成後、秘密キーのダウンロードができるので、「秘密キーのダウンロードとリソースの作成」を選択して
任意の場所に格納する。
<img width="700" alt="2023-04-13 080452.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321298/b908a1f0-9a91-245c-9457-07a8b55cc839.png">

VM端末へログイン
------------
1\. Azureポータルで、作成したVMのパブリックIPアドレスを確認。
<img width="700" alt="2023-04-13 081649.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321298/c31fd06f-dd52-f15d-6e62-4764bec1e0a6.png">

2\. Tera TermなどのターミナルでパブリックIPアドレスをホストに設定し、OKボタン押下。
<img width="700" alt="2023-04-13 081755.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321298/5412ba1c-9fe7-3cfb-0749-0b95caa922b9.png">

3\. VM作成時に設定したユーザ名を入力。
認証方式に「RSA/DSA/ECDSA/ED25519鍵を使う」を選択し、秘密鍵は先ほどVM作成時にダウンロードしたpemファイルを選択する。
OKボタン押下。
<img width="700" alt="2023-04-13 082232.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321298/53a6c736-abdf-a182-d2ea-d6f87493c528.png">

4\. ログイン認証が完了し、作成したAzure VMに接続できていることを確認。
<img width="700" alt="2023-04-13 083750.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321298/1add9b7f-1985-ae50-19a8-eb98c9698134.png">

#
### （参考）PowerShellでssh接続する方法
https://learn.microsoft.com/ja-jp/azure/virtual-machines/ssh-keys-portal
を参考に、PowerShellを立ち上げてssh接続する方法も試してみました。

**コマンド**
『ssh -i (ダウンロードしたpemファイルのパス) ユーザ名@IPアドレス』
```
ssh -i /Downloads/mySSHKey.pem azureuser@xx.xx.xx.xx
```


PowerShellでもssh接続できることが確認できました！
<img width="700" alt="2023-04-13 083637.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3321298/8c14cb43-847d-d3d3-25c7-41088bbd9c89.png">
初学者向けの仮想環境の作り方(virtual env編)

初めまして、今日からプログラミングを学んでいる現役高専生の自分が情報を発信していきます。内容は主にプログラングですが他の分野も出していこうと思います。
# pythonにおける仮想環境とは？
　簡単にいうとコンピュータ上に複数の独立したPython環境を作成し、それぞれの環境で異なるバージョンのPythonパッケージを管理するための仕組みのことです。”仮想”という言葉がつくので実際には存在しないのかな？と思うかもしれませんがそうではありません。

# わざわざ仮想環境を構築する必要がある？
　必ずしなくてはいけない！！という必要はありませんがpythonをこれからガンガン使う人にとってはこのことを学んで損はないと思います。理由としては、プロジェクトごとに必要な環境を独立して管理し、依存関係の問題を回避することができるからです。

# 実行環境
デバイス：MacBook Air 
チップ：Core i3
OS：MacOS

# 仮想環境の構築の手順
　まずはターミナルを起動してください。アイコンは以下の画像です。


![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329528/e749d1a4-9120-cbfc-285b-1398ada8f057.png)

このアイコンをダブルクリックするとウィンドウが開いて以下の文字列が出てくると思います。
```
username@usernamenoMacBook-Air ~ %
```

こちらの文字列が出てきたらデスクトップに移ってください。コマンドは以下の通りです。
```
username@usernamenoMacBook-Air ~ % cd desktop
```
(メモ: cdはcurrent directoryという単語の略です)

そうするとデスクトップに作業場所が移ったと思います。早速仮想環境を構築いきましょう。
以下のコマンドをターミナル入力すると新しいフォルダがデスクトップ上に作り出されると思います。

```
username@usernamenoMacBook-Air desktop % python -m venv ${ファイル名}
```
${ファイル名}には任意のファイル名を入れてください。仮に sss  というファイル名にすると![スクリーンショット 2023-04-13 23.45.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329528/d6ee3f15-2716-9c5b-3fb9-d6b84843b8d7.png)

このようなファイルがデスクトップ上につくられると思います。
この段階で以下のエラーが出た人はpythonがインストールされていません。


```
zsh: command not found: python
```

こちらのURLに飛んでpythonをインストールしてください。
https://proengineer.internous.co.jp/content/columnfeature/22312

無事に仮想環境に構築できた人は作成したフォルダを開けてみましょう。
![スクリーンショット 2023-04-14 0.05.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329528/45637db0-359e-2342-8316-6e71f3a88836.png)

ファイルの中にこのようなファイルが新たに作成されたと思います。 

## 仮想環境に入ろう　
今ままでは仮想環境に入るまでの手順を説明してきました。次は環境内に入りましょう。入り方は至って簡単です。まず、今のディレクトリの場所を確認してください。デスクトップの場合は作ったフォルダの中に移動してください

```
username@usernamenoMacBook-Air desktop % cd ${ファイル名}
```
このコマンドを打つとディレクトリが移動すると思います。 
```
username@usernamenoMacBook-Air ${フォルダ名} % 
```
ターミナルがこのようになりましたでしょうか。そうしたら準備完了です。以下のコマンドを打ってください。 
```
username@usernamenoMacBook-Air ${フォルダ名} % source bin/activate 
```
ターミナルに以下のような出力がされましたか？　
```
(${フォルダ名}) username@usernamenoMacBook-Air ${フォルダ名} %  
```
一番最初に()があったら完了です。これで開発環境に入ることができました。このあとは開発環境内で複数のフォルダをつくってもいいし、pythonのバージョンに合わせて別の仮想環境を作ってもよきです！ 

# 仮想環境からの抜け方 
最後に仮想環境からの抜け方です。以下のコマンドを打ちましょう。
```
(${フォルダ名}) username@usernamenoMacBook-Air ${フォルダ名} % deactivate 
```
これで抜けることができます。  
# 最後に　
今回は初学者向けに仮想環境の作り方、入り方、抜け方だけを簡単に説明しました。お役に立つことができたら幸いです。
エンジニアとして成長するための学習戦略と継続的な取り組み

業務中に学ぶだけでは、勉強量としては足りません。就業初期段階や、より高いレベルでの仕事をしたいと望む場合は、週末や移動中の時間を活用して積極的に学ぶことが必要です。また、技術書やオンラインコース、勉強会やカンファレンスなど、様々な学習リソースを活用することが重要です。

活躍できるエンジニアになるためには、積極的・効率的かつ継続的に学習することが必要です。そのためには、自己管理能力を高め、自分に合った学習方法やスケジュールを見つけることが重要です。また、学びながらアウトプットすることで、知識やスキルを定着させることも必要です。

### **効率的な学習方法**

1. **目的を設定する**
学習の目的や目標を明確に設定することで、意識的に学習内容を選択し、効果的な学習をすることができます。
2. **スケジュールを立てる**
学習する時間を決め、スケジュールを立てることで、自分に合った学習リズムを作ることができます。
3. **集中力を高める**
学習に集中するために、ノイズの少ない環境を作ったり、時間を区切って集中することが大切です。
4. **アクティブラーニングを実践する**
アクティブラーニングは、受動的な学習方法ではなく、自分で問題を解いたり、課題をこなしたりする方法です。この方法で学習すると、効果的な記憶に繋がります。
5. **復習を行う**
学習したことを定期的に復習することで、長期的な記憶として定着させることができます。
6. **メモをとる**
学習中に気づいたことや、重要なポイントはメモをとることで、後で復習する際に役立ちます。
7. **目標達成のために行動する**
目標を達成するためには、自分自身で行動することが大切です。習慣化し、継続的に学習することで、効率的・効果的な学習をすることができます。

これらの習慣を身につけることで、より効率的・効果的な学習が可能になります。また、自分に合った習慣を見つけることが重要であり、試行錯誤しながら自分に合った学習スタイルを見つけることが望ましいです。

もし今、あなたが学ぶことに苦手意識を持っていたとしても、決して焦る必要はありません。今日から少しずつ始め、じっくり続けることで習慣にすることが肝心です。

**おすすめの書籍**：[独学大全](https://www.amazon.co.jp/%E7%8B%AC%E5%AD%A6%E5%A4%A7%E5%85%A8%E2%80%95%E2%80%95%E7%B5%B6%E5%AF%BE%E3%81%AB%E3%80%8C%E5%AD%A6%E3%81%B6%E3%81%93%E3%81%A8%E3%80%8D%E3%82%92%E3%81%82%E3%81%8D%E3%82%89%E3%82%81%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%EF%BC%95%EF%BC%95%E3%81%AE%E6%8A%80%E6%B3%95-%E8%AA%AD%E6%9B%B8%E7%8C%BF-ebook/dp/B08DR7YL5J/ref=sr_1_1?adgrpid=72300894944&hvadid=649100370645&hvdev=c&hvlocphy=1028851&hvnetw=g&hvqmt=e&hvrand=15325506567711398443&hvtargid=kwd-617795568440&hydadcr=16034_13644400&jp-ad-ap=0&keywords=%E7%8B%AC%E5%AD%A6%E5%A4%A7%E5%85%A8&qid=1681354144&sr=8-1)
バッチの変数トリミングサンプル

## こんなニーズあるかわかりませんが、バッチの変数の最初のスペースを取り去るサンプルです。

変数の中のスペースをすべて削除したい場合は、文字置換で
set data=%data: =%
とすれば簡単にできます。

ところが、「最初のスペースだけを取りたい」という場合はこれは使えないので、作ってみました。
使い道ないかもしれませんが・・・

ちなみに、バッチの変数はグローバル変数が基本です。
でも、出来るだけ、サブルーチンで使う変数はメインルーチンと独立させたいですよね。

一方で、バッチの場合、サブルーチンから数字以外を戻すことが出来ません。

で、今回は、「何文字目から取り出せば頭のスペースを削除できるか？」をリターンすることにしました。
メイン側で、リターンから文字を合成する必要がありますが・・・
なお、このようなケースでは、変数の途中にもスペースが含まれるケースがほとんどなので、””で囲んでおくことを前提としています。

## サンプルバッチは以下の通り

今回はたいして説明するところもないので、このサンプルを掲載して終わりです。
サブルーチンから数字を返す場合は、exit /b の後ろに変数を書きます。
コールもとはそれをERRORLEVELとして受け取ることができます。
ERRORLEVELの最大値は、「2147483647」だと思いますので、十分です。

```bat
rem メインルーチン
set data="   abcd efg  hi"
echo trim前=%data%
call :trim %data%
set trim_start=%ERRORLEVEL%
set data=%data:~0,1%!data:~%trim_start%!
echo trim後=%data%

exit /b

rem サブルーチン
:trim
rem 入力：
rem %1 トリミングしたい文字れると含むデータ
rem 途中にスペースを含むため、""で囲んでコールする事。
rem そうしないと、スペースが区切り文字となるので、複数パラメータと認識されてしまう。
rem 出力：
rem スペースを省いた開始位置

set trim_count=1
set trim_data=%1

:trim_next
set trim_head=%trim_data:~1,1%

if "%trim_head%"==" " (
  set /a trim_count+=1
  set trim_data=%trim_data:~0,1%%trim_data:~2%
  goto :trim_next
)
exit /b %trim_count%

```

ちなみに、グローバル変数でいいじゃん！
という場合はもっともっと、シンプルです。
こちらは、、サブルーチン内で、メイン側の変数そのものを書き換えるので、リターン値は無いです。

```bat
rem メインルーチン
set data="   abcd efg  hi"
echo trim前=%data%
call :trim
echo trim後=%data%

exit /b

rem サブルーチン
:trim
rem 途中のスペースは取らずに、最初のスペースだけ削除する。

set trim_head=%data:~1,1%
if "!trim_head!"==" " (
  set data=%data:~0,1%%data:~2%
  goto :trim
)
exit /b
```
ターミナルを開く度にcondaの仮想環境がactivateされる

## 事象
ターミナル起動時に毎回勝手にcondaの仮想環境がactivateされる。
以下の様に表示されておりました。(base以下は省略。)
```terminal
(base)〜$ 
```

## 解決法
解決法はauto_activate_baseをfalseにする事でした。
コマンドは以下の様になります。

```terminal
$ conda config --set auto_activate_base false
```

## 参考
[【M1/Mac】毎回勝手にCondaが起動されるのを止める方法](https://zenn.dev/teba_eleven/articles/d318ccf5f8f729)
[Flutter]Firebase登録後にpod installでエラー

## はじめに
Firebase登録後にiosディレクトリでpod installコマンドを打ったところ、エラーが起きたので解決法についてまとめておきます。

## エラー文
```terminal:terminal
[!] CocoaPods could not find compatible versions for pod "Firebase/Firestore":
  In Podfile:
    cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) was resolved to 4.5.0, which depends on
      Firebase/Firestore (= 10.7.0)

None of your spec sources contain a spec satisfying the dependency: `Firebase/Firestore (= 10.7.0)`.

You have either:
 * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
 * mistyped the name or version.
 * not added the source repo that hosts the Podspec to your Podfile.
```

## 解決法
iosディレクトリで、
```terminal:terminal
pod repo update
pod install
```

## 参考
https://stackoverflow.com/questions/56055142/cocoapods-could-not-find-compatible-versions-for-pod-firebase-coreonly
電子レンジを分解する

こんにちは@tama_Udです。

これは[一人でダイソーのおもちゃを毎日分解する Advent Calendar 2022](https://qiita.com/advent-calendar/2022/daiso-toy-disassembly)の25日目（最終日）の記事です。

今回は電子レンジを分解していこうと思います...が、
Qiitaに書いていたんですが、月100MBの画像アップロード制限に引っかかってしまったのではてなブログで公開します。

こちらからご覧ください。

https://tama-ud.hatenablog.com/entry/2023/04/13/101815
【WSL2】メモリ消費を抑える

## 問題
 - WindowsでDockerを使用するためにWSL2を使用するとWindowsホストのメモリ使用率が異常に高くなり、動作も重くなってしまう。
 - ```Vmmem```というプロセスが大量にメモリを使用している。
 - ```Vmmem```はWSL2が仮想マシンを起動させる際nのプロセス。

## 対応
 - ```.wslconfig```というファイルを作成しメモリの使用量を指定する。

```.wslconfigを作成するパス
C:\Users\[ユーザ名]\.wslconfig
```

```.wslconfigの内容
[wsl2]
memory=1GB
```

### 注意
- ```.wslconfig```の記載ルールはiniファイルと同じ
- すでにWSL2を起動している場合、ファイル作成、記載が終わったらWSL2を再起動させて設定を反映させる。

### その他
- WSL2 の Swap が有効になっている場合、メモリが余っている場合でも大量に読み書きが発生するため、オフにしておくのがおすすめ

```.swapをオフにしておくのがおすすめ
[wsl2]
swap=0
```

## 最後に

 - WSL2は、何も設定をしていないと大量にメモリを消費する。
      >WSL2 VM の既定のメモリ割り当てを、ホスト メモリの 50% または 8 GB のどちらか少ない方になるように調整します [GH 4166]。

 - .wslconnfigを作成し、メモリの使用量を固定化させる。