OmniAICreator/Qiita-1.07M huggingface dataset:
真面目な人がわからないことにぶちあたったら

カサレアル アドベントカレンダー2023年12月12日のエントリーです。

この記事では、わたしが育児と新人研修を通して「ITの世界なんてわからないことだらけなのよ、正解なんてないからハマらなくていいのよ」というのに気付けた経験を書いています。

# 前提：「真面目な人」とは

タイトルに「真面目な人」と書いているのでまずはここでの定義から。
一般的に「真面目」で想像されるようなことにいくつか特徴を足しています。

- 学生時代、勉強はできる方だった
- 社会人になっても「真面目」または「優等生」と言われたことがある
- 人の話を信じやすい
- 人の肩書きや資格で権威を感じる
- 知識を得られれば割と満足する

みなさんのまわりにはいるでしょうか。または、みなさん自身に当てはまるでしょうか。

# わからないことがあったらどうする？

ところでみなさんは、わからないことがあったらどうしますか？
調べたり、人に聞いたりしますよね。
インターネット上ではGoogle先生なんかが頼れる存在かと思います。
しかし師は博識がゆえに膨大な量の情報を示してくれるので、余計に迷ってしまうこともあると思います。

そんななかでも見るべきところは大体決まってくるのではないでしょうか。
たとえば公式サイトなど、その技術の発信元。たとえばReactについて何か知りたいなら https://react.dev/ など。

他にはその技術の開発者のブログ、GitHub/GitLabでしょうか。
何かうまくいかなくて困っているということであれば、Stack OverflowなどのナレッジコミュニティやQiita記事を見ることもあるでしょう。
調べる経験を積んでいくうちに「ここ見ればよさそう」という勘所みたいなものがつかめてくると思います。

# 答えがないときはどうする？

こう書いておいてなんですが、上記が有効なのは仕様や文法がある程度決まっているときです。対して、仕様や文法が決まっていないようなもの、たとえば、
- スキルレベル差が激しいチームでうまく開発するには
- ちゃんとしたクラウドネイティブをやるには
- ふりかえりをしっかりやるには

などなどについては、それこそ人にもよるし技術にもよるし、場所にも時間にもその組み合わせにもよるし、答えなぞありません。
（「うまく」とか「ちゃんと」とか「しっかり」とか、怪しげな形容詞が出てくる問いがそもそも、というのは置いておいて）

そんなときには、得た情報は参考にしつつも、試行錯誤の繰り返ししかありません。もちろん、正解も不正解もありません。

# 育児も答えがないのに

本論から少し外れますが、わたしは絶賛、育児中です。
育児なんてわからないことだらけなので、
「一般的にはどうなってるんだろう」
「みんなどうしてるんだろう」
というのが気になって、調べ物をよくします。

そんなある日、某育児書を読みました。そこには
- 著者は東京大学大学院卒業
- WHOガイドライン
- 科学的な方法論

などなど、フツーに「これは信頼できそう」と思えるようなワードが並んでおりました。それぞれはみなさんがよくご存知の機関ですし、信頼できると思うのは割と自然なことかと思います。ここまではいいのですが、問題はその後です。
育児なんて親も子供も千差万別で正解なんてないのに、それをわかっているつもりだったのに、気付いたときにはドツボにハマっていました。
わたしって「真面目な人」だったんです・・・

# 時、すでに遅し。全部不正解状態

もう一度言いますが、育児なんて親も子供も千差万別で正解なんてないのに、本に書いてあることと自分の状況が異なると

**「あれ、わたしなんか間違ってるのかな・・・？」**

から始まり、

**「あれ、これでもダメ？じゃあこうかな・・・」**

を通り、

**「あれ、どうして？なんでうまくいかないの？」**

を超え、

**「あああああああああああああああああもうワケわからん！」**

と頭をかきむしることになりました（だいぶ、控えめに書いてます）。

こうして振り返って書いてみると「ヘイヘイ、テイキッイージー（take it easy）!」とか思うのですが、本当に不思議なものです。

# 人の振り見て我が振り直せた

「あぁ、自分てこんなんだったのか」と自覚できたのは、この春、営業としてアテンドしていた新人研修案件でした。
社会に出て右も左もわからず、毎日技術知識の習得と実践に追われ、まわりにはなんでもソツなくこなす同期・・・

Google先生に聞いても、Aがうまくいった！という情報もあるし、これからはBがいい！という情報もあるし、AとBにはこんなトラップが！という情報もあるし、「自分が探していたのはこれだ〜！」と思っても、”この記事は公開から1年以上経過しています”とお知らせされたり。

そんななか、研修講師や先輩社員や同期というのはうまくいく方法を知っている仙人のように見えてきます。
彼らが「こうしてみたら？」とか、「これでうまくいったことあるよ」と言った日には、それを唯一無二の正解のように受け止めてしまうのです。

決して全員ではないですが、その姿を見ていて「あー、これはわたしだ」と自覚できたのでした。

# ITの世界はわからないことだらけ

技術なんてどんどん生まれては変わって廃れていきます。
昨日動いてたものが今日は動かなくなった、なんてことも発生します。

わからないことだらけの中、自分で考えて、調べて、試して、うまくいかなくて、もっかい考えて、調べて、・・・という繰り返しって、結構大変です。
そして真面目な人は、

**「ここにはこう書いてあるのにうまくいかない・・・他をあたろう・・・」**

とか、

**「あの人、こう言ってたはずなんだけどな・・・自分の何が悪いんだろうか」**

とか、変なふうにハマってしまうときがあります。
「うまくいくかなー、どうかなー。とりあえず試してみるか」くらいに構えられるといいのですが、自覚なく沼に沈みがちなのです。

# 真面目な人がハマっていたらどうする？

どうか助けてあげてください。
わたしの場合は、これまで自覚がなかったことを自覚できたことで心持ちが少し変わりました。
が、これもただの一例にすぎないので、くれぐれも唯一絶対の正解と思わぬよう。

みなさん自身や、みなさんの周りにいる真面目な人にどうしたらいい？というのは、はい、ぜひ試行錯誤してみてください！
この記事で書かれているいろんな表現含め、正解も不正解もないので。
第一世代　音声変更

「aibo ers-11x/210で遊ぶ Advent Calendar 2023」の11日目です。

:::note
業務外の個人的な検討活動です。
:::

:::note alert
警告
この記事について作者はいかなる責任も負いません。
置き換えるファイルはバックアップを取ることをお勧めします。
:::

9日目にまとめた内容を参考にして、音声を変更したいときに用いるファイルが分かります。

今回は条件が分かりやすいYART 11xの場合に、アイドル状態Random#3のP1I3の音声変更を試みます。

#### AIBO Browserで音声名を確認
ActionsのP1I3を選ぶと、音声はmark1ddpが割り当てられていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/368f822c-2ce3-3f66-a463-02e02eea6da8.png)

#### AIBO Data Wizardで展開したフォルダの中にwavファイルを探す
今回はMode0の中にmark1ddp.wavを見つけました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/50f3b0f3-2bbe-9832-342e-035915c45841.png)

#### audacityですげ替えるwavファイルを変換する
今回はVOICEVOXのずんだもんの声を使いました。いつもありがとうございます。
https://voicevox.hiroshiba.jp/

作成したwavファイルをaudacityを使いました。ありがとうございます。
https://www.audacityteam.org/

audacityにwavファイルをドラッグアンドドロップしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/7d5b65ff-32dd-6c7b-7510-bb135b41c503.png)

audacityのプロジェクトサンプルレートを8kに変更しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/09238346-7208-5963-92c3-3823c72116d9.png)

波形の窓の左側で右クリックして、Rateを8000Hzに変更しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/a5e82ae1-2457-a4c8-3015-0ecb3b62f695.png)

ファイルの長さが3倍になったので、EffectにあるChange Speedで速度を3倍にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/836f3eca-1a6f-6f00-eadf-ed15866071df.png)

wavファイルをエクスポートしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/d79d16ff-fda7-3c0a-7ea0-77757839ece4.png)

エクスポートされたファイルのビットレートが元のmark1ddpと合っていましたので、名前をmark1ddpに変えて入れ替えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/f1389e9d-f823-2381-38ae-8a4a5ebf13b2.png)

最後にAIBO Data WizardのUpdate AIBO Dataで圧縮しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/e450c1ca-6e73-f96f-4b8a-d1a30b27353c.png)

#### 動作確認
音が小さくて聞きにくいですが、ずんだもんが「急げ急げ」と言っています。
https://youtu.be/iewL0t6qflg

#### 備考
- 私が試したときはskitterで音声をエクスポートすることはできませんでした。ERS-11xには対応していないようでした。
- YART 11xのツールにあるYART_APGは作成中のようでした。
https://www.aibohack.com/111/yart11x.htm
メディア系サイトのコンポーネントを作る時に覚えておきたいTypeScriptの型【Omit】

TypeScriptで親方型を渡したくない場合の定義方法についてです。

## 属性の型を一部除いて全て受け取るために`Omit`を利用する

`Omit`は下記のように記述します。

```typescript
type Props = {
  text: string
  orderd: number
} && Omit<ComponentPropsWithoutRef<'p'>, 'className'>

const Component = ({}: Props) => {
  return (
    // 省略
  )
}
```

https://typescriptbook.jp/reference/type-reuse/utility-types/omit

`Omit`は2つの引数を取り、第一引数にはオブジェクトの型を渡して、第二引数には第一引数のプロパティを渡します。

第二引数で指定した、プロパティが省かれた新しい型のオブジェクトを作れます！

:::note warn
あえて第一引数、第二引数と表現していますが、公式サイトではTとKeysと表現されています。
:::

注意したいのは第二引数で第一引数にないプロパティの場合やタイポがあった場合でもエラーにならないことです…（エラーを出してほしいところです）

