OmniAICreator/Qiita-1.07M huggingface dataset:
BetterChatGPTでAzure OpenAIServiceのGPT-4 turboを使う方法

## 問題
[BetterChatGPT](https://bettergpt.chat/)で、カスタムエンドポイントにAzure OpenAI Serviceのエンドピントを指定すても以下のエラーが出て利用できない。

`Message from Better ChatGPT:
Invalid API endpoint! We recommend you to check your free API endpoint.`

Pythonで叩いて疎通確認は取れている

[issue](https://github.com/ztjhz/BetterChatGPT/issues/208#issuecomment-1634348686)にも同じ状況で困っている人がいた。

## 設定値
- APIエンドポイント: `https://{リソース名}.openai.azure.com/` 
- APIキー: `*****`


## 解決方法
![betterchatgpt_gpt-4_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898772/7b72dfa3-cafa-8bd9-943f-9213ce45bdd0.png)

`gpt-4-1106-preview`ではなく`gpt-4`に設定することでgpt-4-turboが使用できた。



### 理由
Azure OpenAI ServiceとOpenAIではモデル名が異なるためと思われる。
![スクリーンショット 2023-11-26 20.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898772/11b6a628-ecfe-1260-aa00-8a230cde3a73.png)
OpenAI騒動まとめ

以下は、OpenAIの新しい取締役会メンバーの略歴を含む、ニュースの要点をMarkdown形式でまとめたものです。

- **OpenAIのリーダーシップ変更**
  - Sam Altman氏がCEOに復帰。
  - 元Salesforce.comのCEO、Brett Taylor氏が会長に就任。
  - Larry Summers氏とAdam D’Angelo氏が新しい取締役会メンバー。

  - OpenAIへの愛情を表明。
  - 「チームとOpenAIのミッションを団結させるために」と述べ、Microsoftとの協力を決定。
  - 新しい取締役会とMicrosoft CEOのSatya Nadellaのサポートに期待。

- **Greg Brockman氏の復帰**
  - 共同創業者であり、以前は取締役会の会長を務めていた。
  - 「OpenAIに戻り、今晩からコードを書く」と発表。

- **MicrosoftのCEO、Satya Nadellaのコメント**
  - OpenAIの理事会変更を歓迎。
  - 「より安定した効果的なガバナンス」への重要なステップと評価。
  - OpenAIとの強力なパートナーシップと次世代AIの価値提供に期待。　　　

- **Brett Taylor氏の略歴**
  - アメリカのコンピュータプログラマであり起業家。
  - GoogleでGoogle Mapsの開発チームの一員。
  - FacebookのCTO、Twitterの取締役会議長、Salesforceの共同CEOを歴任 [oai_citation:1,Bret Taylor - Wikipedia](https://en.wikipedia.org/wiki/Bret_Taylor)。
  - スタンフォード大学で学士号と修士号を取得 [oai_citation:2,Bret Taylor - Wikipedia](https://en.wikipedia.org/wiki/Bret_Taylor#:~:text=Taylor%20attended%20,6%5D%E3%80%91)。
  - Facebookの「いいね！」ボタンの考案者 [oai_citation:3,Bret Taylor - Wikipedia](https://en.wikipedia.org/wiki/Bret_Taylor)。
  - Quipを創設し、Salesforceに売却 [oai_citation:4,Bret Taylor - Wikipedia](https://en.wikipedia.org/wiki/Bret_Taylor)。
  - Salesforceで製品責任者、COO、共同CEOを務める [oai_citation:5,Bret Taylor - Wikipedia](https://en.wikipedia.org/wiki/Bret_Taylor)。
  - 2023年にOpenAIの会長に就任 [oai_citation:6,Bret Taylor - Wikipedia](https://en.wikipedia.org/wiki/Bret_Taylor)。

- **Larry Summers氏の略歴**
  - アメリカの経済学者。
  - 米国財務省長官、国家経済会議議長、ハーバード大学学長を歴任 [oai_citation:7,Lawrence Summers - Wikipedia](https://en.wikipedia.org/wiki/Lawrence_Summers)。
  - ハーバード大学で経済学教授 [oai_citation:8,Lawrence Summers - Wikipedia](https://en.wikipedia.org/wiki/Lawrence_Summers)。
  - クリントン政権で財務次官補、財務副長官、財務長官を務める [oai_citation:9,Lawrence Summers - Wikipedia](https://en.wikipedia.org/wiki/Lawrence_Summers)。
  - オバマ政権下で国家経済会議議長を務める [oai_citation:10,Lawrence Summers - Wikipedia](https://en.wikipedia.org/wiki/Lawrence_Summers)。
  - 2023年にOpenAIの取締役会メンバーに就任 [oai_citation:11,Lawrence Summers - Wikipedia](https://en.wikipedia.org/wiki/Lawrence_Summers)。

- **Adam D'Angelo氏の略歴**
  - アメリカのインターネット起業家。
  - Quoraの共同創業者兼CEO [oai_citation:12,Adam D'Angelo - Wikipedia](https://en.wikipedia.org/wiki/Adam_D%27Angelo#:~:text=Adam%20D%27Angelo%20,59%E2%80%A0Mountain%20View%2C%20California%E3%80%91)。
  - フィリップス・エクセター・アカデミー卒業、カリフォルニア工科大学でコンピュータサイエンスの学士号取得 [oai_citation:13,Adam D'Angelo - Wikipedia](https://en.wikipedia.org/wiki/Adam_D%27Angelo#:~:text=Adam%20D%27Angelo%20was%20born%20on,4%5D%E3%80%91)。
  - Facebookの創成期メンバーでCTOを務める [oai_citation:14,Adam D'Angelo - Wikipedia](https://en.wikipedia.org/wiki/Adam_D%27Angelo)。
  - Quoraを設立し、Instagramなどへの投資も行う [oai_citation:15,Adam D'Angelo - Wikipedia](https://en.wikipedia.org/wiki/Adam_D%27Angelo)。
  - AIスタートアップPoeの創業者 [oai_citation:16,Adam D'Angelo - Wikipedia](https://en.wikipedia.org/wiki/Adam_D%27Angelo#:~:text=D%27Angelo%20is%20also%20the%20founder,10%5D%E3%80%91)。
  - 2018年にOpenAIの取締役会メンバーに就任し、2023年にはSam Altman氏のCEO復帰を支持 [oai_citation:17,Adam D'Angelo - Wikipedia](https://en.wikipedia.org/wiki/Adam_D%27Angelo#:~:text=In%202018%2C%20he%20joined%20the,while%20D%27Angelo%20retained%20his%20position)。

これらの情報により、OpenAIのリーダーシップチームの背景と専門知識が明確になります。
M1Mac(2021)のzshインストールからプラグイン導入までの方法

いくつか詰まる点があったので、備忘録として書いています。
M1 Macを使っているため、ログインシェルの変更がうまくいかない人に参考になるかと思います。

# 1. zshのインストール
```
brew update
brew install zsh
```

# 2. zshをログインシェルの変更
ここで、いろんな記事ではzshのパスを`/usr/local/bin/zsh`に設定していますが、M1 MacではHomebrewのインストール先が`/opt/homebrew`であるため、それに合わせてパスを追加する必要があります。
https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc
```shell
code /etc/shells
```
```text:/etc/shells
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/zsh # 追記しました
```
```shell
chsh -s /opt/homebrew/bin/zsh
```

```shell
$ echo $SHELL
/opt/homebrew/bin/zsh
```

# 3. Zinitのインストール
次にZshのプラグインをインストールするためのプラグインマネージャをインストールします。
今回は**Zinit**を使用します。
他にもプラグインマネージャにはzplugやsheldonなどもあります。

# 4. zshのプラグインのインストール

以下の記事によくまとまっているので、ここでは割愛します。

https://qiita.com/obake_fe/items/c2edf65de684f026c59c#zsh%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3

# 5. VSCodeのZsh設定
このままだとVScodeのzshでgitアイコンなどが表示されない。
そのため、VScode内でフォントを指定する必要がある。
settings.jsonに以下の記述を追記してあげてください。
```json:settings.json
{
...
"terminal.integrated.fontFamily": "MesloLGS NF",
"terminal.integrated.fontSize": 12,
}
```

# 導入完了
これでzshのプラグイン導入まで完了です。

良いzshライフを楽しみましょう！！

# 参考記事
https://qiita.com/obake_fe/items/c2edf65de684f026c59c#iterm2

https://qiita.com/kinchiki/items/57e9391128d07819c321
半加算器 Python3編

https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step8

A + Bを２進数で計算した結果を出力するという問題。
２進法は０と１で表されるので今回のような論理演算にはよく使われる、と習った。

で、今それをやっている。
ちなみに、私は数学嫌いだった。（いわゆる文系プログラマ）
まあ、やらないわけにはいかないので。

とにかく。場合分けだな。

```
        A
        B
＝＝＝＝＝＝＝
    C   S
```
Cについて考えると
A＝０　と　B= 0 なら、0で繰り上がらないので０
A＝1　と　B= 0 なら、1で繰り上がらないので０
A＝０　と　B= 1 なら、1で繰り上がらないので０
A＝1　と　B= 1 なら、1で繰り上がるので１
この結果は　ANDのときと同じなので、
C =　A and B  という関係になっていることがわかる。

Sについて考えると
A＝０　と　B= 0 なら、0
A＝1　と　B= 0 なら、1
A＝０　と　B= 1 なら、1
A＝1　と　B= 1 なら、２で繰り上がるので０になる
この結果は　XORのときと同じなので
S = A XOR B　という関係になっていることがわかる。

ここから前回の計算を利用して計算すればOK

```
A, B = map(int,input().split())
C = A & B
S = A ^ B
print(C, S)

```
Salesforce「Winter'24」フロー新機能「カスタムエラー」調査してみた～気を付けること～

こんにちは。本橋です

今回はSalesforceのフロー新機能「カスタムエラー」について調査してみました

こちらは「特定のフロー条件の場合エラーメッセージを表示させフローを止める」ということが可能な設定になります

使い方の一例として、「削除時に削除させないようにエラーメッセージを出せる」という設定を確認しました
（設定の仕方はこちらをご確認ください）

https://qiita.com/Takaa/items/b2f84710cac0e8b5fabb


今回は「レコード削除を防ぐ」以外にどのような設定が可能なのか確認します


# 使い方1 入力規則のような設定が可能

入力規則とは
入力規則は
・特定のレコード条件の場合特定の項目の値でない場合（空欄など）エラーを出して保存させないことが可能

という機能です

入力規則の詳細はこちらをご確認ください

https://qiita.com/Takaa/items/6bc57c8b58f18bffbc5e

このような設定はフローでも可能になりました

例をみてみましょう

例１　取引先作成時、電話番号が入力していない場合エラーを出す場合
このような例の場合、今まで入力規則で対応していましたがフローで設定しましょう

設定方法はこのようになります

![フロー１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/44156017-abf3-9a65-20b7-674bb20a3bad.png)
![フロー２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/abd7aaaf-c0ae-b44c-9f02-fca8fba62830.png)

このように設定すると、取引先作成時に入力規則のように「電話番号」が空欄の場合にエラーが出て入力できなくすることが可能です

![電話０１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/cbde6358-702f-5989-437c-8d7365036d4b.png)

# 使い方その2 重複ルールのようなものの作成が可能

他にネットで探した情報として重複ルールのように特定の条件で特定のレコードを重複とみなし保存不可にすることが可能のようです

こちらについては分かりやすい記事が２つほどございましたので共有します

https://sf.forum.circlace.com/articles/926528712852115456

https://base.terrasky.co.jp/articles/baWrM

# カスタムエラーで気を付けること1 カスタムエラーの下に他アクションを付けてはいけない


今回カスタムエラーを触ってみて発見（？）したことの一つに
・カスタムエラーアクションの下に他アクションをつけてはいけない（他アクションを付けた場合、エラーが発生せずに保存可能）
ということです

今回では分かりやすく、先ほどの「電話項目が空欄の場合エラーを出すカスタムエラー」の下に
・取引先名をAにする
という更新アクションを加えました
![カスタムエラーA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/259d848a-d8e2-9e51-c0eb-94808bdc370e.png)

さて、この状態で取引先名を「株式会社田中」と入力し電話番号を空欄にした場合どうなるか確認しましょう


この場合、私は
・取引先の電話番号が空欄なのでエラーが出てフローが止まる
と思いましたが、結果は
・取引先は保存され取引先名はAとなる（エラーは出ない）

という現象になりました

詳しいことは良く分かりませんが、どうやらカスタムエラーの裏ルールとして

・もしもカスタムエラーの下にアクションがあればカスタムエラーは機能しない（下のアクションに引っ張られる？）

という現象になるようです

皆さんもカスタムエラー作成の際はむやみにアクションを下につけることないようにお気を付けください。
VSCodeでコメント( 注釈 )の色をカスタマイズする方法


# 背景
  写真のように、VSCodeのテーマによってはコメントの色があまりにもよく見えないので、コメントの色を変更にしたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/1cb78fa3-a3a8-bda0-101c-2fa648f6a9f4.png)

[Better Comments](https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments)を使用すると下の写真のように色付けができるが、基本的なコメントについては色付けができない。上級者ならこの拡張機能をカスタマイズしてもよいが、ここでそれは扱わない。よって拡張機能とは別として、基本のコメントの色を変更したい。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/afbd94f8-b940-2e24-932e-f8b855524bd7.png)


# 設定

`ctrl + ,` -> setting.json -> 下のEdit in settings.json をクリック（環境による）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/5e8b42a5-44e5-3df8-d743-0429c0275ca5.png)




settings.jsonの一番下に以下のような設定を追加
```json
    "editor.tokenColorCustomizations": {
        "comments": "#f8f4c09f"
    }
```



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/0519a692-3807-fcbb-5270-21a0a380b333.png)



これで基本的なコメントの色が変更できた。拡張機能も問題なく、適用できている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/837794f8-92f7-3d20-89b8-0e6f022cd764.png)

# おわりに
これで自分の好みで注釈の色がカスタマイズできる。
JetpackComposeでCheckboxの色をONの状態とOFFの状態で色を変更する方法

前の記事でJetpackComposeでCheckboxの色を変更する方法
を書いたときにONの状態とOFFの状態で色を変更する方法を記載していただけなので、サンプルも残しておこうと思います。

https://qiita.com/yuta317/items/80a510f971d9480e8158



```CheckboxSample.kt
/**
 *　チェックボックスの色指定
 */
@Composable
private fun getCheckboxColors(): CheckboxColors {
    return object: CheckboxColors {
        @SuppressLint("UnrememberedMutableState")
        @Composable
        override fun borderColor(enabled: Boolean, state: ToggleableState): State<Color> {
            return if(state == ToggleableState.On) {
                mutableStateOf(colorResource(id = R.color.purple_200))
            } else {
                mutableStateOf(colorResource(id = R.color.purple_700))
            }
        }

        @SuppressLint("UnrememberedMutableState")
        @Composable
        override fun boxColor(enabled: Boolean, state: ToggleableState): State<Color> {
            return mutableStateOf(colorResource(id = R.color.white))
        }

        @SuppressLint("UnrememberedMutableState")
        @Composable
        override fun checkmarkColor(state: ToggleableState): State<Color> {
            return if(state == ToggleableState.On) {
                mutableStateOf(colorResource(id = R.color.purple_200))
            } else {
                mutableStateOf(colorResource(id = R.color.purple_700))
            }
        }
    }
}
```

`state == ToggleableState.On`でCheckboxの状態が見れるので、こちらで判定できます。

![スクリーンショット 2023-11-26 19.36.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/a072ecc1-2363-7932-9637-608eaf62e130.png)

![スクリーンショット 2023-11-26 19.36.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/baaa11dd-72e6-204a-ee3e-d27727843cad.png)
中高生もイベントに参加しよう!!

# 中高生もイベントに参加すべきである3つの理由
中学生的視点から書いてみます。実際にもくもく会とかに参加するといいことあったよ。
## 1.技術力UP!
技術的に困ってること、聞けます。学校とかで質問できる環境があるならばいいですが、そんな環境はなかなかないので聞けるところに行って聞いた方がいいです。ネットや書籍では解決できない問題も新しい視点から考えてみると意外と解決したりします。
## 2.エンジニアとかかわりがもてる
イベントに参加することでエンジニアと関わりを持つことができます。技術的な質問をするチャンスになるのに加えてキャリアや勉強の方法など実際のエンジニアからしか得られない情報を得ることができます。
## 3.新しい分野を知れる
IT系はいろいろな分野があると思います。イベントでははば広い分野の人が集まることも多く、他分野について知るきっかけにもなります。違う分野が意外に面白そうだなとおもって勉強するきっかけになります。

# イベントに参加する方法
身近なイベントについてはconnpassなんかを使うと良いと思います。自分の地区で開催しているイベントに加えオンラインのものもあります。もくもく会とかいいですよ!!
https://connpass.com/
宗教勧誘とかには注意しましょう。
JavaScriptとは 入門

## JavaScriptとは
JavaScriptはプログラミング言語の一つです。ブラウザーで動く言語して1995年に誕生した。
webサイトは「コンテンツを表示させるのがHTML」「見た目を変化させるのがCSS」そして「Webサイトの動作部分を作るJavaScript」で成り立っている。
## HTMLやCSSだけでは出来ないことを実装するのがJavaScript
HTMLやCSSだけでもwebサイトを作ることは出来るが、HTMLやCSSは一度ブラウザーに取り込まれるとコードを変化することは出来ない。
JavaScriptはユーザーの操作に対して変化をつけることが可能になる。
## JavaとJavaScriptは全く別の言語
JavaScriptをJava（ジャバ）と呼んでいる人を時々見かけますが、これには注意が必要です。
Javaという別のプログラミング言語が存在しています。
もともと、JavaScriptはNetscape社が開発したブラウザー向けの言語でMoka（モカ）という名前だった。その後LiveScript（ライブスクリプト）に改名されました。さらにその当時注目されていたSun Microsystems（現オラクル社）が開発していたプログラミング言語である「Java」の名前にあやかり「JavaScript」と改名されました。
JavaとJavaScriptの違いはよくメロンとメロンパンで例えられる。
メロンとメロンパンには名前に「メロン」が入っているところと、食べ物であるという点が共通ですが、味も見た目も全然違います。JavaとJavaScriptも名前に「Java」が入っているところとプログラミング言語という点のみ共通していて、書き方も用途も全く違います。混同しないよう注意が必要です。
functools使い方 cmp_to_key (abc 308C)

atcoder abc308 Cでcmp_to_keyを使った解法があったため、使い方をまとめる。
``from functools import cmp_to_key`` を使用することで、Python のソート
関数(sorted やsortなど）でカスタム比較関数を使うことができる。

``cmp_to_key``：2つの要素を比較する比較関数（cmp 関数）を受け取り、それを key 関数に変換することができる。比較関数は、2つの引数を取り、それらを比較して ``-1``,``0``,``1`` を返す必要がある。

```py:基本的な使い方
from functools import cmp_to_key

# 比較関数
def compare_items(a, b):
    if a > b:
        return 1
    elif a < b:
        return -1
    else:
        return 0

# ソートしたいリスト
my_list = [3, 1, 4, 1, 5, 9, 2, 6]

# カスタム比較関数を使ってリストをソート
sorted_list = sorted(my_list, key=cmp_to_key(compare_items))

print(sorted_list)
#sorted_list -> [1, 1, 2, 3, 4, 5, 6, 9]
```

公式の解法では、同様の手法を用いてcmp関数を作成し、ソートを行っている。

https://atcoder.jp/contests/abc308/editorial/6722

```py:abc308C 解法
from functools import cmp_to_key
def cmp(a, b):
    x, y, i = a
    xx, yy, ii = b
    s = x * yy - y * xx
    return 1 if s > 0 else -1 if s < 0 else 0

N = int(input())
X = []
for i in range(N):
    a, b = map(int, input().split())
    X.append((-a, a + b, i))

X.sort(key = cmp_to_key(cmp))
print(*[i + 1 for x, y, i in X])

```
Wordpress開発でPHPの変数などをブラウザのコンソールに表示させるプラグイン

# OverView
WordPressのThemeやブラグインなどの開発でPHPで変数の値などを確認したい場合は単純に`var_dump`などで表示させたりしますが、ブラウザのコンソールに表示した方が効率が良かったりします。
ただ都度渡すコードを書くのは手間がかかるので、簡単なプラグイン化をしてみました。
プラグイン化しておけば、開発環境ではプラグインを入れておき、本番環境などには入れないでおくという形がとれ、万が一チェックのためのコードを消し忘れてもプラグインがなければ出力されないので安心できると思われます。

開発時にのみ使うので構造もとても簡潔にしています。

# ディレクトリ構成

```bash
view-on-console/
└─　view-on-console.php
└─ js
   └─　view-on-console.js
```

## ファイルの内容
### view-on-console.php

至ってシンプルにしています。
もらったデータを`console.log`に出力するだけの関数を記述したJavaScriptファイルを`wp_enqueue_script`読み、`wp_add_inline_script`で出力するJavaScriptをinlineに表示するようにしています。
PHPからJavaScriptに変数を渡す時はjson_encodeして渡す必要があります。
`wp_json_encode`関数はjson_encodeの機能にHTMLエスケープやUnicodeエスケープ、JavaScriptのエスケープなどを行っているので、こちらを使用しています。

```php:view-on-console.php
/**
 * Plugin name: View On Console
 * Version: 1.0.0
 * Description: This is a plugin for viewing PHP variables on the console.
 * Author: efc
 * Author URI: https://www.electric-fruits.com/
 * License: GPL2 or later
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: view-on-console
 */

/**
 * $argsの例
 * $args = [
 *   "checkDeta" => "コンソールで表示したい文字列/配列"
 *   "fileName" => "チェックしたい文字列/配列の記述してあるファイル名"
 *   "lineNumber" => "チェックしたい文字列/配列の記述してある行数"
 * ]
 */
 function view_on_console($args) {

    wp_enqueue_script('view_on_console',plugins_url('js/view_on_console.js',__FILE__),array(),'1.0.0',true);
    if($args) {
        $json = wp_json_encode($args);
        $script_data = "
        view_on_conslole(". $json . ");
        ";
        wp_add_inline_script('view_on_console',$script_data,'after');

    }

}

?>
```
```javascript:view_on_console.js
const view_on_conslole = (console_log) => {
    if (console_log) {
        console.log(console_log);
    }
}
```

## 使い方

プラグインとして有効にし、以下のようにシンプルに`view_on_console`関数に変数（配列なども）を渡せばブラウザのコンソールに表示します。

```php
if(function_exists("view_on_console")) {
    view_on_console($myMeta);
}           
```
また以下のようにファイル名や行数を入れた連想配列を渡してわかりやすくするなどの使用方法もできます。
```php
if(function_exists("view_on_console")) {
    view_on_console(array(
         "checkDeta" => $myMeta,//チェックしたい変数
         "fileName" => 'efc-blocks.php',//ファイル名
         "lineNumber" => 79//行数
    ));
}
```
こんな感じでコンソールに表示される
![スクリーンショット 2023-11-26 19.40.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34746/c76801f4-ddab-5162-e736-55c70bfdb9d2.png)

:::note info
必ず`function_exists`で関数の有無をチェックするようにして使用してください。
:::
BMP280をI2C接続したMilk-v Duo上でPythonを使って温度と気圧を測定する

## はじめに
秋葉原ロボット部の有志で、Milk-v Duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。

Milk-v Duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。

1. CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
2. 最高1 GHzで動作するデュアルRV64コア
3. 64 MBのラム
4. オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能

現在配布されているディスクイメージV1.5.0には、Python、Pipが含まれていますので、本体の上でプログラミングが可能です。
  本稿では、Milk-v Duoに温度と圧力のセンサであるBMP280を接続して、pythonのプログラムで、温度と圧力の測定を行います。
## 用意するもの
・Milk-v Duo本体
・3.3Vで動作するBMP280モジュール
・本体とモジュールを接続するジャンプワイヤ

## BMP280とMilk-v Duoの接続
以下の様に接続します。
BMP280　Milk-v Duo
SCL GP0（GP1）
SDA GP1（GP2）
VCC 3V3(OUT)（GP36）
GND GND（GP3、8、13、18、23、28、33、38のいずれか）

## Pipを使う前にSwapの設定
Milk-v DuoのRAMの容量が64MBしかありませんので、PiP3が動作しません。
Milk-v Duoのディスクイメージには、swap用に第3パーティションが確保されています。
以下の操作を行うと、Swapとして256 MBの容量が確保されます。
 ```
[root@milkv-duo]~# mkswap /dev/mmcblk0p3
[root@milkv-duo]~# swapon /dev/mmcblk0p3
[root@milkv-duo]~# echo "/dev/mmcblk0p3 swap swap defaults 0 0" >> /etc/fstab
```
実際に確保されているかは次のコマンドで確認します。
```
[root@milkv-duo]~# free -h
     total used  free  shared buff/cache available
     Mem: 29236 14732 7760 88 6744 11692
     Swap: 262140 0 262140 
 ```
上に示したように、「Swap:」の表示と「total」の下に「262140」と記載があれば、利用可能です。

 ## 「bmp280-python」のインストール
 BMP280を利用するPythonプログラムには複数ありますが、ここでは、Pimoroniの「bm@280-python」を使用します。
はじめに、ライブラリをインストールします。
  ```
 [root@milkv-duo]~# pip3 install bmp280
 ```
インストールに時間がかかりますが、気長に待ちます。
次に、母艦で「https://github.com/pimoroni/bmp280-python 」
を、zipファイル（bmp280-python-master.zip）としてダウンロードします。
最後に、「bmp280-python-master.zip」を母艦からmilk-v duoにscpで転送します。
転送が終了したら、milk-v duo上でファイルを解凍します。
```
[root@milkv-duo]~# unzip bmp280-python-master.zip
[root@milkv-duo]~# cd bmp280-python-master
[root@milkv-duo]~# cd examples
[root@milkv-duo]~# ls
```

examplesのディレクトリに、以下の5つの「.py」ファイルが存在することがわかります。
compensated-temperature.py
dump-calibration.py
relative-altitude.py
temperature-and-pressure.py
temperature-forced-mode.py
今回は、「temperature-and-pressure.py」を使用します。

## 「temperature-and-pressure.py」の実行
```
[root@milkv-duo]~# python temperature-and-pressure.py
temperature-and-pressure.py - Displays the temperature and pressure.

Press Ctrl+C to exit!


25.71*C 720.93hPa
26.49*C 1009.55hPa
```
「Ctrlキー」と「C」を同時に押すまで、計測値が表示されます。

## おわりに
Pipによるライブラリのインストールに時間がかかりますが、Pythonを使って、milk-v duoのGPIOに接続したセンサの制御が可能になりました。
Milk-v duoのGPIOの配置はRaspberry pi picoのGPIO配置と同じですので、これまでに蓄積されたRaspberry pi pico用のハードとPythonプログラムが利用可能です。
色々、試してみてください。

参考url：https://github.com/milkv-duo/duo-examples
MongoDB 6.0以降のWindows環境での`mongo`シェルの変更について

MongoDB 6.0以降のリリースにおいて、Windowsユーザーが直面する重要な変更点の一つが、従来の`mongo`シェルが含まれなくなったことです。この変更により、多くのユーザーが`mongo.exe`ファイルが`bin`フォルダ内に見つからないという問題に直面しています。

# 代替手段：`mongosh`

MongoDBの新しいバージョンでは、`mongosh`と呼ばれる新しいシェルが導入されました。この`mongosh`は、より現代的で機能豊富なインターフェースを提供します。

# `mongosh`の入手方法

Windowsユーザーが`mongosh`を入手するには、主に以下の２つの方法があります：

1. **MongoDB Compassのインストール**：MongoDB Compassをインストールすることで、`mongosh`が組み込まれたバージョンを利用できます。`InstallCompass.ps1`というPowerShellスクリプトを通じてMongoDB Compassをインストールすることが可能です。

2. **MongoDBのダウンロードセンターからの直接ダウンロード**：MongoDBの公式ダウンロードセンターから直接MongoDB Shell（`mongosh`）をダウンロードし、インストールすることができます。

# 結論

MongoDB 6.0以降のバージョンでは、従来の`mongo`シェルの代わりに`mongosh`を使用する必要があります。これは、Windowsユーザーにとって少し混乱を招くかもしれませんが、`mongosh`はより強力で柔軟な機能を提供するため、長期的には有益な変更と言えるでしょう。適切な方法で`mongosh`をインストールすることで、MongoDBの最新バージョンの全機能を引き続き利用することが可能です。
【Arduino ラズパイPico】RP2040ライブラリを更新したら、I2CとSPIのピン番号が変更されていて悩んだ件

タイトルだけで、ほとんど分かってしまうような内容ですが・・

Raspberry Pi Pico（および他のRP2040搭載マイコン基板）の開発環境・言語は
　・Python（MicroPython, CircuitPython）
　・C/C++
　・Arduino IDE（earlephilhower版）
　・Arduino IDE（Mbed OS RP2040版［公式版］）
 
があります。以下は Arduino IDE（Mbed OS RP2040版［公式版］）で経験したことです。

# 以前は動いたのに・・・
■ 2年前に作成して動作実績のあるコードを流用して別のものを作ろうとしたのですが、下図のようにラズパイPicoにOLEDを2本の線でI2C接続するという単純なものが動作しません。
・LEDは点滅するけどOLEDは真っ暗。
・電源OK。配線もOK。
・コードは昔動いた実績あるもの、変更なし。
・部品はたぶん壊れてない。と思いたい（やや不安）・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834831/e67453d8-3c71-3204-a86c-f08f2399df9f.png)

調査したところ RP2040 ライブラリをアップデート (2.2.0 ⇒ 3.4.1) した際に pins_arduino.h のピン定義が変更されていたことが判明しました。

・・って「あ、な～んだそーゆーことか～」と読めば１秒だけど、分かるまでちょっと、かなり、結構、相当な、莫大な、めっちゃ時間がかかりました。迷宮入りだと放置してたけど半年後に再挑戦して辿り着いたのです。

## RP2040 ライブラリのバージョンによるpins_arduino.h のピン定義の違い
下記のようにシリアル送受信のピンは変わりませんが、SPIとI2Cは変更されてます。

```C++: version 2.2.0 の pins_arduino.h から抜粋
pins_arduino.hから抜粋
#define PIN_SERIAL_TX (0ul)
#define PIN_SERIAL_RX (1ul)

// SPI
#define PIN_SPI_SCK   (2u)
#define PIN_SPI_MOSI  (3u)
#define PIN_SPI_MISO  (4u)
#define PIN_SPI_SS    (5u)

// Wire
#define PIN_WIRE_SDA  (6u)
#define PIN_WIRE_SCL  (7u)
```

```C++: version 3.4.1 の pins_arduino.h から抜粋
// Serial
#define PIN_SERIAL_TX (0ul)
#define PIN_SERIAL_RX (1ul)

// SPI
#define PIN_SPI_MISO  (16u)
#define PIN_SPI_MOSI  (19u)
#define PIN_SPI_SCK   (18u)
#define PIN_SPI_SS    (17u)

static const uint8_t SS   = PIN_SPI_SS;   // SPI Slave SS not used. Set here only for reference.
static const uint8_t MOSI = PIN_SPI_MOSI;
static const uint8_t MISO = PIN_SPI_MISO;
static const uint8_t SCK  = PIN_SPI_SCK;

// Wire
#define PIN_WIRE_SDA        (4u)
#define PIN_WIRE_SCL        (5u)
```

■なるほど、これじゃ動かないわけだ！　ということで配線を2本入れ替えたら動作しました。やれやれ・・

■ ネットにはラズパイPico等のRP2040のマイコン基板でI2CやSPIを使用したシステムの動作記事を多く見かけます。ハードもソフトも、これら動作検証済みの記事の通りに製作したのに動作しない！　という場合、原因としてpins_arduino.h のピン定義がネット記事の環境と自分の環境で異なるのかもしれません。

# pins_arduino.h ファイルはどこにある？
■ 私の環境では下記２つのディレクトリにありました。\mbed_rp2040\の次にバージョンがあります。

C:\Users\user\Documents\ArduinoData\packages\arduino\hardware\mbed_rp2040\3.4.1\variants\RASPBERRY_PI_PICO

C:\Users\user\AppData\Local\Arduino15\packages\arduino\hardware\mbed_rp2040\4.0.8\variants\RASPBERRY_PI_PICO

■ Arduino IDEのアップデートも、ライブラリのアップデートも何度か実施している関係で同じものがあるものと思います。

■ mbed_rp2040 のバージョンは 3.4.1 と 4.0.8 と異なりますが、Winmergeで比較したところ内容は全く同じでした。

■ pins_arduino.h ファイルが複数存在して、ピン定義の内容が異なる場合は一つずつ試すとよいでしょう。


# ［参考］ラズパイPicoのピン配置図
I2CのピンはI2C0系とI2C1系があり、それぞれ6組、計12組あります。
I2C0:
 [GP0/GP1]、[GP4/GP5]、[GP8/GP9]、 [GP12/GP13]、[GP16/GP17]、[GP20/GP21]
 
I2C1:
 [GP2/GP3]、[GP6/GP7]、[GP10/GP11]、[GP14/GP15]、[GP18/GP19]、[GP26/GP27]
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834831/3295ee36-3c1c-512a-a080-58adb7f66020.png)

## 【関連記事】
https://qiita.com/totuto/items/81944426dc81ab4b7e57

https://qiita.com/totuto/items/2a8db63abd1d3c82880f

https://qiita.com/totuto/items/d3bc435d3d2f545c1c02
カウンセリングの理論（産能通信）

## カウンセリングの理論（オンラインSC）

![medical_seishinka_woman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689091/eaa0357b-70e9-94dc-48c1-a661327c379a.png)

近年、カウンセリングという言葉は、より一般的なものとなり、カウンセリングに関する興味･関心も高まりを見せています。一方カウンセリングで扱う対象は人間のこころであります。目に見えないものを扱うことやカウンセリングの効果が客観的に示されることが少ないことなどを理由に懐疑的な立場を取る人々も少なくありません。本科目では、より適切かつ妥当な方法で、カウンセリングの基本的考え方やカウンセリングで思考する心理療法とその背景にある理論を理解し、心理検査法と代表的精神疾患の特徴を学習します。（シラバスより）

### 到達目標
①カウンセリングの諸理論について理解し、理論にもとづく実際の治療方法を説明することができる。
②日常的な心の働きや行動、現代社会における出来事などについてカウンセリングの理論を通して分析・考察することができる。
③カウンセリングの理論や技法を理解し、それを実生活へ活かすことができる。

### 前提となる科目
「心理学概論」、または「一般心理学」を通信授業にて履修していることが望ましいとあります。私は、３年次に「心理学概論」と「一般心理学」を追加履修しました（成績悪かったですが）

### 担当教員
<a href="https://thecoaches.co.jp/find_coach/nakamura_natsuko/">中村 菜津子</a> 先生（公認心理師／キャリアコンサルタント）

兵庫県西宮市在住。企業を中心に社会人向けのコーチングなどされています。

### テキスト
<a href="https://www.kinokuniya.co.jp/f/dsg-01-9784382057128">基礎から学ぶカウンセリングの理論</a>　山蔦 圭輔 （著）

サイズ A5判／ページ数 269p／高さ 21cm

<img width="240" alt="基礎から学ぶカウンセリングの理論" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689091/215fab84-4eb3-eced-3ae8-d4fc6599a53c.jpeg">

>カウンセリングの基本的な考え方と、カウンセリングで施行する心理療法とその背景にある理論を解説。心理検査法と代表的精神疾患も事例とともに紹介する。

目次

第１部　カウンセリングの概要と位置づけ
第２部　カウンセリングの理論と心理療法
第３部　カウンセリングの実践―心理検査と心理的問題

### オンラインスクーリング
産業能率大学のオンラインスクーリングは土日連続で開講されることが多いです。土日休みの方がやはり多いので、社会人に合わせたスケジュールになっています。なお、この科目は４単位科目のため、基本リポートが合格済みでないとスクーリングを受けることができません。

また、シラバスでは、グループワークなしの科目ですが、実際は、グループワークがありました（先生曰く雑談とのこと）。参加者は６０人くらいでした。

１日目　９時３０分～１７時５０分（適時、休憩。昼１時間休憩）＋課題
２日目　９時３０分～１７時５０分（適時、休憩。昼１時間休憩）＋最終試験

### 感想

来談者中心療法や行動療法などカウンセリングの基本となる技法を幅広く学べました。
心理カウンセリングコース３年次の配本科目なので、同コースからの参加者が多かったです。グループワークが数回あり、１回入れ替えがありました。参加者は女性が多めの印象です（男性少ない）

カウンセリングのインテーク面接では、AIに置き換わってきているという話が印象的でした。カウンセリングも人から機械に置き換わるのか、考えさせられました。

１日５回ほど雑談の時間があり、他の学生と交流する機会がたくさんありました。２日目は、先生からの提案で、ZOOM のブレークアウトルームで、昼休み交流してくださいーって話がありましたがそれは多数決で「なし」になりました。休憩時間は「休憩」させてください（笑）

２日間、お疲れさまでした。

## 過去の記事

### 1回目の記事（出願～入学式）
https://qiita.com/skizaki/items/2621e999fe07f42391e7

### 2回目の記事（入学３か月後）
https://qiita.com/skizaki/items/1dbcd673a51b46d7b680

### 3回目の記事（入学5か月後）
https://qiita.com/skizaki/items/1eecce9824143fc10ee8

### 4回目の記事（心理学系の資格を目指す）
https://qiita.com/skizaki/items/d216d6208d524cfb7609

### 5回目の記事（人間関係の心理学）
https://qiita.com/skizaki/items/79159a494822d15a13fc

### 6回目の記事（目指せ認定心理士①）
https://qiita.com/skizaki/items/56beab4e4abb9d6a15ea

### 7回目の記事（面接技法）
https://qiita.com/skizaki/items/13f8e4c0acc6f4b4edee

### 8回目の記事（サービス介助士）
https://qiita.com/skizaki/items/8d019b391abaf5a2a959

※随時、ブログを更新します。
Python標準入力チートシート [AtCoder]

## 目次
- [はじめに](#はじめに)
- [チートシート](#チートシート)
    - [整数を受け取る(1行)](#1行の整数を受け取る)
    - [配列・文字列を受け取る(1行)](#1行の配列・文字列を受け取る)
    - [整数を受け取る(グラフ問題)](#整数を受け取る・グラフ問題)
    - [文字列を受け取る(複数行)](#複数行の文字列を受け取る)
    - [グリッド(’ # ’,’ . ’)を受け取る](#グリッドを受け取る)
- [おわりに](#おわりに)

## はじめに
自分が使うものを、自分のために書いてます。
より良いものがあれば、コメントしていただけると幸いです。

## チートシート
#### 1行の整数を受け取る

| 入力 | code || 備考 |
|:---------:|:---------:|-|:---------:|
| _N_ | `N = int(input())`||整数(_N_)|
| _N_ _M_ | `N,M = map(int,input().split())` ||整数(_N_,_M_)|

#### 1行の配列・文字列を受け取る

| 入力 | code | 備考 |
|:---------:|:---------:|:---------:|
|*A<sub>1</sub>* *A<sub>2</sub>* *A<sub>3</sub>*...*A<sub>n</sub>* | `A= list(map(int,input().split()))` |*A<sub>k</sub>* : 整数|
|*helloworld*| `s = input()` ->'helloworld' |`print(s[5])`=>`w`のように取得可|
|*helloworld*| `s = list(input())` |s = ['h','e','l','l','o','w','o','r','l','d']|

#### 整数を受け取る・グラフ問題
 
>〜入力〜
4 3 #N M
1 2
3 2
1 3


```py:code 
N,M = map(int,input().split())
node = [[] for _ in range(N)]

for _ in range(M):
    u,v = map(int, input().split())
    u-=1
    v-=1
    node[u].append(v)
    node[v].append(u)
#node<-[1, 2], [0, 2], [1, 0], []]
```


#### 複数行の文字列を受け取る
>〜入力〜
3
apple 
black
sample

```py:code 
N=int(input())
strlist=[input() for i in range(N)]
#strlist<-['apple','black','sample']
```
>print(strlist[1])=>black
>print(strlist[1][0])=>b

#### グリッドを受け取る
>〜入力〜
3 4 #H,W
.#..
#..#
..#.

```py:code 
H, W = map(int, input().split())
S = [input() for _ in range(H)]
```
>S[0][1] =>'#'
>S[1][0] => '#' のように取得可

<!--
#### を受け取る

| 入力 | code || 備考 |
|:---------:|:---------:|-|:---------:|
| | `` || |
|  | `` || |

#### を受け取る

| 入力 | code || 備考 |
|:---------:|:---------:|-|:---------:|
| | `` || |
|  | `` || |
-->
## おわりに
追記していきます。
milk-v duo上のtinyccでi2c接続したSSD1306ディスプレイに文字を表示

 ## はじめに
 秋葉原ロボット部の有志で、milk-v duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。

Milk-v duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。

1. CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
2. 最高1 GHzで動作するデュアルRV64コア
3. 64 MBのラム
4. オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能

最近、milk-v duoにTiny C Compiler（以降、TinyCC）が移植されましたので、milk-v duo上でCのプログラミングを行います。

## TinyCCとは
Tiny C compilerはFabrice Bellardさんによって、開発されたCコンパイラです。
https://bellard.org/tcc/

現在は、レポジトリで管理されています。
https://repo.or.cz/w/tinycc.git

ディスカッション等はメーリングリストで行われているようです。
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

## TinyCCのインストール
母艦で、
https://github.com/robtech21/MilkV-Duo-Resources
から「milkv-duo-tinycc.zip」をダウンロードして、milk-v duoの「/root」に転送します。
その後、以下の操作により、tinyccをインストールします。
./install.shの後の記述は、インストールプロセスの表示です。
```
# unzip milkv-duo-tinycc.zip
# cd milkv-duo-tinycc
# chmod +x install.sh
# ./install.sh
 1 .  copy tcc, include/*, lib/* --> /usr/local/lib/tcc
 2 .  copy sysroot/include/* --> /usr/local/include/riscv64-linux-gnu/
 4 .  copy sysroot/lib/* -->  /usr/local/lib/riscv64-linux-gnu/
 5 .  install success
#
```
プロンプト「#」が表示されたら、インストール終了です。
tccに実行権限を付与します。
```
# chmod +x /usr/local/bin/tcc
```
## SSD1360 OLED用プログラムのコンパイル
母艦で、
https://github.com/armlabs/ssd1306_linux
をダウンロードし、milk-v duoに転送します。
Milk-v duo上で以下の操作を行います。
```
# unzip ssd1306_linux.zip
# cd ssd1306_linux
# tcc -r -o ssd1306.o ssd1306.c -I .
# tcc -r -o linux_i2c.o linux_i2c.c -I .
# tcc -o ssd1306 main.c linux_i2c.o ssd1306.o -I .
```
実行ファイルの「ssd1306」が生成します。

## SSD1360 OLED上に文字表示
画面サイズを指定します。
```
# ./ssd1306 -I 128x64
```
画面をクリアします。
```
# ./ssd1306 -c
```
ダブルクオーテーションで囲まれた文字の表示を行います。
```
# ./ssd1306 -m "Low Level Meetup\n at Zoom meeting\n 0n Nov.4, 2023"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/1d9f34d6-1de1-de14-6fb3-1c887f0cb532.png)

文字が表示されました。

以下にパラメータを記載しますので、いろいろ試してみてください。

-I　　oledの初期化 (128x32 や 128x64 、 64x48)
-c　　画面消去 (行番号　あるいや　all)
-d　　0/ディスプレイオフ 1/ディスプレイオン
-f　　0/ 5x7の小さいフォント 1/ 8x8の普通のフォント(デフォルトは小さいフォント)
-h　　ヘルプ
-i　　0/ 正常な位置 1/ 上下逆さま
-l　　表示したい行を指定
-m　　OLEDに表示したい文字列を指定
-n　　I2Cデバイスのノードアドレス(0,1,2..., デフォルトは 0)
-r　　0/ 回転なし 180/回転
-x　　x 座標
-y　　y 座標

参考　https://community.milkv.io/t/milk-v-duo-i2c-ssd1306-with-user-space-driver/323
デザインシステム・デザイントークンについて

# この記事の目的

デザインシステムの導入を検討するにあたり、情報整理のための記事です。

# デザインシステムとは

企業のビジョンやブランドアイデンティティなどから「良いデザイン」を定義するデザイン原則などのドキュメント
それらを具体的にデザイン・実装するためのUIパターンやコンポーネント
などを備えた一連のリソースのこと
https://blog.nijibox.jp/article/design_system/

# 構成要素ざっくり

デザイン原則：プロダクトに関わるステークホルダーがプロダクトを作っていく上で大事にすることを言語化したもの
原則に基づいたルール(スタイルガイド)
原則に基づいたツール(コンポーネントライブラリ)

デザイントークンとは
キーワード：Single Souce of Truth

名前と値のペアであり、その名前に関連した情報
それ以上分割できない、粒度の小さい情報

# 導入のメリット

### 対デザイナー

https://bagelee.com/design/basics-of-design-tokens/#:~:text=%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82-,%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E4%BD%BF%E3%81%86%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88,-%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AF

- デザインの修正を気軽にしやすくなる（これが１番大きい）
- 最初の設定さえきっちりしていれば、色変えたいけど工数かかるよな...とかなくなる
- figmaのローカルスタイルを定義するのの拡張版のような感じなので、一回定義しなおしてしまえばデザインがしやすくなる
- デザインする時にブレがなくなる（ここのボーダーの色他と違ってた〜などがなくなる）

### 対エンジニア
- うまくツールで連携していけば、variablesに定義するところまでを自動化できる
    - storybookへの反映もうまくできそう
- フロントエンド領域（主にマークアップ）が苦手な人が実装する箇所がもっと減る

https://engineerteam.note.jp/n/neee44076be72

- githubをうまく利用すればfigma更新したら自動でデザイントークンリリースできる形へ設計可能
- 心得として未完成の状態（70%の状態）で進めていくことが大事

# 導入すると良いツール

### figma tokens
jsonコミットしてPRを作ってくれる

### style dictionary
↑で作った変数を出力してくれる
figma更新で各ドメインに対応したものを自動リリース
https://zenn.dev/ubie_dev/articles/7a6413af237eae?redirected=1#style-dictionary

流れイメージ
https://qiita.com/takusan64/items/b574b5f82594d3f8bf05

### figmatokens
- プラグインに先にスタイルを設定→該当するものをクリックすることで適用される
- 既存のスタイルガイドの要素に適用すればその内容は反映される＋コピーした内容やコンポーネント化した内容でも、figma tokensがきちんと適用されていれば、一気に変更が可能
- ただし、すでにある要素でコンポーネント化していないものについては、コピーして作成していたとしても個別で適用していかないといけない→ここが時間かかりそう

https://blog.microcms.io/styledictionary-storybook/
https://note.com/seyanote/n/n7b327a9cfd72
https://engineerteam.note.jp/n/n91ea9db3bb5d

# 定義するべき項目
figma tokensで定義できるもの　可能な限り

figmatokens→style dictionary→storybookまでの連携
↓gitlab連携のパターン
https://creators.bengo4.com/entry/2023/02/28/120000#2Tokens-Studio-for-Figma%E3%82%92GitLab%E3%81%AB%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8B

https://zenn.dev/shellme/articles/figma-token-studio-and-style-dictionary

CSSとの連携

cssプロパティなども全部トークン経由で更新している会社もある（noteさんなど）
tailwindだとconfigに全部設定できるので楽そう..

bootstrapはあまり参考記事が見つけられず...
https://smth.uk/use-design-tokens-to-customise-bootstrap/
Milk-v Duoのクロスコンパイル環境をWSL上に作成して、Gitで公開されているプログラムを動かしてみる

## はじめに
秋葉原ロボット部の有志で、Milk-v duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。

Milk-v Duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。
1. CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
2. 最高1 GHzで動作するデュアルRV64コア 
3. 64 MBのラム
4. オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能
 
## Milk-v Duo用のクロスコンパイル環境構築
本稿では、windows10上のWSLで動作するubuntu22.04を使用しています。
最初にクロスコンパイルに必要なツールをインストールします。
```
 $ sudo apt-get install wget git make
```
次に、今回用いるプログラムのソースコードをダウンロードして、コンパイル環境を作成します。
```
 $ git clone https://github.com/milkv-duo/duo-examples.git
 $ cd duo-examples
 $ source envsetup.sh
```
「source envsetup.sh」のスクリプトが終了するまで、時間がかかります。
　無事終了すると、WSLのコマンドプロンプトが表示されます。
## 「Hello world」をコンパイルして実行する
```
$ cd hello-world
$ make
```
新たに生成したファイルのうち「helloworld」というファイルをMilk-v Duoに転送します。
```
$ scp helloworld root@192.168.42.1:/root/
```
Milk-v Duo上で
```
[root@milkv-duo]~# chmod +x helloworld
[root@milkv-duo]~# ./helloworld

Hello, Wolrd!
```
無事動きました。

## 自作プログラム作成の段取り
1. 例えば「my-project」のようなディレクトリを作成
2. 「duo-exapmles」内の「blink.c」と「Makefile」を「my-project」 へコピー
3. 「blink.c」を自分のプログラム名、例えば「gpio_test.c」に変更
4. 「Makefile」内の「TARGET=blink」を「TARGET=gpio_test」に修正
5. 「gpio_test.c」を目的のコードに修正
6. makeする。
7. 生成した「gpio_test」実行ファイルをDuoに転送して実行

## おわりに
Milk-vのgithubサイトで公開されているプログラム例は少数ですが、多くの方々が自作のプログラムを公開しています。
「Milk-v Duo」、「c language」等のキーワードで検索して見つかるソースファイルを参考に、みなさんも、自作のプログラムを紹介してはいかがでしょうか。

参考url：https://github.com/milkv-duo/duo-examples
【React×Blender】gltf形式で出力した3Dモデルが表示できなかった時の原因について

# 背景
Reactにおいてthreeのライブラリを使用し、Blenderで作成した3DモデルをWebページ上に表示させようとしたが、エラー文言が出力され、3Dモデルが表示されなかった。

# 環境
- vite：5.0
- raect：18.2
- three：0.158

# 前提
Blender側で3Dモデルをエクスポートしたときの設定は以下の通りです。
![setting_bld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/c4b2cd0a-8372-20e1-1cff-b6cfef42f8d4.png)


# エラー内容
```
SyntaxError: Unexpected token '<', "<!doctype "... is not valid JSON
～～
```

# 結論
3dモデルを入れた`assets`フォルダを`public`フォルダの中に作成する必要があった。

# 原因と対応
- ### 原因

以下のコマンドでReactのプロジェクトを作成した際にデフォルトでは、
`src`フォルダ直下に`assets`フォルダが生成されている。
本来であれば、`public`フォルダに3Dモデルを入れた`assets`を作成する必要があったと思われる。
```
 npm create vite@latest
```
今回は`src`直下の`assets`に3Dモデルを入れ、GLTFLoaderで読み込もうとしたため、
エラーが出力されたと考えられる。

- ### 対応
3dモデルを入れた`assets`フォルダを`public`フォルダの中に作成した。

- ### 参考
  以下が、3Dモデルを読み込んでシーンに追加しているコード部分です。
```react:App.jsx
// 3Dモデルを読み込んでシーンに追加
const loader = new GLTFLoader();
    loader.load('assets/moon_and_star.glb', (gltf) => {
      scene.add(gltf.scene);
    });
```

# 結果
問題なく、3Dモデルが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/6ce23f5a-2642-d384-58e2-27085c684c71.png)

# 参考
- https://discourse.threejs.org/t/syntaxerror-unexpected-token-doctype-is-not-valid-json-at-json-parse-anonymous/42441/11
PowerMockitoのPrepareForTestの注意点

## 最初に
PowerMockitoをプロジェクトで使っており、使い方を深く知らずに使っていたらあるところで問題が発生したので備忘録のため記述します。
## 問題が起こったコード
```java
public class Main {
    private String fileName;
    private String extension;
    public Main(String fileName, String extension){
        this.fileName = fileName;
        this.extension = extension;
    }
    public void getFileName(){
        var file = new FileName(fileName);
        var extension = new Extension(extension);
        return file.fullName(extension);
    }
}

public class FileName{
    private String value;
    public FileName(String value){
        this.value = value;
    }
    public String fullName(Extension extension){
        return value + extension.get();
    }
}

public class Extension{
    private String value;
    public Extension(String value){
        this.value = value;
    }
    public String get(){
        return this.value;
    }
}
```
上記のようなコードがあった場合、仮にExtension.get()を評価をする際ある値で返すようにしたい場合下記のようなテストコードをPowerMockitoを使って記述できます。
```java
@RunWith(PowerMockRunner.class)
@PrepareForTest({Main.class})
public class MainTest(){
    @Test
    public void test01{
        var mock = PowerMockito.mock(Extension.class);
        PowerMockito.when(mock.get()).thenReturn(".txt");
        PowerMockito.whenNew(Extension.class).withAynArguments().thenReturn(mock);

        var expected = "test.txt");
        var actual = new Main("test", ".exe").getFileName();

        Assert.assertEquals(expected, actual);
    }
}
```
しかし、これだと、期待値通り値が帰ってこない問題がありました。

## 解決方法
```java
@PrepareForTest({Main.class})
```
上記を変更することで解決できました。PrepareForTestには今回の場合のようにインスタンス生成をして値を返すときにはnewを行うクラスをPrepareForTestに加えないといけないみたいです。

PrepareForTestのAPIリファレンスを読むと下記のように書いてあります
>This annotation tells PowerMock to prepare certain classes for testing. Classes needed to be defined using this annotation are typically those that needs to be byte-code manipulated. This includes final classes, classes with final, private, static or native methods that should be mocked and also classes that should be return a mock object upon instantiation.

翻訳サイトを使って翻訳すると
> このアノテーションはPowerMockに特定のクラスをテスト用に準備するように指示します。このアノテーションを使って定義する必要があるクラスは、一般的にバイトコード操作が必要なクラスです。これには final クラス、final、private、static、またはネイティブメソッドを持つクラスが含まれ、またインスタンス化時にモックオブジェクトを返す必要があるクラスも含まれます。

とのことです。つまり、Mockするクラスを書くのではなく、mockするクラスを呼び出しているクラスを記述しないといけないということです。
【Xcode15】【エラー】「Sandbox: rsync.samba(43610) deny(1) file-write-create /Users/開発者名/Library/Developer/Xcode/DerivedData/アプリ名-gzyuowsnikwwxlgolkqjdiieoeqg/Build/Products/Debug-iphonesimulator/アプリ名/Frameworks/Realm.framework/_CodeSignature」

Xcode15で下記のようなエラーが発生しました。


Sandbox: rsync.samba(43610) deny(1) file-write-create /Users/開発者名/Library/Developer/Xcode/DerivedData/アプリ名-gzyuowsnikwwxlgolkqjdiieoeqg/Build/Products/Debug-iphonesimulator/アプリ名.app/Frameworks/Realm.framework/_CodeSignature

こちらのエラー解決方法について記載します。


![スクリーンショット 2023-11-26 17.23.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621000/5124f3a7-76aa-cfe7-fba4-5cfd8004ee25.png)

①アプリの設定画面を開く
②Build Settingを選択
③「User Script Sandboxing」をYes→Noへ変更
④build

私はこの方法でビルド成功しました。
同じ内容で迷っている方はぜひ参考にしてみてください！
paloaltoの解析講座4：Wireshark

<!--
2023/11/14
-->
* paloalto解析講座の続き

https://unit42.paloaltonetworks.jp/using-wireshark-exporting-objects-from-a-pcap/

# Objectの出力
* HTTPファイルの出力
`File` `Export Objects` `HTTP…`
![screenshot 19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/2bf31b1c-78a2-2845-75a9-cd9cfc778403.png)
![screenshot 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/0e85eb3c-0f7f-437f-46d1-66a186370f82.png)
~~~
http.file_data
~~~
<br>

* SMBファイルの出力
`File` `Export Objects` `SMB…`
![screenshot 23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/f970a784-6423-953e-7734-9d4dacf48289.png)
~~~
smb.file
~~~
<br>


* Mailファイルの出力
`File` `Export Objects` `IMF…`
IMF(Internet Message Format)は、`.eml`ファイル拡張子が付加された名前で保存される
![screenshot 25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/89da3757-5951-034e-d293-414a866bb398.png)
~~~
smtp.data.fragment
~~~

## TCP Streamからの出力
* `Follow` `TCP Stream`でデータの表示
Magic Numberから、PEファイルっぽい。
![screenshot 26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/40f0307a-ffee-1a66-75a2-047b86c08fcd.png)
* `Raw`を選択
![screenshot 27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/2d901928-2ca1-867d-ee54-533d26a93d9a.png)
* `Save as…`を選択
![screenshot 28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/df19e2e2-0f1c-3348-2a2a-a12390e30d98.png)
<br>

* `FTP`のコマンドからファイル名を検索
~~~:コマンドから出力しているファイルを探す
ftp.request.command
~~~
~~~:データを確認
ftp-data
~~~
~~~:データを保存する命令から、ファイルを探す
ftp-data.command contains "STOR"
~~~
~~~:関連付けられたファイルを確認
ftp-data.command contains .html 
~~~
~~~:exeファイルの抽出
ftp-data.command contains ".exe" and tcp.seq eq 1
~~~
<br>


* 以上です。
最新のTeraTermをダウンロードする(2025年3月版)

# 最新のTeraTerm

2025-03-03 の version 5.4.0 リリースを受けて記事を更新

最新のTeraTermには
- version 4.108 (4系)
- version 5.4.0  (5系)

の２種類があります。

# 背景

さまざまな事情があって
Tera Termの古いホームページ(OSDN)は停止し
新しいホームページ(github)に引っ越したため
https://teratermproject.github.io/
また、窓の杜からも入手可能であるが、更新が遅い場合もあり、
最新の Tera Termをどこからダウンロードするのか分かりにくい

# ダウンロード方法

新しいTera Termのホームページ(github)を開きます。

https://teratermproject.github.io/
ページ左上の
[Project page]
をクリックする。
Tera Term のリポジトリに遷移します。
https://github.com/TeraTermProject/teraterm

画面右の方の Releases をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111137/f37c4a02-68fd-5555-cc07-f93c3c450567.png)


画面を下にスクロールしていき

Assets
の下の
teraterm-5.4.0.exe(インストーラー版)または
teraterm-5.4.0.zip(ポータブル版)
をクリックしダウンロードする。
teraterm-5.4.0_pdb.zip(開発者がデバックに使用するものなので通常は使わない)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111137/5ddeb3fa-e135-4a1b-b2cc-194e1019b55a.png)

インストーラ版はマルウェアと判定される場合があるため
ポータブル版を利用しても良い。

Tera Term 4.108 をダウンロードする場合は
更に画面を下にスクロールしていき。
Assets をクリックする。

teraterm-4.108.exe(インストーラー版)または
teraterm-4.108.zip(ポータブル版)
をクリックしダウンロードする。
10の割り算　割られる数が1000ぐらいまで正しい(おまけ)

前回の記事(コメントも見てください)

https://qiita.com/caa45040/items/5aaca56c7fa5bb7ef0e6


目的
たいへん、ありがたい事に
32ビットintの10の割り算で
最適なアルゴリズムがあると指摘されたので
試してみました。　結果は、(真)です。(正しいです。)

https://www.recfor.net/jeans/index.php?itemid=902

3435973837は、1 0000 0000Hを10で割って
左に三回シフトした数だそうです。


オンラインコンパイラ

https://paiza.io/ja


```c++


#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    
    long al;
    long long ax;
    int bl=0;
    
    al=-29;
    if(al < 0) {bl=1;al=0-al;}
    ax = (long long)(3435973837) * (long long)(al);
    al = ax >> 35;
    if(bl==1) al=0-al;
    printf("%d\n",al);

}



```

結果


```

2

```
両端支持梁(英:Simply supported beam）組合せ応力 問題5.p148「材料力学演習(20221021)」をsympyでやってみたい。

・たわみ、たわみ角を勉強中。

 # オリジナル
[問題5.p148](http://zairikiweb.starfree.jp/zai_enshuh/zai_enshuh_ver.3.3.pdf#page=153)[　＜「材料力学演習(20221021)一括(ver.3.3)」を勉強したい。#sympy](https://qiita.com/mrrclb48z/items/c3274daf5f7a99cfe027#%E4%BD%9C%E6%A5%AD%E4%B8%AD%E7%A7%81%E3%81%AE%E8%A7%A3%E7%AD%94sympy)
　　　　　　　　？？？タブレット等で、pdfを開く事ができないかも。？？？　

# sympyで
・ver0.2 
・sympyのmaximum()関数を使って、最大せん断応力の長さ方向の発生位置の計算です。
　maximum()関数で最大値を求めてから、solve()関数で方程式の解です。
sympy.calculus.util.maximum(f, symbol, domain=Reals) 
https://docs.sympy.org/latest/modules/calculus/index.html#sympy.calculus.util.maximum
```python
# ver0.2
from sympy import *

var('h,b,L,P,Iz'            ,real=True,positive=True)
var('σx,σy,τxy,M,x,y,F,σ1,σ2',real=True)
var('σ1y0,σ2y0',real=True)
var('τmaxy0',real=True)
rep1={h:100*0.001,b:50*0.001,L:1.0,P:5.0*1000}
rep2={Iz:(1/12*b*h**3).subs(rep1)}
# 
eq43_σ1y0  =Eq(σ1y0  , P/2*h**2/(8*Iz))
eq43_σ2y0  =Eq(σ2y0  ,-P/2*h**2/(8*Iz))
eq44_τmaxy0=Eq(τmaxy0, P/2*h *x/(4*Iz))
print("# 1)",eq43_σ1y0  .subs(rep1|rep2))
print("# 1)",eq43_σ2y0  .subs(rep1|rep2))
# 
f   =eq44_τmaxy0.subs(rep1|rep2).rhs
fmax=maximum(f,x,Interval(0,L/2).subs(rep1|rep2) )
print("# 2)",eq44_τmaxy0.subs(rep1|rep2))
print("# 2)",round(solve(Eq(f,fmax),x)[0],1))
print("# 2)",Eq(τmaxy0, round(fmax,1)))
# 1) Eq(σ1y0, 750000.0)
# 1) Eq(σ2y0, -750000.0)
# 2) Eq(τmaxy0, 15000000.0*x)
# 2) 0.5
# 2) Eq(τmaxy0, 7500000.0)
```

・ver0.1。 上と同じ。辞書の結合。subsの辞書の置き換えで、おまかせ全部代入です。
```python
# ver0.1
from sympy import *

var('h,b,L,P,Iz'            ,real=True,positive=True)
var('σx,σy,τxy,M,x,y,F,σ1,σ2',real=True)
var('σ1y0,σ2y0',real=True)
var('τmaxy0',real=True)
rep1={h:100*0.001,b:50*0.001,L:1.0,P:5.0*1000}
rep2={Iz:(1/12*b*h**3).subs(rep1)}
# 
eq43_σ1y0  =Eq(σ1y0  , P/2*h**2/(8*Iz))
eq43_σ2y0  =Eq(σ2y0  ,-P/2*h**2/(8*Iz))
eq44_τmaxy0=Eq(τmaxy0, P/2*h *x/(4*Iz))
print("# 1)",eq43_σ1y0  .subs(rep1|rep2))
print("# 1)",eq43_σ2y0  .subs(rep1|rep2))
print("# 2)",eq44_τmaxy0.subs(rep1|rep2))
print("# 2)",eq44_τmaxy0.subs({x:Rational(1,2)*L}).subs(rep1|rep2))
# 1) Eq(σ1y0, 750000.0)
# 1) Eq(σ2y0, -750000.0)
# 2) Eq(τmaxy0, 15000000.0*x)
# 2) Eq(τmaxy0, 7500000.0)
```

# いつもの? sympyの実行環境と 参考のおすすめです。
(テンプレート)

https://qiita.com/mrrclb48z/items/00dd08b0317069be9342
コミットハッシュに紐づく GitHub のプルリクエストをブラウザで開く

# 目的

コミットハッシュを元に、そのコミットが含まれる GitHub の PullRequest の URL をデフォルトブラウザで開きます

# 前提

- macOS Ventura 13.5.2
- gh version 2.33.0 (2023-08-18)
- jq-1.7

# コマンド

```bash
$ gh api repos/:owner/:reponame/commits/:commit/pulls | jq '.[0].html_url' | xargs open
```

`:owner` `:reponame` は適宜読み替えてください。 `:commit` には対象のコミットハッシュが入ります。

# 関数化

```bash
open-pr() {
  local commit_hash=$1
  local repo_owner="hoge"
  local repo_name="fuga"
  gh api repos/$repo_owner/$repo_name/commits/$commit_hash/pulls | jq '.[0].html_url' | xargs open
}
```

```
$ open-pr xxxxxxxx
```

良い感じに。

# HEAD に紐づくPRを開く

現在のコミットに対応するPRを開きたい場合もまぁある。

```bash
open-pr-head() {
  open-pr $(git rev-parse HEAD)
}
```
mindの研究 その38 - mindでwavファイルを作ってみた

# 概要
mindが謎なので調べてみた。
練習問題やって見た。

# 練習問題
mindでwavファイルを作れ。

# サンプルコード

```
出力ファイルは　ファイル。

四バイト化とは
　変換後は　文字列実体
　数１は　変数
　数２は　変数
　数３は　変数
　数４は　変数
　数１に　入れ
　数２に　数１を　入れ
　数３に　数１を　入れ
　数４に　数１を　入れ
　変換後を　クリア
　数１を　０ＦＦＨと　ANDし　変換後に　一文字追加し
　数２を　８ビット　右シフトし　０ＦＦＨと　ANDし　変換後に　一文字追加し
　数３を　16ビット　右シフトし　０ＦＦＨと　ANDし　変換後に　一文字追加し
　数４を　24ビット　右シフトし　０ＦＦＨと　ANDし　変換後に　一文字追加し
　変換後を　返すこと
。

二バイト化とは
　変換後は　文字列実体
　数１は　変数
　数２は　変数
　数１に　入れ
　数２に　数１を　入れ
　変換後を　クリア
　数１を　０ＦＦＨと　ANDし　変換後に　一文字追加し
　数２を　８ビット　右シフトし　０ＦＦＨと　ANDし　変換後に　一文字追加し
　変換後を　返すこと
。

メインとは
　vは　小数変数
　「test.wav」で　出力ファイルを　新規オープンし
　「RIFF」を　出力ファイルに　書き込み
　88232を　四バイト化し　出力ファイルに　書き込み
　「WAVE」を　出力ファイルに　書き込み
　「fmt 」を　出力ファイルに　書き込み
　16を　四バイト化し　出力ファイルに　書き込み
　1を　二バイト化し　出力ファイルに　書き込み
　1を　二バイト化し　出力ファイルに　書き込み
　44100を　四バイト化し　出力ファイルに　書き込み
　88200を　四バイト化し　出力ファイルに　書き込み
　2を　二バイト化し　出力ファイルに　書き込み
　16を　二バイト化し　出力ファイルに　書き込み
　「data」を　出力ファイルに　書き込み
　88200を　四バイト化し　出力ファイルに　書き込み
　vに　0.0fを　入れ
　44100を　回数指定し
　　vに　0.06fを　f加え　vに　入れる
　　sin(v)に　10000.0fを　f掛けて　10000.0fを　f加える　整数化し　二バイト化し　出力ファイルに　書き込み
　繰り返す
　出力ファイルを　クローズする
。





```

# 成果物
test.wavを再生します。

https://embed.plnkr.co/plunk/84NZhqI5K2YHBfrC


以上。
両端支持梁(英:Simply supported beam）組合せ応力 問題4.p148「材料力学演習(20221021)」をsympyでやってみたい。

・たわみ、たわみ角を勉強中。

 # オリジナル
[問題4.p148](http://zairikiweb.starfree.jp/zai_enshuh/zai_enshuh_ver.3.3.pdf#page=153)[　＜「材料力学演習(20221021)一括(ver.3.3)」を勉強したい。#sympy](https://qiita.com/mrrclb48z/items/c3274daf5f7a99cfe027#%E4%BD%9C%E6%A5%AD%E4%B8%AD%E7%A7%81%E3%81%AE%E8%A7%A3%E7%AD%94sympy)
　　　　　　　　？？？タブレット等で、pdfを開く事ができないかも。？？？　


# sympyで
・ver0.1
```python
# ver0.1
from sympy import *

var('P,h,L,Iz'              ,real=True,positive=True)
var('σx,σy,τxy,M,x,y,F,σ1,σ2',real=True)
eq_M  =Eq(M  ,-P*x)
eq_F  =Eq(F  ,-P)
eq_M  =Eq(M  ,-P*x)
eq_σx =Eq(σx ,P/Iz*x*y)
eq_σy =Eq(σy ,0)
eq_τxy=Eq(τxy,Rational(1,2)*P/Iz*(y**2-(Rational(1,2)*h)**2)) 
eq_σ1 =Eq(σ1 ,Rational(1,2)*(σx+σy)+sqrt( (Rational(1,2)*(σx+σy))**2+τxy**2) )
eq_σ2 =Eq(σ2 ,Rational(1,2)*(σx+σy)-sqrt( (Rational(1,2)*(σx+σy))**2+τxy**2) )
# 
σ1    =solve([eq_σ1,eq_σx,eq_σy,eq_τxy],[σ1,σx,σy,τxy])[0][0]
σ2    =solve([eq_σ2,eq_σx,eq_σy,eq_τxy],[σ2,σx,σy,τxy])[0][0]
τmax=Rational(1,2)*(σ1-σ2)
print("# 1) σ1    = " ,σ1)
print("# 1) σ2    = " ,σ2)
print("# 2) τmax  ="  ,τmax)
print("# 3) σ1y0  = " ,σ1  .subs({y:0}))
print("# 3) σ2y0  ="  ,σ2  .subs({y:0}))
print("# 4) τmaxy0= " ,τmax.subs({y: Rational(1,2)*h}).simplify())
print("# 4) τminy0= " ,τmax.subs({y:-Rational(1,2)*h}).simplify())
# 1) σ1    =  P*(4*x*y + sqrt(16*x**2*y**2 + (h**2 - 4*y**2)**2))/(8*Iz)
# 1) σ2    =  P*(4*x*y - sqrt(16*x**2*y**2 + (h**2 - 4*y**2)**2))/(8*Iz)
# 2) τmax  = -P*(4*x*y - sqrt(16*x**2*y**2 + (h**2 - 4*y**2)**2))/(16*Iz) + P*(4*x*y + sqrt(16*x**2*y**2 + (h**2 - 4*y**2)**2))/(16*Iz)
# 3) σ1y0  =  P*h**2/(8*Iz)
# 3) σ2y0  = -P*h**2/(8*Iz)
# 4) τmaxy0=  P*h*Abs(x)/(4*Iz)
# 4) τminy0=  P*h*Abs(x)/(4*Iz)
```

# いつもの? sympyの実行環境と 参考のおすすめです。
(テンプレート)

https://qiita.com/mrrclb48z/items/00dd08b0317069be9342
VisualStudioを使わずRiderでMAUIのプロジェクト作成備忘録

# Riderを用いて.NET MAUIのプロジェクトを作成
普段はUnityでスマホ向けゲーム制作を行なっているものの、Unityを用いないアプリ開発を行なってみたいと考えた。
具体的にはMac OSでiOSアプリ開発をC#を用いて行おうと思い、その備忘録として記事を作成。

1. Xcodeコマンドラインツールのインストール
`xcode-select --install`  


1. .NETのインストール
とりあえず.NET 7系列をインストール
https://dotnet.microsoft.com/ja-jp/download


1. RiderでMAUIのプロジェクトを作成
MAUIを選択し新規ソリューションを作成。<p align="center"><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531666/555eeb86-3fdb-0be2-de51-0d46fc1a3958.png"></p>


1. 動くかどうかビルド
ビルドを行いシミュレーターが起動、アプリが実行されれば成功！
<p align="center"><img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531666/ae862bd7-64cd-e01f-c0ab-940ab2047389.png"></p>



# 参考資料(この記事の内容はほぼこれ)
[1][豆蔵デベロッパーサイト VS Code で .NET MAUI の開発環境を構築する(macOS/iOS)](https://developer.mamezou-tech.com/blogs/2023/08/14/setup-maui-devenv/)

[2][JETBRAINS macOS Environment Setup for MAUI Development](https://blog.jetbrains.com/dotnet/2022/05/25/macos-environment-setup-for-maui-development/)

Qiitaへは初投稿です...お手柔らかに！