## まとめ
TypeScriptの型定義の方法はたくさんあります。

:::note warn
基礎的な部分はサバイルバTypeScriptや動画からも学べますが、実装し始めると型をどのように利用して良いのかわからないことが多いと感じます…
:::

適切に型を加えられるようにこれからも精進していきます！
依存性逆転の社会実装例　ご飯編

# はじめに
はじめまして、森田と申します。
この記事はARISE analytics Advent Calendar 2023の11日目の記事になります。

普段、社内でポエムを書いてるんですが、
今回はその一部をQiitaに移植します。



# 本編　依存性逆転の社会実装例　ご飯編
10年前ぐらいは、外食の主な手段はお店まで行ってご飯を食べることだった。
つまり、人は外食をするときにお店に依存していることになる。

そこにUberというインターフェースができることによって依存が逆転することになる。
人は、Uberに依存して、お店もuberに依存することになった。

このUberを人のユーティリティの一つと考える(Dependency injection)と、
お店はuberを持っている人に依存していると考えられる。

Uberというインターフェースを作ることで、人がお店に依存している状態から、お店が人に依存しているように見える。
これがいわゆる依存性逆転。

依存性逆転による恩恵は、人は外食の種類ごとに行動を定義しなくても （あの店に行くとか、車、電車を使うとか）、uberというインターフェースで簡単に外食を取り寄せることができるようになる。

# 終わりに
このポエムは後輩が入社してSOLIDの五原則を学習してもらっている際に依存性逆転を理解しやすくするために考えたポエムでした。理解しにくい考え方も普段の生活を例にするとわかりやすくなりますよね！
何となく思いついた話なので、誰かもっとわかりやすくする観点とかあったら教えてもらえると嬉しいです！

以上！
5回転職してわかったこと。

## はじめに

5回転職はきっと今の日本ではまだ多い方だと思います。
しかも、某有名人のように大手ばかりをわたりあるいたわけでもないです。

そんな感じですので多くの皆様に近い感覚で書けることを書いていきたいと思います。

## 気をつけるべきこと
### 転職回数が多いと転職で不利になる
これはよく言われることなんで、知ってる方も多いと思いますがそのとおりです。
ただ、今はどうなのかわかりません。

ただ、これは企業次第だと思います。
人貸し商売であれば、一定のレベルのスキルや知識があれば採用してくれる可能性が高い気はします。
ただ、自社製品開発など長く会社にいてほしいと思っている会社とは相性が悪いでしょう。

### 手続きがめんどくさい
お子様がいる場合など、保育園など手続きがめんどくさいです。
会社が変わるというのも年収が変わるというのも自治体のサービス？を受ける条件に関わることなので手続きをしないといけません。

### 人間関係を大事にする
転職するとなったら、裏切りモノ扱いされたりするかもしれませんが、こちらから悪態をついてはいけません。もしかすると転職後にも付き合いがあったりします。

また、自社だけにではなく取引先の人など関係各所と仲良くしておいたほうがいいです。
困ったときに助けてくれる人もいますし、人間関係は大事です。

### 転職は退職する前にすること
これは実体験ですが、退職後の転職活動と、在職中の転職活動だと不思議なぐらい対応が違います。
忙しいかもしれませんが、在職中に転職活動してください。

## 終わりに
ぱっと思いつく限りに書きなぐったので読みづらいかもしれませんが、そこらへんはおいおい気づいたら直していきますｗ
転職を考えてる人の参考になれば幸いです。
Reactの状態をデバウンスさせる

## はじめに
デバウンスとは、特定の処理が高頻度で呼び出されるのを防ぐテクニックの1つです。
デバウンスを使用すると、特定の時間が経過するまで処理の実行を遅延させることができます。この遅延中に再度処理が呼び出されるとタイマーはリセットされ、再度処理の実行を遅延します。

例としてユーザーが検索のためにテキストボックスへ入力するシーンを考えます。
テキストボックスへ入力した内容が変更されるたびに検索処理が走るような仕様の場合、大量の処理が押し寄せてくるのでパフォーマンスの低下につながります。
そこで、デバウンスを導入することで検索処理が一定の入力ごとに行われ、パフォーマンスの低下を防げます。

Reactでは、デバウンスは主にユーザーの入力やウィンドウのリサイズなど、高頻度で発生するイベントを制御するために使用されます。

## デバウンス無しの処理を見る
まずは、比較対象となるデバウンス無しのコンポーネントを作ります。
`useState`を用いて入力したテキストを準備し、テキストが更新されて1秒経ってから`alert`を出するようにしました。テキストが更新されると下部に入力したテキストの文字数が出るようにしました。

https://codesandbox.io/embed/vs2r92?view=Editor+%2B+Preview&module=%2Fsrc%2FApp.tsx

今回は長さを求めるだけなのでパフォーマンスに影響はありませんが、外部との通信を同じタイミングで行った場合にトラフィックの増加が想像できます。
また、入力は短期間で行われることが予想されるので実装方法によっては結果の出力順が前後してしまいます。

## 状態の更新がデバウンスされるhooksを作る
テキストエリアの入力はそのまま行わせたい一方、特定の処理は一定の入力置きに行いたいので、テキストエリアの値を管理する状態と特定の処理を行うように監視する状態を分けることを考えます。
```ts
const [text, setText] = useState('');
const displayText = text;
```
`text`がテキストエリアを管理する状態で、`displayText`は`text`を渡しただけの値です。
これでは分けた意味がないので`displayText`の更新のタイミングをテキストエリアへの入力が完了して1秒後に行わせます。
このようにする場合`displayText`は単純に`text`から生成できないので`useState`で状態を作るようにします。さらに、タイミングの調整に`setTimeout`を利用するので`useEffect`を用いて記述します。
```ts
const [text, setText] = useState('');
const [displayText, setDisplayText] = useState(text);

useEffect(() => {
  const timeoutID = setTimeout(() => {
    setDisplayText(value);
  }, 1000);

  return () => {
    clearTimeout(timeoutID);
  };
}, [text])
```
これで`text`が変更されてから１秒後に`displayText`を更新するようになりました。
`useEffect`の処理は初回描画後と`text`が変更されるたびに発火します。そして、中では変更された１秒後に`displayText`の値を`text`の値に変更させています。
そして、1秒経つ前に`text`が再度変更されると、再描画が起きるので次の`useEffect`の処理が走る前に前回のクリーンアップ関数が走って1秒後の更新がキャンセルされます。これによって入力して１秒経つまでは`displayText`の更新が遅延されて特定の処理が高頻度で走ることを防げます。

これをhooksで切り出すと以下のようになります。`deplay`は今回だと1000で、遅延させる秒数を入力します。
```ts
const useDebounce = <T extends any>(value: T, delay: number) => {
  const [debouncedValue, setDebouncedValue] = useState<T>(value);

  useEffect(() => {
    const timeoutID = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    return () => {
      clearTimeout(timeoutID);
    };
  }, [value, delay]);

  return debouncedValue;
}
```

## デバウンス有りの処理を見る
テキストが変更に合わせて内容が下部に入力した文字の長さが記述されていたところから、テキストエリアの入力が終わってから1秒後に行わせます。

https://codesandbox.io/embed/pj4mnt?view=Editor+%2B+Preview&module=%2Fsrc%2FApp.tsx

入力が完了して1秒後に最後の値で処理が発火します。このようにすることでテキストエリアの入力のたびに特定の処理が走らないのでパフォーマンスの低下や処理の結果が前後することを防げます。
問題はテキストエリアを入力してから1秒後のように特定の秒数に信頼を置く必要がある点です。程よい遅延時間を取り繕って設定する必要があるので慎重に検討しましょう(今回の例では時間を取りすぎて利用者のストレスになりそうです)。

## おわりに
Reactの状態をデバウンスさせる方法を紹介しました。
状態の更新が過多で外部との通信が多量になっている場合はこちらを導入してみてはいかがでしょうか。
【Elixir アンチパターン】 tuple、maps、structを使おう


引き続き、Elixir アンチパターンを読んでみます。

今日は、[primitive-obsession](https://hexdocs.pm/elixir/1.16.0-rc.0/design-anti-patterns.html#primitive-obsession)です。

住所を処理するプログラムで、住所を文字列型に入れておいて、郵便番号や国名などを必要に応じて取得したり、書き換えたりする例です。

```Elixir
defmodule MyApp do
  def extract_postal_code(address) when is_binary(address) do
    # Extract postal code with address...
  end

  def fill_in_country(address) when is_binary(address) do
    # Fill in missing country...
  end
end
```

住所の文字列データをそのまま使うのはアンチパターン。構造化されたデータで保存してそれを扱うのがよいという話でした。
お勧めの例では、Addressというstructを作って:street, :city, :state, :postal_code, :countryを入れるようにしています。

```Elixir
defmodule Address do
  defstruct [:street, :city, :state, :postal_code, :country]
end
```
```Elixir
defmodule MyApp do
  def parse(address) when is_binary(address) do
    # Returns %Address{}
  end

  def extract_postal_code(%Address{} = address) do
    # Extract postal code with address...
  end

  def fill_in_country(%Address{} = address) do
    # Fill in missing country...
  end
end
```

この住所の例は、文字列だと扱いずらいので、さすがに、パースして構造化したデータで保存しますよね。
そもそも、構造化した状態で入力してもらうだろう。
まあ、これは例なので、特殊な想定ですが、実際には、文字列のまま最初の１文字目がXXXで、2文字目以降が
YYYなどと決まりを作って、文字列のまま処理するとかありそう。
map,tuple,structを適切に使いましょう。

mapとstructはほぼ同じですが、structは、
- あらかじめ指定したキーしか使えない。
- 指定したキーは必ず存在する。
という違いがあります。

structは、moduleを作って宣言しないといけないので、ちょっと面倒なんですが、キーがなにか明確なので、好んで私は、好んで使ってます。
以前、Axonのソースコードを読んだらStruct効率的に使われていて、読んでみて使い方の勉強になりました。

どんなプログラミング言語でも同じだと思いますが、処理対象のデータを適切なデータ型に保存して取り扱う事は大事ですね。

以前、次の記事で、defstructを使った記事をかいてるので、興味ある方はどうぞ。

https://qiita.com/GeekMasahiro/items/e1354b9920760c49e679
データ「観察」のすすめ〜データ分析から仮説を生み出すために〜

本記事は[リンクアンドモチベーションAdvent Calendar 2023](https://qiita.com/advent-calendar/2023/lmi)の11日目の記事です。

https://qiita.com/advent-calendar/2023/lmi

# はじめに
私はリンクアンドモチベーションのデータサイエンティスト・アナリストとして働いています。

これまでは、主に、弊社コンサルタントの経験に基づき仮説を立て、データ分析を行ってきました。

しかし、最近は、新機能や新規プロダクト開発に携わることが増え、仮説のない問題に取り組むことが多くなりました。

少ない経験ではありますが、仮説がないデータ分析で、仮説を作っていくために大事だと思っているポイントをお伝えします。

# データ分析には2種類ある

そもそも、データ分析には「仮説検証型」と「仮説探索型」という二つの主要なアプローチがあります。

- 仮説検証型分析：明確な仮説を持ち、それをデータで検証
- 仮説探索型分析：データから新たなパターンやトレンドを見つけ出し、仮説を生み出す

また、KJ法で有名な川喜田二郎は研究することについて、著書の中で「実験科学の前に野外科学が必要だ」と述べています。

このプロセスは**W型問題解決モデル**という形で、野外科学によって仮説を集め、実験科学によって仮説を立証するまでの流れを説明しています。

一般的にデータ分析というと「仮説検証型」を想起しますが、検証するための仮説を集めるフェーズも存在し、「仮説探索型」に振り分けられます。

そのため、これから取り組む分析が「仮説検証型」なのか「仮説探索型」なのか見極めることが重要になります。


# 仮説探索型は難しい
ただし、分析が「仮説検証型」なのか「仮説探索型」なのか見極めることができたとしても、万事解決とはいきません。

なぜなら、「仮説検証型」と「仮説探索型」では、分析の性質、進め方が異なるためです。

では、「仮説探索型」において、どのような困難があるでしょうか？

## 考察の方向性が不明確
仮説探索型分析では、分析後の方向性が明確でなく、結果を見てからでないと決定が難しいことが多いです。

これは、仮説検証型のステップが
```
仮説構築 → データ収集 → 分析 → 考察
```
であるのに対し、仮説探索型は
```
データ収集 → 分析 → 考察 → 仮説構築
```
となるためです。

つまり、仮説探索型では、仮説を持たずに進めることとなるため、考察の段階で具体的な問いを定めることが困難な場合があります。

特に、分析対象についてのドメイン知識が乏しく、そもそものデータから発想が湧きにくい場合は顕著にこの問題が起こります。

## バイアスとの戦いがある
仮説探索型分析では、分析結果の考察によって仮説構築をしますが、その自由度が高いため、
分析者のバイアスや先入観が無意識にデータ解釈に影響を及ぼすことがあります。

このバイアスには大きく分けて3つの原因があると思っています。

1. 認知バイアス：データから洞察やパターンを見つける過程が主観的解釈に依存し、結果に影響を与える可能性があります。
1. 確証バイアス：分析者が自らの信念や期待を裏付けるデータやパターンを無意識に探す傾向があります。
1. 選択バイアス：特定のデータセットや変数を好意的に扱い、結果に偏りを生じさせることがあります。

データ取得の範囲を最適化し、統計的検証を行うことで選択バイアスは回避できますが、
認知バイアスと確証バイアスは考察の自由度が増すほど発生しやすくなります。

# 観察によって仮説探索の乗り越える
では、どのようにして仮説探索を乗り越えると良いでしょうか？

前述の川喜田二郎のW型問題解決モデルによれば、観察を通じて情報を集め、KJ法で整理し、仮説を考案するプロセスが提案されています。

そのため、観察を通じて情報を整理し、
```
データ収集 → 分析 → 観察 → 考察 → 仮説構築
```

というふうに、分析と考察の間に「観察」を挟むことで、明示的に考察前に事実情報を整理することができ、考察を容易にすることができると思います。

また、考察前に事実情報をまとめることでバイアスが入る可能性も減らすことができます。

## 観察のチェックポイント

では、どのようにすると観察によって、考察のための情報収集ができるようになるでしょうか？

私がこれまで経験してきて重要だと思ったポイントは以下の4点です。

- **どのような分布であるか？** 
分布の形状を分析し、データの特性や似たような分布の現象から仮説を見つけ出します。
- **周期性・トレンドはあるか？**（時系列データの場合）
周期性や長期トレンドを確認し、時間とともに変化する要因から仮説を見出します。
- **共通点はあるか？**
データセット内の共通特徴やパターンを探し、関連性や原因の仮説を作成します。
- **外れ値はあるか？**
通常範囲から逸脱するデータポイントを特定し、それらが示唆する異常やエラーから仮説を考察します。

# おわりに
仮説探索型分析の需要が増える中で、効率的な観察手法を開発することが重要です。

また、分析中の自己効力感を保つためにも、チェックポイントをマイルストーンとして設定し、一つずつクリアしながらメンタルを保つ効果もあるなと思いました。

# 参考文献
川喜田二郎『[発想法 改版 - 創造性開発のために](https://amzn.asia/d/7Lel9fk)』

西尾泰和『[エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする](https://amzn.asia/d/4u2IpZl)』
Laravel初心者がつまづくポイント1

# 開発現場で駆け出しPGの思い

## Laravelとは？
すばりPHPのフレームワーク
#### ではPHPと何が違うの？
LaravelにはMVC概念とデザインパターンが存在していて、それにより大規模なプロジェクトの際により効率的に開発できるところ。

## MVCの理解で十分か？
M:Model
V:View
C:Controller
のことである。
　それぞれ、フロントエンドとバックエンドの観点で、Viewが1番フロントエンドより、Modelが1番DBより、Controllerが中間といった具合でざっくり抽象化するのが吉と考えている。
　詳細は以下に示す。
  Modelは間接的にDBに対してCRUD操作することが可能である。直接DBを触らないようにすることで、セキュリティ、保守運用性を高めているのではと認識している。
  ControllerはModelからデータを取得して、Viewにデータを渡したり、外部システムからデータを受け取ってModelに渡したり、ビジネスで例えると、モノを横に流す商社マンのポジションだとアナロジーできる。(昨今はトレーディング業の方が勢いが強いだとか、、)エンジニア的に言えば、アクセスロジックとでも言っておこう。つまり、どこにアクセスしてデータを受け取り、どこにアクセスしてどこにデータを送るかを決めるところである。(Laravel初心者には、ここがかなりつまづくポイントになる。)
  最後に、ViewはModelから取得したデータをフロントエンドで表示するためのものである。実は、ここはまだいじったことがないため省略。
　以上の概念だけ覚えていれば現場の開発は十分か？否。これでは、開発プロジェクトにおいて、まったくチーマーワークが発揮できない。ビジネスロジックやデータロジックがごちゃごちゃになるからだ。
## ServiceとRepositoryとは？
　コーディングのロジック処理をわかりやすくするのがServiceとRepositoryの2つである。前者でデータロジック、後者でビジネスロジックを記述する。ここまで来れば言いたいことはわかるだろうが、決して私と同じようにControllerにロジックを書かないように。テックリーダーから厳しいレビューが飛んできます。詳細はググってみてください。
 
## 定数の扱いConfigとは？
　さらに定数の扱いもcofigを利用して定義づける癖をつけらように。

## ちょっとした愚痴
　API連携で電話番号をDBに保存する時、ハイフンを入れるか入れないか論争。数値をstring型にするのは合理的だと思ったが、ハイフンを入れるのはいかがなものか？連携する時にいちいち正規化して登録すると大量のデータ連携の場合、システムの性能に影響が出るのではと。結局フロントエンドで処理を施すとなると、表示までに時間がかかる可能性があるためUX的には前者の方が良いのだろうか。さっぱりわからない。
PHP_CodeSnifferの今後

PHP_CodeSnifferは、php-cs-fixerなどと並んでPHPにおける代表的なLinterの1つです。

そのPHP_CodeSnifferに先日、`The Future of PHP_CodeSniffer`というissueが投稿されました。

https://github.com/squizlabs/PHP_CodeSniffer/issues/3932

## 何が起こっている？
簡単に言うと、PHP_CodeSnifferのリポジトリが[`squizlabs/PHP_CodeSniffer`](https://github.com/squizlabs/PHP_CodeSniffer)から[`PHPCSStandards/PHP_CodeSniffer`](https://github.com/PHPCSStandards/PHP_CodeSniffer)に変わります。
また、メンテナの体制も変更されます。

### 経緯
PHP_CodeSnifferは長年[`@gsherwood`](https://github.com/gsherwood)さん（Greg Sharwood、以下Greg）が中心となって開発を行っていました。
しかしここ最近はPHP_CodeSnifferに時間をとれない状況が続いていたことから、2023年5月には主要なコントリビュータの一人であった[`@jrfnl`](https://github.com/jrfnl)さん（Juliette Reinders Folmer、以下Juliette）にリポジトリへのコミット権限が与えられ、この2人が協力してプロジェクトを進めるとしていました。

https://github.com/squizlabs/PHP_CodeSniffer/issues/3814

ところがその後もGregは開発に参加できず、ついにプロジェクトを放棄すると宣言したため、Julietteが引き継ぐこととなりました。

## ユーザーはどうすればいい？
冒頭のIssueが投稿された1週間後の12月8日、Julietteがメンテナとなった新バージョン3.8.0がリリースされました。
PHP_CodeSnifferを利用する側のユーザーは、この新バージョンを使いたければ対応が必要になる場合があります。

### インストール方法の変更
今まで使っていたインストール方法によって異なります。
詳細は3.8.0のリリースノートに記載があります。

https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/tag/3.8.0

- PEAR
  - PEARでのリリースは今後行われません。PEAR経由でインストールしていた場合は、他の方法に切り替える必要があります。
- composer
  - 特に変更は不要です。通常通り`composer update`で新しい3.8.0がインストールされます。
  - 当初パッケージ名を[`phpcsstandards/php_codesniffer`](https://packagist.org/packages/phpcsstandards/php_codesniffer)へ移行するという話がありましたが、結局元の`squizlabs/php_codesniffer`を継続してリリースできるようになりました。
- Phive
  - URL指定でインストールしている場合は、URLを変更する必要があります。
- Pharを直接ダウンロード
  - ダウンロード元URLの変更が必要です。

### 寄付（任意）
  - Julietteが開発に集中できるよう、また現在1人しかいないメンテナを増やしていけるように、寄付を募っています。
  - [新しいリポジトリ](https://github.com/PHPCSStandards/PHP_CodeSniffer)の`Sponsor this project`のところから、GitHub SponsorまたはOpen Collective経由でサポート可能です。

---

ここ1,2年の`squizlabs/PHP_CodeSniffer`はマージされるPRの数やリリース回数も減っていたので、ついに……という感じでしたが、OSS運営の難しさも垣間見える出来事でした。

今後のPHP_CodeSnifferに期待するとともに、寄付やPRなど出来ることで貢献していきたいですね。
スマホで開発チャレンジ（GAS）

こんにちは！

普段使ってるスマホ、便利ですよね。
これでササッと開発できたら楽だと思いませんか？

今回は、スマホでGASのコードを書いてみたお話です。

# なぜやろうと思ったか
当時、様々なタスクを抱えており、時間の確保が難しい時期がありました。
しかし、組織運用を少しでも楽にするために、スプレッドシートとGASを連携させた仕組み作りが必要。
なんとか通勤時間を有効に使えないか、という気持ちから、チャレンジしてみることに。

# PCだとだめなのか
コロナ禍前だったので、乗車率が150%くらいの満員電車でした。
そこでPCを広げるのは、さすがに難しいです。
スマホで出来るのであれば、その方がいいです。

# 実際に作ったもの
これが実際に作ったコードです。
今は使われていないものですが、公開します。
Googleフォームの内容をSlackに通知するスクリプトです。
```javascript
function sendToSlack(name, body, channel) {
  var url = "https://hooks.slack.com/services/xxxxx/xxxxx/xxxxx";
  var data = { "channel" : channel, 
              "username" : name, 
              "attachments": [{
                "color": "#d23546",
                "title": "月次報告",
                "title_link": "http://bit.ly/xxxxx",
                "text" : body,
              }],
              "icon_emoji" : ":smile:" };
  var payload = JSON.stringify(data);
  var options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  var response = UrlFetchApp.fetch(url, options);
}


function onFormSubmit(e){
  var body = ""; 
  var applicant = "";
  var itemResponses = e.response.getItemResponses();
  
  var date = "";
  var name = "";
  var good = "";
  var problem = "";
  var memo = "";
  var selfCheck = "";
  
  var isHoliday = 0;

  for (var j = 0; j < itemResponses.length; j++){
    var itemResponse = itemResponses[j];
    var title = itemResponse.getItem().getTitle();
    var response = itemResponse.getResponse();

    switch (title) {
      case "氏名":
        name = response;
        break;
      case "良かったこと（業務）":
        good = response.substr(0,50);
        if( good.length < response.length ){
          good = good + ".....";
        }
        break;
      case "困っていること（業務）":
        problem = response.substr(0,50);
        if( problem.length < response.length ){
          problem = problem + ".....";
        }
        break;
      case "その他（業務外のことでも可）":
        memo = response.substr(0,50);
        if( memo.length < response.length ){
          memo = memo + ".....";
        }
        break;

      case "セルフチェック":
        for( var i=0; i<response.length; i++){
          selfCheck = selfCheck + "・" + response[i] + "\n";
        }
        break

      default:
        break;
    }
  }
  var bodyPublic =  "氏名:" + name + 
    "\n--------------------\n良かったこと（業務）:\n" +  good + 
      "\n--------------------\n困っていること（業務）:\n" + problem + 
        "\n--------------------\nセルフチェック（できた項目）:\n" + selfCheck + 
          "\n--------------------\nその他（業務外のことでも可）:\n" + memo;
  sendToSlack(name, bodyPublic, "#ses_report");

}
```

## メリット
意外とできます。
コツを覚えたら、通勤時間でスクリプトを作れてしまいます。
今ならAIを使って、もっと簡単に作れます。

## デメリット
端末によると思いますが、自動でフォーカスされ、非常に見にくいです。
私の端末では、ここまでアップになりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407770/62f1aa98-253b-487e-84f4-3552b97fc5c7.png" width="70%">

こんなに拡大されると、さすがに厳しいです。
でもやりました💪

この拡大を回避する方法があれば、格段に開発しやすくなります。
回避方法については、引き続き調査します。

# まとめ
今回は、スマホでGASを開発したお話でした。
もう少し工夫すると、もっと開発しやすくなるのではないかと思います。

資料はスマホで作ることも多いので、開発もどんどんチャレンジして、もっと効率のいい方法が見つかれば、改めてお知らせします！
CloudTrail起点のイベント駆動を考える

# はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧は[こちら](https://qiita.com/tech4anyone/items/b06f88035d27c6ef13b2)。

この記事ではCloudTrailに関連する内容を超詳細にまとめています。

具体的には以下流れで説明します。

- CloudTrailとは
- CloudTrailの仕組み
- CloudTrail for Advance
- CloudTrailのベストプラクティス

AWSの区分でいう「Level 200：トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

# この記事を読んでほしい人
- CloudTrailがどういうサービスか説明できるようになりたい人
- CloudTrailを採用するときのベストプラクティスを説明できるようになりたい人
- AWS Certified DevOps Engineer Professionalを目指している人

# CloudTrailとは
AWS CloudTrailは、AWSアカウントのアクティビティを記録、監視、保持するサービスです。
AWSリソースへのアクセスやアクションを追跡できるので、セキュリティ分析、リソース変更追跡、コンプライアンス監査などに利用できます。

![](https://storage.googleapis.com/zenn-user-upload/8ac75b0b793f-20231211.png)

AWS CloudTrailは、AWSマネージメントコンソール、AWS SDK、AWS CLI、AWS APIを通じて行われるアクションを記録します。
これには、EC2インスタンスの起動や終了、S3バケットの作成や削除などが含まれます。
これらのアクションはイベントとして記録され、S3バケットやCloudWatch Logsに保存されます

# CloudTrailの仕組み
AWS CloudTrailは、AWSアカウントの作成時から証跡（Trail）と呼ばれるログ収集設定を使って、アカウント内で実行されるアクションを自動で記録できます。
AWSアカウントでアクティビティが発生した場合、そのアクティビティはCloudTrailイベントに記録されます。

なお、CloudTrailイベントには3つの種類があります。

1つは管理イベントと呼ばれるイベントでAWSアカウントのリソースで実行される管理オペレーションです。
具体的にはネットワーク構成変更やログ記録の設定などです。

2つめがデータイベントと呼ばれるイベントでAWSアカウントのリソース上またはリソース内で実行されたリソースオペレーションです。
具体的にはS3のオブジェクトレベルのAPIアクティビティやLambda関数の実行アクティビティです。

最後がインサイトイベントと呼ばれるイベントで、管理イベントのAPIコールボリュームが通常のパターンから外れた場合に生成されます。
具体的にはIAMアクションのバーストやリソースプロビジョニングの急上昇です。

普段CloudTrailを使う上でこのイベント種別を意識することはあまりありませんが、どういった操作が記録されるかを把握しておくとインシデント調査や監査で役に立ちます。

# CloudTrail for Advance
## イベント記録の保持
CloudTrailが記録されたイベントを保持できるのは90日までです。
そのため、それ以上の期間イベントを保持したければS3にログとして出力し、解析にはAthenaを利用する必要があります。

![](https://storage.googleapis.com/zenn-user-upload/07a1d722ade5-20231211.png)

一般に、CloudTrailは監査目的でも使うのでS3への出力は設定しておくことがベストプラクティスです。
また、S3に出力した際にはコスト最適化のためにライフサイクルを設定し、より安いTierに移行できるようにしておくとよいでしょう。

## CloudTrailイベント駆動
CloudTrailは基本的にAWS内のAPI CALLをすべて記録しているので、このイベントを利用するとイベント駆動のアーキテクチャを組みやすくなります。

特に、実プロジェクトではインシデント検知のための通知機構として利用します。
![](https://storage.googleapis.com/zenn-user-upload/c6c092310765-20231211.png)

例えばDynamoDBのテーブル削除をしたときや、EC2のセキュリティグループを変更したとき、特権を付与しているIAMロールが使用された時などインシデントにつながりかねないイベントを全員が見えるところに通知することで意図しない操作に対する抑止力あるいは早期発見につなげることができます。

# CloudTrailのベストプラクティス
AWS CloudTrailのベストプラクティスは以下の通りです。

| ベストプラクティス | 説明 |
| --- | --- |
| すべてのリージョンに適用される証跡の作成 | AWSアカウントでIAM ID、またはサービスが実行したイベントの完全な記録を取得するには、すべてのAWSリージョンでイベントをログに記録するように各証跡を設定する必要があります。|
| Amazon S3バケットへのログ連携 | CloudTrailログファイルはS3に連携して監査用途で長期間保存することが推奨です。|
| CloudTrailログファイルの整合性を有効にする | 検証されたログファイルは、セキュリティおよびフォレンシック調査で特に重要です。|
| Amazon CloudWatch Logsとの統合 | CloudWatch Logsを使用すると、CloudTrailによってキャプチャされた特定のイベントに関するアラートを監視および受信できます。|
| AWS Security Hubの使用 | AWS Security Hubを使用して、セキュリティのベストプラクティスに関連するCloudTrailの使用状況をモニタリングします。|

この中で、実プロジェクトでも大切かつ試験によく出るのはログファイルの整合性です。
ログファイルの整合性を有効にしていない場合、監査ログの改ざんが可能になってしまいます。

AWSでインシデントが起きた時、よりどころになるのはCloudTrailログなので、このログが改ざんされてしまうと調査がお手上げになります。
そのため、整合性は必ず有効にしておくことが必要です。

# まとめ
この記事ではCloudTrailに関連する内容を超詳細にまとめました。

- CloudTrailとは
- CloudTrailの仕組み
- CloudTrail for Advance
- CloudTrailのベストプラクティス

次回はAmazon SQSについて超詳細解説します。
Linuxのディストリビューションを確認する方法

## 要　旨
Linuxのディストリビューションを確認する方法について、記述します。
## 実施要領
コマンドは、以下のとおり。
```
$cat /etc/os-release
```
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
## 結　言
今回は、Linuxのディストリビューションを確認する方法について、記述しました。
ERC4337調査スレ (随時更新) | Kiara U  Next-Fintech Lab

##5W1H


---
11 Dec

Goodl Blog etc - 後で整理

https://esp.ethereum.foundation/account-abstraction-grants

https://info.bittrade.co.jp/blog/what-is-erc20-and-erc721/

great!
https://eips.ethereum.org/erc

account abstraction
https://brillion.medium.com/account-abstraction-social-login-feature-d77c87352dba#:~:text=Thanks%20to%20account%20abstraction%2C%20it,implementing%20in%20its%20smart%20wallet.
最強オンライン実行環境3選

####最強オンライン実行環境3選
学校で配られた端末（ChromeBook/iPad)はたいていアプリがインストールできない。
ネット上には実行環境がたくさんあるが、正直使いにくいものが多い。

###1.OnlineGDB
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639515/f1809597-7ef3-0cec-70a9-81dfc6b2e391.png)
「オンライン実行環境」と検索したら多分最初に出てくる
これの良いところは使える言語が豊富
                入力出力の形式がコマンドラインとtextを選べる
※"Beautify"を押したらコードが見にくくなります
                        　勝手に消えることがあります
https://www.onlinegdb.com/

###2.ブラウザで動くC言語実行環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639515/6b2e5190-1a40-13d0-e3ff-64a36f97dc66.png)
これの良いところはシンプルなこと。
                オフラインで動作すること。
webサイトまるごとダウンロードできるサイトがあるから、これをダウンロードして、ローカルで開くことができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639515/f0512a6c-abb7-1fc1-5eb8-525135b61346.png)

https://9cguide.appspot.com/web_picoc_em.html
https://saveweb2zip.com/en

###3.replit
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639515/72f787bb-3c47-56de-816c-6ee99fc1b93a.png)
これの良いところは何と言っても使える言語の多さ
        　　　　見やすさ
            　　htmlでサイトを作ることもできる（学校のフィルタに引っかかったけど）
iPadではあんまり良く動かなかった印象
https://replit.com/~

###終わりに
当たり前だがiPadはキーボードつけといた方がいいし、ChromeBookはマウスがあった方がいい
Aiven for Apache Kafka®のKafkaトピックカタログの紹介

<font color="Grey">*[Introducing the Kafka topic catalog for Aiven for Apache Kafka®](https://aiven.io/blog/introducing-the-kafka-topic-catalog-for-aiven-for-apache-kafka)の翻訳です。*</font>

2023年12月5日

# Aiven for Apache Kafka®のKafkaトピックカタログのご紹介

Aiven for Apache Kafkaの新しいKafkaトピックカタログにより、Kafka環境のトピック中心のビューがAivenコンソールに直接表示されます。

Aiven for Apache Kafka®は、技術チームが本番環境でKafkaを実行する際に通常発生する複雑さを伴うことなく、Apache Kafka®ワークロードを大規模に実行できるようにすることを主な目標として設計されています。Aivenコンソールでの開発者エクスペリエンスを向上させるため、Kafkaトピックカタログを導入し、ユーザーが組織内のサービスやプロジェクト全体でアクセスできるすべてのトピックを表示および消費できるようにしています。


## Aiven for Apache KafkaのKafkaトピックカタログ


Aiven Consoleには、Aiven for Apache Kafkaの全サービスの概要がすでに表示されていますが、サービス間のすべてのトピックを統一的に表示する場所は今のところありません。これは、同じトピックを `development` と `production` のような異なる環境で比較する場合に特に重要です。


新しく導入されたKafkaトピックカタログにより、Aivenのお客様は、異なるKafkaクラスタ間ですべてのデータとトピックを発見することができます。例えば、特定のトピックを探す場合、多くの異なるKafkaサービス（さらには個別のAivenプロジェクト）を経由するのではなく、ユーザーは同じ画面上でアクセス可能なすべてのトピックを素早く閲覧できます。これにより、1枚のガラスからすべてのKafkaトピックを利用できるようになり、現状をわかりやすく完全に把握することができます。


## Kafkaトピックカタログ - メリット


Aiven for Apache Kafkaをご利用のお客様は、Kafkaトピックカタログを使用することができます：


* サービスや環境に関係なく、指定したトピックを一元的に表示できます。
* 異なるサービスや環境間で、同じトピックの設定を簡単に比較できます。
* 異なるサービスや環境間で同じトピックのユーザーと権限を簡単に比較できる


[Apache Kafkaのトピックカタログを使う](https://img.youtube.com/vi/iUTMoU29bac/maxresdefault.jpg)
## 価格と入手方法


Aiven for Apache Kafkaは、AWS、Google Cloud、Microsoft Azureといった主要なハイパースケーラーで、世界100以上のリージョンで利用可能です。


Aiven for Apache Kafkaのプランには、高可用性のために階層をまたいだマルチインスタンスクラスターが付属しています。詳細は価格ページをご覧ください。


Aiven for Kafkaの価格は時間単位で、1時間あたり0.397ドル（月額290ドル）からとなっています。Kafkaトピックカタログは、Aiven for Apache Kafkaの既存および新規のすべてのお客様に追加費用なしでご利用いただけます。
micro:bit v2を使いRust Discoveryの写経をした話

この記事は[micro:bit Advent Calendar 2023 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/microbit)の10日目です。

# 概要
micro:bit v2でRust Discoveryの写経をしました。感想などの共有です。

Rust Discovery

https://docs.rust-embedded.org/discovery/microbit/index.html


# 環境構築
開発環境構築はこちらに記載されています。

Setting up a development environment

https://docs.rust-embedded.org/discovery/microbit/03-setup/index.html


私は次の環境で写経、動作確認しました。

* MacBook 2017 macOS Ventura バージョン13.6
* micro:bit v2


# 写経したところ
Rust Discoveryは所定の章でコードが書かれています。
今のところ、私が写経、動作確認したのはつぎになります。

| 章 | 確認 |
| ---- | ---- |
| 5. LED roulette | ✅ |
| 7. UART | ✅ |
| 8. I2C | ✅ |
| 9. LED compass | |
| 10. Punch-o-meter |  |


# 写経の方針
写経の方針はつぎのようにしました。

## ターゲット
Rust Discoveryはmicro:bit v2かmicro:bit v1で確認できます。
私はmicro:bit v2を持っていたのでmicro:bit v2で進めました。
micro:bit v2かmicro:bit v1でビルドの際に手順が少し違うようです。

### Embed.tomlの編集
Embed.tomlのchipをmicro:bitのハードウェアバージョンにより選択します。
私の確認環境はmicro:bit v2のため、つぎの設定としました。

```rust:Embed.toml
[default.general]
chip = "nrf52833_xxAA" # uncomment this line for micro:bit V2
# chip = "nrf51822_xxAA" # uncomment this line for micro:bit V1

[default.reset]
halt_afterwards = true

[default.rtt]
enabled = false

[default.gdb]
enabled = true
```

参照先：

https://docs.rust-embedded.org/discovery/microbit/05-led-roulette/index.html


### 標準ライブラリのコンパイル済みバージョン（実際には縮小版）のダウンロード
ビルドの前に標準ライブラリのコンパイル済みバージョン（実際には縮小版）のダウンロードが必要とのことです。
ダウンロードする際のコマンドがmicro:bitのハードウェアバージョンにより異なります。

```
# For micro:bit v2
$ rustup target add thumbv7em-none-eabihf

# For micro:bit v1
$ rustup target add thumbv6m-none-eabi
```

参照先：

https://docs.rust-embedded.org/discovery/microbit/05-led-roulette/build-it.html


### ビルド
ビルドのコマンドがmicro:bitのハードウェアバージョンにより異なります。

```
# For micro:bit v2
$ cargo build --features v2 --target thumbv7em-none-eabihf

# For micro:bit v1
$ cargo build --features v1 --target thumbv6m-none-eabi
```

参照先：

https://docs.rust-embedded.org/discovery/microbit/05-led-roulette/build-it.html


### フラッシュ
フラッシュのコマンドがmicro:bitのハードウェアバージョンにより異なります。

```
# For micro:bit v2
$ cargo embed --features v2 --target thumbv7em-none-eabihf

# For micro:bit v1
$ cargo embed --features v1 --target thumbv6m-none-eabi
```

参照先：

https://docs.rust-embedded.org/discovery/microbit/05-led-roulette/flash-it.html


## ディレクトリ構成
写経のやり方は好み、いろいろやり方ははあると思いますが今回私は下図のようにRust Discoveryの各章で書かれているコード毎にディレクトリを作成し写経するようにしました。

![src_tree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171866/c595a82f-0d10-a84d-313b-41e013792e21.png)


Rust Discovery micro:bitのGitHubリポジトリはこちらにあります。

https://github.com/rust-embedded/discovery/tree/master/microbit

srcディレクトリ以下に各章のRust Discoveryの各章のコードが格納されています。
写経する際はこちらのディレクトリを自分の作業用ディレクトリにコピーし、Rust Discoveryの各章で書かれているコードを写経していきました。

こちらは参考までに私の写経用のGitHubリポジトリです。

https://github.com/grace2riku/rust_discovery_microbit_copy


# 感想
Rust Discoveryの記載のとおりに環境構築、動作確認ができました。
もしmicro:bitをお持ちの方でRustに興味のある方は写経してみては如何でしょうか。
温度センサーMCP9701で遊ぶ(固定小数点16,16)


x MCP9701-E/TO 販売コード 103199

目的
温度センサーのテスト


温度係数 19.5mV
中心電圧 400mV(-20.5℃する)

参考

https://qiita.com/caa45040/items/c8004a8d6c1bec774c51

https://qiita.com/caa45040/items/dad34f5ece791e94c085

結果

![o_cop850.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/76919bfa-a8c4-9550-5536-04ca7d9f60b7.jpeg)



プログラム


```c++


//S_SER_9701_O2_031_1

//インクルド
#include <Arduino.h>
#include <HardwareSerial.h>


//定義
//固定小数点　乗算、除算
#define MUL(q,w) ((int)( (((long long)(q)) *  ((long long)(w)))>>16 ))
#define DIV(q,w) ((int)( ( (((long long)(q))<<16) /  ((long long)(w))) ))
//10の割り算 0から1028までは、正しい。主に0から999
#define DIV10(n) ((n*205)>>11)


//初期化
void setup()
{

  delay(3000); //not delete

  //シリアルの初期化
  Serial.setTx(PA2_ALT1);
  Serial.setHalfDuplex();
  Serial.begin(9600);

} //setup


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

  //アナログ値の読み込み
  analogReadResolution(12); //adc 12bit mode
  int s = analogRead(PB7);   // PIN1

  //s=1024;

  //電圧を温度に変換 ex 20.0 -> 200 温度の十倍を出力
  s = MUL( s << 16 , DIV((3300 << 16), (4096 << 16)) ); //電圧を求める
  s = DIV( s , (19 << 16) + 0x8000); //電圧を温度係数19.5mVで割る
  s = s - ((20 << 16) + 0x8000); //-20.5する
  s = MUL(s, 10); //桁をずらす

  //温度の表示
  Serial.print( DIV10(s) );            // 小数点以上
  Serial.print(".");
  Serial.print( s - (DIV10(s) * 10) ); // 小数点以下
  Serial.println();

  //1秒の待ち
  delay(1000);

} //loop




```
VSCodeでcompose.yamlにYAMLファイルに対する設定が効かない問題の対処法

結論だけ知りたい人はここから読んでもOKです。

[何がいけなかったのか](#何がいけなかったのか)

## はじめに

VS Codeでは`settings.json`に言語ごとの設定を書くことができます。

私の場合はデフォルトのフォーマッターを[Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)にして、言語ごとに使用するフォーマッターをそれぞれ上書きするように設定をしています。

YAMLファイルはスペース2個でインデントすることが一般的なので、YAMLファイルを編集するときはインデント(`tabSize`)をスペース2個にして、[Red HatのYAML拡張](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)をフォーマッターとして指定しています。

```json:settings.json
{
  ...
  "[yaml]": {
    "editor.defaultFormatter": "redhat.vscode-yaml",
    "editor.insertSpaces": true,
    "editor.tabSize": 2,
    "editor.autoIndent": "advanced",
    "editor.formatOnSave": true
  },
  "yaml.format.enable": true,
  ...
}
```

このように設定するとYAMLファイルを編集するときはPrettierでのフォーマットではなく、上記の設定が効きます。

## compose.yamlにYAMLの設定が効かない

しかし、`compose.yaml`を編集しようとすると以下のようにスペース4つでフォーマットされてしまう現象が起きました...(色々設定変更を試しましたが上手くいかずで、結局それからしばらくの間YAMLファイルを編集するときはVimで編集してました)

![format.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658776/364a8a00-8121-a145-d21c-4b64dd160dc1.gif)

## 何がいけなかったのか

結論

言語モードがYAMLではなく、Composeとなっていました。

![compose.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658776/ef1e066e-e4f2-1b90-dcfd-30179c55bfd5.png)

(どうりでYAMLに対する設定が効かないわけだ...)

## 対応策

以下のように`settings.json`にComposeファイルを編集時の設定を追加しました。

```json:settings.json
{
  ...
  "[dockercompose]": {
    "editor.defaultFormatter": "redhat.vscode-yaml",
    "editor.insertSpaces": true,
    "editor.tabSize": 2,
    "editor.autoIndent": "advanced",
    "editor.quickSuggestions": {
      "other": true,
      "comments": false,
      "strings": true
    }
  },
  ...
}
```
第二世代　バッテリー回路の考察（Gas Gauge ICの部分）

「aibo ers-11x/210で遊ぶ Advent Calendar 2023」の16日目です。

ERS-210のバッテリーの保護回路は大きく三つに分けられるようでした。
- 保護の部分
- Gas gage ICによる監視部分
- トラップ部分

今回はGas gage ICによる監視部分の部分についてまとめました。

Loïc POLLIERさんのレポジトリbattmonを参考に、一から勉強したメモをまとめました。
https://github.com/lpollier/battmon/tree/master

:::note alert
警告
この記事について作者はいかなる責任も負いません。
バッテリーの分解、改造は非常に危険な行為です。
:::

:::note
業務外の個人的な検討活動です。
:::

#### 回路図
Loïc POLLIERさんのレポジトリbattmonに詳しく述べられていました。

赤線で示した囲みは加筆しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/ee28e10d-93fe-b7bd-978d-507a52e8cc7e.png)

この部分にはIC用の電源となるステップダウンレギュレータ、EEPROM,そしてgas gage ICがあります。
TLV70433DBVR
https://www.mouser.jp/c/semiconductors/power-management-ics/voltage-regulators-voltage-controllers/ldo-voltage-regulators/?m=Texas%20Instruments&series=TLV70433

24LC01B
https://ww1.microchip.com/downloads/en/devicedoc/21711j.pdf

BQ2040
https://www.ti.com/lit/ds/symlink/bq2040.pdf?ts=1698077054205

このバッテリーがトラップされていなければ、ステップダウンレギュレータにバッテリーセルのBAT+の電圧が供給され、3.3Vの電圧が生成されます。その電圧はBQ2040へつながります。
EEPROMへの電源はBQ2040が供給していますが、EEPROMを呼び出すときだけ供給しているようで、TP202にテスタを当てても常時は3.3Vが測定されませんでした。
（https://frr.g6.cz/battery.html#downloads）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/c493e6c6-7077-78e1-17a5-9bac8c5bd95e.png)

BQ2040はEEPROMの内容とバッテリーの使用時間の計測など状況を監視し、端子のSMBCとSMBDを通してaibo本体と情報をやり取りするようです。SMBCとSMBDはI2Cによって概ね対応できるようですので後日の考察とします。

BQ2040の仕様書を読むと、保護回路にはセンス抵抗という電流測定用の抵抗が使われるようなのですが、この回路図からは特定できまず今回は保留しました。

EEPROMはバッテリーセルの容量や充電回数などが記録されています。
バッテリーセルを交換した後にBQ2040がキャリブレーションする際にそれらの情報が使用されるので、SO-8用のテストクランプなどを使って情報を書き換える必要があるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/e3a44398-0cf3-bc29-b6f0-ba74ebf7853f.png)

#### 警告をもう一度
今回のAdvent Calenderでバッテリーセルの交換について考察しますが、非常に危険ですので知識と教養を深める目的で調べたことをまとめました。
十分な安全対策を講じなければ、実行することはお勧めできません。
重要なことなので、二回書きます。

:::note alert
警告
この記事について作者はいかなる責任も負いません。
バッテリーの分解、改造は非常に危険な行為です。
:::

#### 備考
上記に示した図面はLoïc POLLIERさんが作成したものです。
Copyright (c) 2020-2022 Loïc POLLIER
Released under the MIT license
https://github.com/lpollier/battmon/blob/master/LICENSE
Logstashを一番シンプルに試す

# やりたいこと

- Logstashを設定し、外部のサーバからのログを受け付けるようにする

# 検証環境

- VagrantでホスティングしたUbuntu Server 22.04 LTS

# インストール

- 基本的に[公式ドキュメント](https://www.elastic.co/guide/en/logstash/current/installing-logstash.html#_apt)の手順に従っている

```bash
$ sudo apt update
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
$ sudo apt install apt-transport-https -y
$ echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
$ sudo apt update
$ sudo apt install logstash -y
```

# 設定する

- リモートからHTTP(TCPポート8080番)でJSON形式のログを受け取るための設定
- 受け取ったログを標準出力に出力する設定

```bash
$ vim /etc/logstash/conf.d/logstash.conf
input {
  http {
    port => 8080
    codec => json
  }
}

output {
  stdout {}
}
```

- UFWを有効化する設定
- TCPポート8080番への外部からのアクセスを許可する設定

```bash
$ sudo ufw status
Status: inactive

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw allow 8080/tcp
Rule added
Rule added (v6)

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
8080/tcp                   ALLOW       Anywhere                  
8080/tcp (v6)              ALLOW       Anywhere (v6)
```

# 起動する

```bash
$ sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf 
```

# 動作確認

- 擬似的にログを送信するコードをPythonで作成する

```bash
$ pip install requests
```

```py:client.py
import requests

logstash_host = "192.168.56.10"
logstash_port = 8080
data = {"message": "hello, world!"}
headers = {"Content-Type": "application/json"}

requests.post(f"http://{logstash_host}:{logstash_port}", json=data, headers=headers)
```

```bash
$ python client.py
```

- 上記のコードを実行すると、Fluentdの標準出力にログが流れてくることが確認できる

```bash
$ sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf
...
省略
...
{
          "host" => {
        "ip" => "192.168.56.1"
    },
      "@version" => "1",
    "@timestamp" => 2023-12-10T21:20:06.900752387Z,
           "url" => {
          "path" => "/",
        "domain" => "192.168.56.10",
          "port" => 8080
    },
          "http" => {
         "method" => "POST",
        "request" => {
                 "body" => {
                "bytes" => "28"
            },
            "mime_type" => "application/json"
        },
        "version" => "HTTP/1.1"
    },
       "message" => "hello, world!",
         "event" => {
        "original" => "{\"message\": \"hello, world!\"}"
    },
    "user_agent" => {
        "original" => "python-requests/2.31.0"
    }
}
 ```
ISO 25040 評価プロセスの紹介

この記事は [ISO25030 品質要求の枠組み](https://qiita.com/mmake/items/57900605a6d9f2cec3bc) の続きの記事になります。

## 前回までのおさらい

ISO 25000 は**システムとソフトウェアの品質**に焦点を当てた国際標準です。内容が多岐に渡るため ISO 25000, 25010, 25020, 25030... と複数の文書に分かれています。まとめて **SQuaRE （スクウェア）シリーズ**と呼びます。日本では [JIS X 25000 シリーズ](https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+25000%3A2017)として規格化されています。

ISO 25010 ではソフトウェアの品質を、**利用時の品質モデル**と**製品の品質モデル**に分け、さらに**13 個の品質特性**に分類しています。

![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/a72fdcf0-ea30-3762-04a8-ab9316f5bcd6.png)

[前々回](https://qiita.com/mmake/items/ca97c616af0762a5164d)は ChatGPT を使って品質特性に基づく具体的な評価項目の例を紹介しました。

[前回](https://qiita.com/mmake/items/57900605a6d9f2cec3bc)は ISO 25030 の利害関係者の品質要求をソフトウェア製品の品質モデルへ変換する手順を紹介しました。

![128.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/9179a3f3-c710-1de3-b8fd-de02f325e6e7.png)

ここでは３年目以降のプログラマ、QA エンジニア向けに ISO 25040 の概要を紹介します。

## ISO 25040 評価プロセス

ISO 25040 は評価プロセスを規定しています。評価全体のプロセスを以下に図示します。図は簡略化のため作業間の反復活動を省略していることに注意してください。

![116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/701ae947-1e76-74aa-94fb-4ddc245cafe9.png)

## ポイント

- 評価プロセスにおいて、意思決定者者、開発者，独立した評価者は異なる役割をもちます。
  - 意思決定者：意思決定者は、利用時の品質要求事項及びソフトウェア品質要求事項を定め、要求事項を明示します。
  - 開発者：開発者は、開発したソフトウェア製品の品質を確実にするために、ソフトウェア中間製品又は最終製品を評価することができます。
  - 独立した評価者：ソフトウェア製品の品質を確実にするために、ソフトウェア中間製品又は最終製品を評価することができます。複数の関係者が評価結果を理解し、容認し、信用する必要がある場合、ソフトウェア製品評価の実施のための要求事項及び推奨事項を提供します。 
- 評価者と意思決定者は，評価結果の共同審査を実施しなければなりません。

- 品質評価を実施するために評価者の組織に適切なツール及び技法を含んだインフラストラクチャを持つ必要があります。

- 評価に携わる要員は必要なスキル及び教育訓練の実績を保持する必要があります。 

- 評価プロセスの実施では、次の柔軟性をもつことが非常に重要です。
  - ソフトウェアに必須の信頼度を確立する実用的な手段を提供する。 
  - 不必要な作業又は付加価値の付かない作業を回避する。

## 評価水準について

ISO 25040 では、安全性、経済、セキュリティ、環境の品質特性の水準を以下のように提案しています。

### 安全性側面に対する評価水準

|評価水準|重大性|
|---|---|
|水準A|多くの人の死亡|
|水準B|人命への危険な存在|
|水準C|資産への損害，人への損傷の危険な兆候|
|水準D|資産への小さな損害，人へのリスクなし|

### 経済的側面に対する評価水準

|評価水準|重大性|
|---|---|
|水準A|財務破綻（企業が存続しない。）|
|水準B|大きな経済面の損失（企業が存続の危機にさらされる。）|
|水準C|かなりの経済面の損失（企業が影響を受ける。）|
|水準D|無視できる経済面の損失|

### セキュリティ側面に対する評価水準

|評価水準|重大性|
|---|---|
|水準A|戦略的なデータ及びサービスの防御|
|水準B|影響が重大なデータ及びサービスの防御|
|水準C|エラーリスクに対する防御|
|水準D|識別された特定のリスクがない|

### 環境関連側面に対する評価水準
		
|評価水準|重大性|
|---|---|
|水準A|回復不可能な環境被害|
|水準B|回復可能な環境被害|
|水準C|局所の被害|
|水準D|環境リスクがない|

## 評価技法について

ISO 25040 では、品質特性の評価技法として以下の項目を挙げています。各技法は、要求水準の低い方から高い方に並んでいます。

- 機能性
  - 機能試験又はブラックボックス試験
  - チェックリストで示された開発文書の検査
  - 試験網羅性基準による単体試験
- 信頼性
  - 特定のプログラム言語機能の利用の検証
  - ソフトウェア設計及びコードの耐故障構造の分析
  - 信頼度成長モデル
- 使用性
  - ユーザーインタフェース及び文書の検査 
  - インタフェース標準（規格）への適合の検証
  - 実際の利用者による試用実験の実施
- 効率性
  - 時間測定の実施
  - ベンチマーク試験
  - アルゴリズムの複雑さを決めるための設計の分析
- 保守性
  - チェックリストで示された開発文書の検査
  - コードレビュー及びプログラム規則の検証
  - 開発文書の要素間の追跡可能性の分析
- 移植性
  - ソフトウェア設置手順の分析
  - プログラム規則の検証
  - ソフトウェア設計の分析

## まとめ

この記事ではソフトウェア品質の測定作業のプロセスについて、ISO 25040 の内容を紹介しました。
プログラマとQAエンジニア、または、意思決定者とQAエンジニアが会話するきっかけになれば幸いです。
ご覧いただきありがとうございました。

## 参考文献
- ICT応用S&S製品の品質不良のリスクとSQuaREシリーズ国際標準(及び翻訳JIS)
https://jasst.jp/symposium/jasst17tokyo/pdf/A1.pdf
- 日本産業標準調査会（ユーザアカウントを登録すれば、無料で閲覧できます）
https://www.jisc.go.jp/
JIS X 25030:2021 品質要求の枠組み
JIS X 25040:2014 評価プロセス
テックブログ内企画OneTechの成果と今後について

### はじめに
Softbankのテックブログで記事を書いたので紹介します！

![onetechサムネイル画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980561/26437737-ce92-cb83-866f-2ac4c93de9e5.png)


本記事では、私が立ち上げた「OneTech」というテックブログ内企画について、継続的な連載を一旦終了させることにしました。

【[One Tech](https://www.softbank.jp/biz/blog/cloud-technology/category/?tags=blog-cloud-technology__keyword__one-tech)】とは、様々な部署・職種のエンジニアが世の中にある様々なIT関連のキーワードや流行の１つに着目し、独自あるいはその職種ならではの視点からIT関連の技術用語やトレンドについて執筆していく連載企画です。

そこで、これまでの内容を総括としてまとめておきたいとおもいます。


### この記事について
- この記事は[One Tech](https://www.softbank.jp/biz/blog/cloud-technology/category/?tags=blog-cloud-technology__keyword__one-tech)というテックブログ内企画の総括にあたる記事になりますので、事前にOneTechの記事を何本か読んでいただくことを推奨いたします。
- [One Tech](https://www.softbank.jp/biz/blog/cloud-technology/category/?tags=blog-cloud-technology__keyword__one-tech)ではいろんな分野の記事を扱っていますので、興味関心のある分野のブログ記事もあるかも？しれません！


ぜひ読んでみてください！！

https://www.softbank.jp/biz/blog/cloud-technology/articles/202312/onetech-summary/
【2023年4月改定】情報セキュリティマネジメント試験の改訂内容をまとめてみた

### はじめに
Softbankのテックブログで記事を書いたので紹介します！

![クラウドテクノロジーブログ画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980561/1ea7a59d-cbde-9e69-4603-516dfb5fe065.png)


以前、2023年4月から基本情報技術者試験が大幅改訂される[記事](https://www.softbank.jp/biz/blog/cloud-technology/articles/202208/jitec/)を執筆しました。
本記事では、情報セキュリティマネジメント試験の2023年4月からの改定内容をまとめて解説します。

情報セキュリティマネジメント試験も、同じく2023年4月から「試験時間・問題数の変更」「出題範囲の改訂」など、さまざまな改訂が実施され、特に「通年試験化」になることが大きな変更点として取り上げられています。

そこで、今回は情報セキュリティマネジメント試験の変更点をまとめて、これから情報セキュリティマネジメント試験がどこに向かうのか？を考察します。そして、これから受験をされる皆さんが抱く、「勉強する内容は変わるのか？」が「受験日程はどう変わるのか」などの疑問に答えていこうと思います。


### この記事について
- 情報セキュリティマネジメント試験をこれから受験する方向けの記事です。
- すでに勉強を初めている人は、必ずチェックしてください。

ぜひ読んでみてください！！

https://www.softbank.jp/biz/blog/cloud-technology/articles/202212/jitec-sg/
【One Tech #01】サイバネティック・アバター基盤の構築と関連技術の動向について解説してみた！

### はじめに
Softbankのテックブログで記事を書いたので紹介します！

![onetechサムネイル画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980561/26437737-ce92-cb83-866f-2ac4c93de9e5.png)


【[One Tech](https://www.softbank.jp/biz/blog/cloud-technology/category/?tags=blog-cloud-technology__keyword__one-tech)】とは、様々な部署・職種のエンジニアが世の中にある様々なIT関連のキーワードや流行の１つに着目し、独自あるいはその職種ならではの視点からIT関連の技術用語やトレンドについて執筆していく連載企画です。

今回は私、小野が【サイバネティック・アバター】というキーワードに着目し、サイバネティック・アバターについての説明をしつつ、関連する情報の提示することで実現が期待される未来社会について解説することにしました。


### この記事について
- この記事はサイバネティック・アバターについてご存じない方向けに、興味を持って貰えるように記事を書いています。
- 新たな技術革新を目指すサイバネティック・アバターの研究に関する概要を把握することができます。


ぜひ読んでみてください！！

https://www.softbank.jp/biz/blog/cloud-technology/articles/202210/cybernetic-avatar/
第二世代　バッテリー 回路の考察 （保護の部分）

「aibo ers-11x/210で遊ぶ Advent Calendar 2023」の15日目です。

aiboのERS-210をメルカリから入手しましたが、やはりバッテリーは放電しきっており機能しない状態でした。

ERS-210のバッテリーは端子数が6つあり、11xのように単純にセルを部分を入れ替えるだけでは動きませんでした。

Loïc POLLIERさんのレポジトリbattmonを参考に、一から勉強したメモをまとめました。
https://github.com/lpollier/battmon/tree/master

保護回路は大きく三つに分けられるようでした。
- 保護の部分
- Gas gageICによる監視部分
- トラップ部分

今回は保護の部分についてまとめました。

:::note alert
警告
この記事について作者はいかなる責任も負いません。
バッテリーの分解、改造は非常に危険な行為です。
:::

:::note
業務外の個人的な検討活動です。
:::

#### 回路図
Loïc POLLIERさんのレポジトリbattmonに詳しく述べられていました。

赤線で示した囲みは加筆しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/20a39d65-cbf9-673d-2111-5b7d10ed7b1f.png)

この部分にはバッテリーの保護ICであるS8232やMM1302Fがあります。
S8232
https://www.mouser.com/datasheet/2/360/S8232_E-18368.pdf

MM1302
https://product.minebeamitsumi.com/product/category/ics/battery/protection/parts/download/__icsFiles/afieldfile/2023/02/15/33_download_01_1.pdf

それぞれのICがバッテリーの異常を判断した場合、Q2とQ3のMOSFETが非導通になってセルのBAT-を端子6から切断したり、Q8のMOSFETが導通してF1を切断してセルのBAT+を端子1から切断したりする（トラップの部分）ようです。

したがって、BAT+をBAT-を新しいセルや外部電源の+と-に入れ替えただけでは機能しないようです。

また、F1が切断される状態になるとF1素子が破壊されて後に戻れなくなります。レポジトリbattmonにはバッテリーセルを交換するときのトラップ回避作業方法が示してありますが、後日の考察とします。

#### 警告をもう一度
今回のAdvent Calenderでバッテリーセルの交換について考察しますが、非常に危険ですので知識と教養を深める目的で調べたことをまとめました。
十分な安全対策を講じなければ、実行することはお勧めできません。
重要なことなので、二回書きます。

:::note alert
警告
この記事について作者はいかなる責任も負いません。
バッテリーの分解、改造は非常に危険な行為です。
:::

#### 備考
上記に示した図面はLoïc POLLIERさんが作成したものです。
Copyright (c) 2020-2022 Loïc POLLIER
Released under the MIT license
https://github.com/lpollier/battmon/blob/master/LICENSE
JSON ファイルについての備忘録



## はじめに
JSON ファイルについてのの備忘録です💁
初心者です😅
間違えてる部分多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇

今回、AWSを構築した際に、jsonに対しての知識不足を感じたのでまとめました。

## 🦁 結論 🦁

:::note info
押さえておくべき点
* JSONは、軽量なデータ交換フォーマット。人間にも読みやすく、機械にも解析しやすい構造
* 多くのプログラミング言語で容易に扱えるため、ウェブアプリケーションでのデータ交換に広く使用されてる
* JSONはテキストベースで、JavaScript以外の言語でも簡単に読み書きできる
* JSONは、名前と値のペア（オブジェクト）、または値の順序付きリスト（配列）で構成
:::

:::note warn
タイミング
* クライアントとサーバー間でデータを送受信する際によく使用する
* ウェブアプリケーションの設定情報を保存する時に使う
* モバイルアプリがサーバーと通信する際、JSONは軽量で効率的なデータフォーマットとしてよく利用される
* ログファイル、異なるシステム間、フロントエンドとバックエンドのデータ通信などでよく利用する
:::

:::note alert
注意点
* JSONはUTF-8エンコーディングを使用することが推奨
* JSONは数値、文字列、ブーリアン、配列、オブジェクト、nullをサポートされてるが、日付や複雑なデータ型は直接サポートしてない
* 大規模なJSONデータの解析や生成は、パフォーマンスに影響を与える可能性がある
:::

## サーバーとのやり取りの例
サーバーへJanコードデータでリクエストを送信
サーバーから「商品名」「価格」をレスポンスで返してくれる
この流れをまとめてます。
（AWSのlambdaで作成）

### データをJSONに置き換える

#### json.dumps(jan_code)
この関数はPythonの辞書をJSON形式の文字列に変換。
ここでは、jan_code という辞書をJSON形式の文字列に変換

```python:sample.py
import json

# 商品名と価格の辞書データ
jan_code = {
    "jan_code": 1234567891234,
}

# 辞書データをJSON文字列に変換
jan_code_json = json.dumps(jan_code)
```

### 置き換えたデータを元にリクエストする
#### requests.post(api_url, json=jan_code_json)
requests.post は、指定されたURL（api_url）に対してPOSTリクエストを送信するためのメソッド。

```python:sample.py
api_url = 'https://example.com/api'
response = requests.post(api_url, json=jan_code_json)
```

### 受け取るレスポンスを定義する（JSONを解析する）
#### response.json()
このメソッドはサーバーから受け取ったレスポンスをJSON形式で解析し、Pythonの辞書に変換。
```python:sample.py
if response.status_code == 200:
    response_data = response.json()
```

### 受け取ったJSONファイルデータを変換する
#### json.loads(output_dict)
json.loads 関数はJSON形式の文字列をPythonの辞書に変換。

```python:sample.py
    if response_data.get('status') == 'SUCCEEDED':
        output_dict = response_data.get('output')
        output_data = json.loads(output_dict)
        body_dict = output_data.get('body')

        lambda_product_name = body_dict.get('lambda_product_name')
        lambda_price = body_dict.get('lambda_price')

        # 辞書に追加
        goods_status_details = {}  # 既存の辞書または新しい辞書
        goods_status_details[jan_code["jan_code"]] = (lambda_product_name, lambda_price)

        print(f"処理成功: {lambda_product_name}, {lambda_price}")
```
【2023年4月改定】基本情報技術者試験の改訂内容をまとめてみた

### はじめに
Softbankのテックブログで記事を書いたので紹介します！

![クラウドテクノロジーブログ画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980561/1ea7a59d-cbde-9e69-4603-516dfb5fe065.png)


2020年から改訂された基本情報技術者試験ですが、また新たに2023年4月から「試験時間・問題数の変更」「出題範囲の改訂」など、さまざまな改訂が実施され、特に「通年試験化」になることが大きな変更点として取り上げられています。

そこで、今回は基本情報技術者試験の変更点をまとめて、これから基本情報技術者試験がどこに向かうのか？を考察します。そして、これから受験をされる皆さんが抱く、「勉強する内容は変わるのか？」が「受験日程はどう変わるのか」などの疑問に答えていこうと思います。


### この記事について
- 基本情報技術者試験をこれから受験する方向けの記事です
- すでに勉強を初めている人は、必ずチェックしてください


ぜひ読んでみてください！！

https://www.softbank.jp/biz/blog/cloud-technology/articles/202208/jitec/
AHC貪欲解法でも実行時間の確認をしよう！

AHC027に参加して暫定順位と最終順位が大きく離れてしまったので他に犠牲者がでないように記録します。

# やった事
- 貪欲解法を複数生成し最適を選び出す
- 貪欲解法単一での生成時間<<実行時間制限
- 複数の個数決めは暫定テスト、自分が決めたテストが通るかどうか

# 結果
最終順位は暫定順位に比べ40位くらい下がりました。

# 調査
ここまで下がると思ってなかったのでシステムテストの公表データseedで実行していった所...

## TLEしてるテストが複数存在してる

### システムテスト個数>>暫定テスト個数

この事態をやらかした理由は明確で

自分の決めたテストより計算時間がかかるようなテストが存在する警戒を怠ってしまいました。

# 対策
### 貪欲解法でも一回生成する毎に実行時間を確認し、制限時間手前で生成をやめよう！！

TLEするより正の点数を取れる事が順位が伸びる事につながるので、しっかりとTLEする前に生成、実行を終わらせましょう

- C++: time.h
- Python: time

など確認できるライブラリを使う事が重要

# まとめ
- 貪欲解法でも複数生成する時はTLEする可能性を考慮する
- 生成を途中で止めるには、内部にて実行時間を確認する
    - C++: time.h
    - Python: time