OmniAICreator/Qiita-1.07M huggingface dataset:
【JavaScript、TypeScript】未入力チェックで0を入力しているのにfalseになるお話

# はじめに
JavaScript、TypeScriptにおいて0がfalseとして判定されること自体は知っていましたが、
空文字も含めるといろいろとややこしかったのでまとめてみます。
間違い等あったらご指摘いただけるとありがたいです。

### 参考にさせていただいた記事

https://qiita.com/_masa_u/items/4633519d6642098cd8fe

# 0はfalseと等価である
JavaScript(TypeScript)において0はfalsyな値であると定義されています。
https://developer.mozilla.org/ja/docs/Glossary/Falsy
> 偽値 (falsy または falsey) な値とは、論理型コンテキストに現れたときに偽とみなされる値です。

そのため以下のような場合はfalseとなります。
```javascript:
if(0)
if("")
```

これを知らずに`if(value)`で未入力チェックなどをしていると、入力しているのにエラーが発生するぞ！という状況になってしまいます。
こちらに関しては参考記事を見ていただければと思います。

# 0は許可するけど空文字ははじきたい場合
汎用的な未入力チェックなどで空文字もはじきたい場合、`if(value == null)`や`if(value == undefined)`ではfalseとなります。
条件を追加する必要がありますが、この場合は少しややこしくなります。
単純に`if(value == null || value == "")`にするとまた0がはじかれるようになってしまいます。
空文字`""`は等価演算子`==`で比較した場合0と等価になります。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Equality
> オペランドの型が異なる場合は、比較前に同じ型に変換を試みます。
数値と文字列を比較する場合、文字列を数値に変換しようとします。

そして`Number("")`は0が返却されると定義されています。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number
 > 空文字列またはホワイトスペースのみの文字列は 0 に変換されます。

**具体的な変換プロセス**
`"" == 0`
↓ （空文字列を数値に変換）
`Number("") == 0`
↓ （Number("")は0を返す）
`0 == 0`

このことから、等価演算子でははじかれてしまうため厳密等価演算子`===`を使用する必要があります。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality
> 厳密等価演算子 (===) は、二つのオペランドが等しいことを検査し、論理値で結果を返します。等価演算子とは異なり、厳密等価演算子はオペランドの型が異なる場合、常に異なるものと判断します。

**サンプルコード**
```javascript:javascript
function test(value){
    return value == null || value ===""
}    

console.log(test(0))
console.log(test(""))
console.log(test(null))
console.log(test(undefined))
```
**結果**
```
false
true
true
true
```

# TypeScriptで気を付けなくてはいけないこと
TypeScriptで厳密等価演算子を使用する場合はJavaScriptとは違い型を正確に推論します。
そのため`0 === ""`はエラーが発生します。
どうしたらええんやという話ですが、関数を使用して引数として値を渡すと暗黙的にany型となるためエラーが発生しなくなります。
```typescript:typscript
function test(value){
    return value == null || value === ""
}

console.log(test(0))
console.log(test(""))
console.log(test(null))
console.log(test(undefined))
```
ただし、anyの使用はできる限り避けたほうが良いです。
型を明示的にした場合は以下のようになります。
```typescript:typescript
function test(value: unknown): boolean {
  return value == null || value === "";
}

console.log(test(0))
console.log(test(""))
console.log(test(null))
console.log(test(undefined))
```
もっといいやり方がある場合は教えていただきたいです。


# まとめ
0がfalseなだけであると簡単ですが、空文字やTypScriptの型のあたりが入ってくると少しややこしくなるなと思いました(自分も一回ハマりました)
何と何を比較するとtrueになるのか一覧にしておきます。

```
等価演算子
0 == "":true
0 == null:false
0 == undefined:false
"" == null:false
"" == undefined:false
null == undefined:true
厳密等価演算子
0 === "":false
0 === null:false
0 === undefined:false
"" === null:false
"" === undefined:false
null === undefined:false
```
Google Play Games (ベータ版)™に対応しているアプリ以外をインストールする力技

# ボカコレをWindowsでも使いたい!
そう思いました。OK?
![](https://storage.googleapis.com/zenn-user-upload/fe0401f1f024-20240924.gif)

え?なに?ニコニコ動画で聞けばいいって?
$$だまれ小僧$$
ノンストップだったりサビメドレーはボカコレにしかない強みﾅﾉﾃﾞｽ!

でもウチはすでにアークナイツやるためにGoogle謹製のエミュレーター使ってんだけどぉ、ゲームしかも特別に対応したアプリじゃないと非対応って言われるんだよね。ガチ萎えピ

ボカコレだけのために別のエミュレーター入れるのは癪だしストレージ容量の無駄だし~~タカキも頑張ってたし~~やってやろうじゃねえかこのやろーってことで
## 先駆者
https://t2y87.hateblo.jp/entry/2024/07/13/015217
この記事の内容としては上記の記事のリベイクです。自分の忘備録的な感じなんでオリジナリティはない。もちろんボカコレも学マスも$\mathbb{X} - Super Elon Musk Okanekaisyuu App$のAndroid版もこの方法で入れることができるんじゃないですかね。
## 以下スクショもっかい撮るのめんどいからテキストのみの名無し
1. [`Google Play Games (ベータ版)`](https://play.google.com/googleplaygames)(以下Play Games)と[`Google Play Games Developer Emulator`](https://developer.android.com/games/playgames/emulator)(以下Play Games Dev)を入れる
2. 入れたいAndroidアプリのapkを入手
        <details><summary>どうでもいいこと</summary>
            Google Playに登録されてるapkの入手ってどれ使うのが正解なんですかね
            YouTubeの動画のダウンロードみたいにダウンローダーが乱立してるし規約的にもグレーな感じがする
        </details>
4. Play Games Devを起動 ※初回起動時Googleアカウントでログイン
5. Play Games Devのインストール場所(大抵は`%ProgramFiles%\Google\Play Games Developer Emulator\`)以下`.\current\emulator`にてオキニのターミナルでも起動したらどうどすか
6. `adb.exe`を使って2.で入手したapkファイルをインスコ (なんかうまくいかないなと思ったらapkの入手元を変えてみること(1敗))
7. Play Games Dev のホーム画面で下からドラッグ! アプリ一覧に目的のアプリを確認! ☆海軍の支援を要請する!☆
        <details><summary>Tip: ブラウザによるログインが必要でPlay Games非対応なアプリはPlay Gamesに移す前にログインしておくといいぞ(1敗)</summary>
            ネイティブ側のログインフォームが出るのは良いがPlay Games側に戻ってくれないからな!
            ネイティブ側のブラウザのURLコピー! Play Games DevのChromeにペースト! ここ力技ポイントな
        </details>
8. `%LocalAppData%\Google\Play Games Developer Emulator\userdata_*ランダム文字列*\avd`の内容を`%LocalAppData%\Google\Play Games\userdata_*ランダム文字列*\avd`にコピー。いや、イメージデータだからコピーだと容量が足りない警告が出るな。これが終わったらPlay Games Devには死んでもらうから移動でいいな、うん、そうしよう。
9. Play Gamesのエミュレーター(`%ProgramFiles%\Google\Play Games\current\emulator`)をPlay Games Devのエミュレーターに置き換え (効果があるかは私にも分からん バージョン違いとかあんじゃね、知らんけど)
10. Play Gamesを起動! Enjoy!
    *音楽は鳴り続ける! IT'S JOIN　届けたい　胸の鼓動*
11. Play Games Devをお好みでアンインストール
    *アンインストール この星の無数の塵のひとつだと 今の僕には理解できない*
## あとがき
Windowsでボカコレを使いたいだけなのに
変なこだわりのせいで
ネットの海を2.5時間泳ぎ続け
StackOverflowを検索しまくり
Googleのドキュメントの質の低さにあえぎ
なんかヤバそうなGitHubのソースコードに答えを求め
最終的に個人のブログに助けられる

アフィブログよりこういった有用なブログを上位に出すべきだぞGoogle

# ドワンゴォ!ボカコレWindows公式版をいますぐ出せぇ!
pyenvでPython3をインストールする方法

今回はMacBookにpyenvでPython3をインストールする方法について紹介します。

使用したMacBookのバージョンはこちらです。↓
MacBook Pro 13, 2019 - macOS Sonoma 14.6.1

MacBookには標準でPythonがインストールされています。ですが、今後Pythonでの開発を進めていく中で、異なるバージョンのPythonを使用したくなったり、複数のバージョンを用いる必要がでてくることを想定し、pyenvを使用したインストール方法を選択します。

pyenv（パイエンブ）とは、簡単に言えば「複数のバージョンのPythonを簡単に管理できるツール」です。

##### 手順は以下の通りです。↓
1. ターミナルを起動する
1. Homebrewをインストールする
1. pyenvをインストールする
1. Pythonをインストールする

### 1 ターミナルを起動する
これからの作業は全てこのターミナル上で行います。

### 2 Homebrewをインストールする
pyenvをインストールするためには「Homebrew」（ホームブリュー）というツールを用意する必要があります。

以下のバージョン確認コマンドを入力し「zsh: command not found: brew」と表示されたらHomebrewがまだインストールされていないということなので、インストール用のコマンドを実行します。
※Homebrewを使うにはCommand line tools for Xcodeが必要になりますので、Xcodeをインストールしておきましょう。「xcode-select --install」←こちらのコマンドでインストールできます。

・バージョン確認コマンド
```
brew -v
```
・インストール用コマンド
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
インストールが終了した後もう一度バージョン確認コマンドを入力しましょう。以下のようになればOKです。
※数字はバージョンによって異なります
```
Homebrew 4.3.24
```

### 3 pyenvをインストールする
手順2と同じように、以下のバージョン確認コマンドを入力し「zsh: command not found: pyenv」と表示されたらpyenvがまだインストールされていないということなので、インストール用のコマンドを実行します。

・バージョン確認コマンド
```
pyenv -v
```
・インストール用コマンド
```
brew install pyenv
```
インストールが終了した後もう一度バージョン確認コマンドを入力しましょう。以下のようになればOKです。
※数字はバージョンによって異なります
```
pyenv 2.4.13
```
次の手順でpyenvを使用してPythonをインストールしますが、その前にインストールしたpyenvの設定をしておきます。
このコマンドでpyenvの初期化の設定を.zshrcファイルに書き込み、その設定を反映させることができます。
以下のコマンドを入力します。↓
```
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
```
```
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
```
```
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
```
```
source ~/.zshrc
```

### 4 Pythonをインストールする
以下のコマンドでPythonのバージョンを指定し、インストールすることができます。↓
※インストールできるバージョンは「pyenv install --list」コマンドで確認できます。今回はVer3.12.6をインストールします。
```
pyenv install 3.12.6
```
インストールが完了したら以下のコマンドで確認します。↓
```
pyenv versions
```
↓と出力されればOKです。
```
* system (set by /Users/ユーザ名/.pyenv/version)
  3.12.6
```
最後はこのインストールしたPythonを使用できるように設定していきます。
以下のコマンドを入力します。↓
```
pyenv global 3.12.6
```
ここまでくればあなたのMacBookでもPythonが使えるようになっているでしょう。

最後に、便利なコマンドを紹介しておきます。
↓以下のコマンドはPythonがどこにあるのかを教えてくれます。
```
which python
```
```
which python3
```
This distribution is not configured to allow the HTTP request method that was used for this request. 

AWS上で、WordPressは以下のような構成で構築されています。

```
User Client <--> ELB <--> Cloudfront <--> EC2 <--> Wordpress
```

WordPressのトップ画面は問題なく表示できましたが、ログイン時に以下のエラーが発生してしまいました。

```
403 ERROR
The request could not be satisfied.
This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
```

エラーの原因はいくつか考えられますが、今回はHTTPメソッドのPOSTが許可されていなかったことが問題でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155256/c9968eca-606f-1de4-4a63-0022cb76dab5.png)

`⇓` `GET, HEAD` ⇒ `GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155256/c7eb7da3-eb13-630a-456b-e6e7e7a9449c.png)


### まとめ

WordPressのログインエラーに関連するCloudFrontの403エラーは、主にHTTPメソッド制限に起因しています。CloudFrontのビヘイビアやキャッシュ設定を確認し、POSTメソッドを許可することで、問題を解消できるでしょう。
自己紹介

# 自己紹介

初qiita投稿です。
軽く自己紹介させていただきます。

・工業高校のプログラミングをしたかったため情報系の学校に入学、卒業
・<font color="MediumVioletRed">しかし、高校時代は、部活の野球や、遊びに明け暮れ入学した動機を忘れ高校生活謳歌。</font>
・高卒で非エンジニア職に就職
・2023.9月~ MS社　Powerappsに触れる。プログラミングをしたかったことを思い出す
・2024.3月〜 デイトラ　pythonコース受講
・2024.9月〜 デイトラ　pythonコース修了
・2024.9月〜 Djangoを使用し自分用のwebアプリ制作開始

・現在は本業の仕事を行いつつ勉強中。家族との時間の合間を縫って励んでいます。転職目指してがんばります
【Vercel】お名前.comのカスタムドメインにアクセス

## 手順
### 0. お名前.comでドメイン取得
ここから順に進めると取得できます．
（クレカの設定が必要ですが，趣味であれば料金はかかりません．）

https://www.onamae.com/



### 1. Vercel に Domain を追加する

![スクリーンショット 2024-09-24 21.21.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/d37df1ea-f49b-14bb-c8f9-218d80477bde.png)

画像のように `Settings > Domains` にアクセスして，お名前.comで取得したドメインを入力します．

Addを押下すると3つの選択肢が表示されるので`Recommend`のものを選択．
すると，以下のように`Invalid Configration`と表示されます．

![スクリーンショット 2024-09-24 21.25.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/525f9883-d713-fb10-0447-1f8724baa08c.png)

![スクリーンショット 2024-09-24 21.27.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/a3e2b266-bb4b-2a05-5a13-d0862fdb023f.png)


この時のValueである`76.76.21.21`と`cname.vercel-dns.com`(最後の.は不要)をメモります．

### 2. お名前.comでDNS設定
ドメインのDNSレコード設定を押下
![スクリーンショット 2024-09-24 21.35.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/a0ddc9f8-72e7-181e-5e58-0ce1ae7a3376.png)


ドメイン名を選択して「次へ」を押下
![スクリーンショット 2024-09-24 21.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/482da7f0-efe1-905d-d4bd-df83eb613cef.png)


下へスクロールすると「DNSレコード設定を利用する」という設定があるので「設定する」を押下
![スクリーンショット 2024-09-24 21.38.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/59793c01-4bfc-c367-41dd-6efe7cccc4fd.png)

### DNSレコード入力
**Type を A**にした状態で A Recordを入力し，追加を押下
![スクリーンショット 2024-09-24 21.41.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/da35edb1-5cb5-f237-04cf-5d6720511b6e.png)

**Type を CNAME**にした状態でCNAMEの値を入力し，追加を押下

![スクリーンショット 2024-09-24 21.42.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/6134eebb-376c-6e28-66ff-3aa8c98deca7.png)

:::note warn
A RecordだけでなくCNAMEも設定する必要があります．
A Recordの設定だとCNAMEにリダイレクトされる設定をVercelで行ったため，設定していないとアクセスできません．
:::


「DNSレコード設定用ネームサーバー変更確認」にチェックを入れた状態で確認画面へ進むを押下
![スクリーンショット 2024-09-24 21.46.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2665507/5c5f4c82-becb-0e60-2740-567d3f41061e.png)

### 3. Vercelでカスタムドメインにアクセス！
DNS設定後，反映には10分程度時間がかかりました．
Webにアクセスできるか確認して終了です！
ドメインがスッキリしていると嬉しいですよね(?)

これからも開発頑張りましょう🚀

## 参考
https://www.onamae.com/

https://zuma-lab.com/posts/vercel-onamae-domain-settings

https://webitworks.jp/subdomain-vercel-setting/
Windows11 で torch を使った機械学習モデルの pip install -e . ができない

# 覚書き

環境:
Windows 11
Python 3.10
Pytorch 2.4.0


### 発生したライブラリ

1. AlphaPose
1. detectron2
1. GraoudingDINO

## エラーの内容

```    LINK : fatal error LNK1181: 入力ファイル 'C:\Users\Cyberchan\PythonProjects\BehaviorCostumeEditor\GroundingDINO\build\temp.win-amd64-cpython-310\Release\Users\Cyberchan\PythonProjects\BehaviorCostumeEditor\GroundingDINO\groundingdino\models\GroundingDINO\csrc\MsDeformAttn\ms_deform_attn_cpu.obj' を開けません。
    error: command 'C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\link.exe' failed with exit code 1181
    [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.

```

### 対処法
1.仮想環境から torch, torchvision, torchaudio の削除

```bash
pip uninstall torch torchvision torchaudio
```

2.ライブラリのインストール

```bash
pip install -e .
```


3.通常使用する pytroch の install 

```bash
# CUDA 12.1
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121
```

* 先ほど install したものは uninstall しない
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（93/100）

≪問題93≫
中間点日程計画作業の時間要素のうち、差立中に削減方針設定によって削減できる時間要素は以下のどれですか。
（２つ選択）
□片付時間
□開始待ち時間
□段取時間
□移動時間

≪解答≫
□片付時間
■開始待ち時間
□段取時間
■移動時間

≪解説≫  
◆作業が差し立てられると、同じ指図の未差し立て作業に対して中間点日程計画が実行されます。  
◆この時、指図が当初計画された基準日を超えてシフトされないようにすることが可能です。削減できる時間要素は以下の通りです
（1）製造前余裕や製造後余裕は、日程計画パラメータで定義されます。  
（2）開始待ち時間や移動時間は、削減方針で定義されます。
githubのCLIツールghでvimを指定した時に日本語が文字化けするのを防ぐ設定

ghのeditorをvimに指定して設定していると.vimrcの設定に関わらず、utf-8になってくれない。
通常の設定方法
`gh config set editor vim`
で設定しているとissue やprを編集する時に
`set fenc=uft-8`
を毎回しなければいけない。

# 解決する呪文
gh config set editor 'vim -c"set fenc=utf-8"'
検索しても出てこなかったのでここに残しておく。
NextuiのDividerが使えなかったので、Dividerを他の参考にして自作した。

# はじめに
みなさん、こんにちは **torihazi**です

最近、Xクローンを作っているのですが

![スクリーンショット 2024-09-24 21.19.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2567812/586b6d63-e094-5cd4-c9b4-37379108374d.png)

こういうやつがNextuiのDividerで作れなかったので

これを機に作ってみました。

多分よくあるやつです！

あとNextui x tailwindです

# そもそもNextuiのDividerは？

https://nextui.org/docs/components/divider

みた感じこの人、childrenというか

textをpropsか何かで渡せないらしいです。

---- text ------

みたいな感じですね。

```
<Divider />
```

しかないらしくて。

個人的には

```
<Divider text={text} />
<Divider>テキスト</Divider>
```

みたいな感じを期待していたんですけど。

で、これは困った、ということで作りました。

# どうしたか。


```
import { ReactNode } from "react";

// NextuiのDividerにはテキストを挟み込めないので自作
export const Divider = ({
  children,
  className,
}: {
  children?: ReactNode;
  className?: string;
}) => {
  return (
    <div className={`flex items-center justify-center my-2 ${className}`}>
      <div className="flex-1 border-b" />
      {children}
      <div className="flex-1 border-b" />
    </div>
  );
};
```

こんな感じにして、呼ぶときは

```
~~
<Divider className="w-[300px]">または</Divider>
<Divider className="w-[300px]"></Divider>
~~~
```

てすると

![スクリーンショット 2024-09-24 21.32.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2567812/121f00dd-0e12-bed7-454f-13c8b0ae4a67.png)

こんな感じになります。

他のやつは

```
<div className="flex-1 border-b mr-2" />
```

とかmarginつけてたんですが、そうすると文字ないときに不自然になるのでやめました。

# 終わりに

Nextuiがすごいというからなんでもすごいのかと思ったら

かなり序盤でずっこけました。

あ、ちなみにそれ使ったXクローンの全体図がこちらです。

![localhost_3000_auth (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2567812/dfd8ae3e-4fc3-d32e-c125-413192623a21.png)

昔に比べたら上出来です。
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（92/100）

【92日目】
トピック 9：SAPS/4HANAでの簡易製造（9/9）

≪問題92≫
繰返生産で最終製品の確認を保存するときに、どのアクションがデフォルトで実行されますか。
（３つ選択）
□組立不良伝票の保存
□関連する能力所要量の削減
□製品入庫の転記
□順序内の次の指図に対する品目供給
□製品原価コレクタに対する製造原価の転記

≪解答≫
□組立不良伝票の保存
■関連する能力所要量の削減
■製品入庫の転記
□順序内の次の指図に対する品目供給
■製品原価コレクタに対する製造原価の転記

≪解説≫  
◆繰返生産において、最終製品の確認を保存すると、最終製品の入庫が転記され、以下のようなさまざまなアクションがデフォルトで実行されます。これらのほとんどは、繰返生産プロファイルによって制御されます。  
（1）構成品目の自動出庫（バックフラッシュ）が転記されます。  
（2）ビジネスインフォメーションウェアハウスの統計が更新されます。  
（3）実行計画数量や計画手配、そして生産ライン上の関連する能力所要量が減少します。  
（4）実績加工費（品目原価、生産活動、間接費）が製品原価コレクタに転記されます。  
（5）データ入力伝票が登録されます。
ソフトウェアファースト第2版（第5章）の読書メモ

# はじめに

前回に続き、ソフトウェアファーストの第2版を読んで思ったことを書き連ねていきます。

https://amzn.asia/d/2fxjKjS

第5章は「組織に求められる変革」です。

# 事業サイドの指示を実行するだけの下請けチーム

確かに、このパターンはよくあります。

事業サイドのことをあまり把握していないというのもありますが、そもそも関心がない、というのが一番に理由だと思います。
理系寄りの人が、特にその傾向が強い印象を持っています。

情報処理技術者試験だと、そこは意識しているためか、マネジメント、ストラテジー系がそこそこのボリューム感で試験範囲に入ってますね。

# エンジニアが働きやすい環境づくり

とても簡単です。リモートワークを実現しましょう！:angry:

リモートだとコミュニケーションが取りづらいという意見を時々見かけるのですが、私はそのように感じたことは一度もないです。

むしろ、ベラベラ喋る他人の話し声が聞こえない分、業務に集中しやすいです。:smirk:

どうもIT以外の人は、電話が鳴り響いていて、人々が慌ただしく歩き回って、会話をしているオフィスこそが、活気あふれる良いオフィスだと思い込んでいるように見えます。:sweat_smile:


最近だと、Amazonがリモートワークを廃止したことが有名になってました。

https://news.yahoo.co.jp/articles/3738b97267f3b1f1cf566036e571944f5480e898

以下のツイッターを見ると、色々と事情がありそうなので、それなら分からなくはないです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Amazonのフル出社についての説明、なるほどなぁ。<br><br>リモートークの効率とかそんな問題じゃなくて、過剰人員の整理、オフィスに人が居ないなら州が減税してくれてるのを辞めるだろからとのこと。<br><br>リモートワークの効率うんぬんよりと説得力を感じた。 <a href="https://t.co/vp6peEXauB">pic.twitter.com/vp6peEXauB</a></p>&mdash; 伊織@S I C P読了 (@kakkokka) <a href="https://twitter.com/kakkokka/status/1836562345688207815?ref_src=twsrc%5Etfw">September 19, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

とはいえ、このような理由は、大半の会社には当てはまらないはずです。

そもそも、リモートにすれば、オフィスの家賃や水道光熱費、インターネット代を、労働者側に転化でき、交通費の節約にもなり、採用時に住所の縛りがなくなるため、会社側から見ると、有利な点が多いはずです。


脱リモートではなく、リモートを維持したままどうやって生産性を高めるかを考える方が、優秀なエンジニアが集まりやすいのではないかと思います。

# プロダクトマネージャーとエンジニアリングマネージャーの違い

両者の違いについて、説明がされてました。
プロダクトの成功を重視するなら、プロダクトマネージャーに強い権限を持たせるべきですが、長く続く強い組織づくりを目指すなら、エンジニアリングマネージャーの力が必要になります。

私はどちらかといえば、プロダクトマネージャーに近いです。

皆さんはどちら寄りでしょうか。本書を読んで考えてみるのも良い機会です。

# AI関連の開発に求められる職種

本書では、「AI機能を内蔵する開発」と「AIそのものの開発」に分類していましたが、視野を広げれば、もう一つあるかなと思います。「AIを活用した開発」です。

AIと無関係なWebアプリ、スマホアプリを作るにせよ、上流工程、下流工程、PM、PdMなど、様々な領域でAIを活用して効率化を図ることができます。

今は乱立状態で、これといった定番がありませんが、いずれ登場してくるのではないかと思います。

個人的には非常に興味があります。
音を出して遊ぶRPG

<h3>音を出して遊ぶRPG</h3>
<p>音を出してその分だけポイントとして充電し、集めたポイントでダンジョンを探索する
RPGゲームのようなPGMを作成しました.これで新生児をあやしている最中でもゲームが
遊べるようになっています</p>

2024.09.27:ゴールドを使用して寄付のリンクを出力する機能を追加しました
2024.09.27:自動探索ボタンと機能を追加しました
2024.11.02:ゲームデータのセーブロード方法を変更しました(ファイル読み込み式)

<hr>
<p>ゲーム初期設定</p>

最初にゲームの大まかな仕様として以下を考えました<br>

<h4>考えた仕様</h4>

<hr>
(スタミナ、ヒットポイント、攻撃ポイント、防御ポイント)

スタミナ、
洞窟を探索するのに必要、
ランダムで1〜5pt消費、
なくなったときに自動でダンジョンを離脱
一回探索ごとにランダムな確率でランダムなアイテムを入手(鉄、銅、銀、金、石油、石炭、クリスタル、チタン、マンガン、お金)
50%の確率で鉱石入手、
50%の確率で戦闘



ヒットポイント、
モンスターと戦うときのHP
なくなったときに自動でダンジョンを離脱
(1〜99999ptの範囲で回復できる)

攻撃ポイント
攻撃力ランダムで1〜10pt消費(ない場合は常に1)
モンスターへのダメージ
攻撃ポイント×装備品別ダメージ量でダメージ計算

防御ポイント
防御力で10pt消費(ない場合は消費なしで1ptとして計算)
防御ポイント×防御品別防御量の分だけダメージを軽減


装備品フラグ
素手(耐久∞)、木の棒(耐久99)、鉄の棒(耐久70)、
鉄の剣(耐久50)、鋼の剣(耐久50)

防御品フラグ
なし(耐久∞)、木の盾(耐久99)、鉄の盾(耐久70)、銀の盾(耐久50)、チタンの盾(耐久50)

魔物の強さ
モンスターからのダメージ
は攻撃力×(ランダムで20〜100%で計算)

出現確率高(70%)(10ゴールドゲット)

スライム(ライフ10、攻撃力10)
アルミラージ(ライフ10、攻撃力20)
コボルト(ライフ20、攻撃力15)
ゴブリン(ライフ20、攻撃力20)

出現確率中(25%)(30ゴールドゲット)
ゴーレム(ライフ30、攻撃力30)
スケルトン(ライフ40、攻撃力30)
デュラハン(ライフ50、攻撃力40)

出現確率低(4%)(100ゴールドゲット)
ケルベロス(ライフ100、攻撃力80)

出現確率超低(1%)(500ゴールドゲット)

ドラゴン(ライフ500、攻撃力100)

戦闘のターン順序

まず主人公側の攻撃または、逃げるか判定、

攻撃を選んだとき、
攻撃し、魔物を倒したか判定

逃げるを選んだとき
50%の確率で逃げ成功　
それいがいの時はモンスターによりダメージを受ける

倒した場合、モンスターの種類ごとにお金をゲット

次に魔物の攻撃、
主人公が倒されたか判定、
倒された場合、最初のメニューに戻る

そうでない場合次のターンへ行くボタンを押させて、次のターンへ行く

<hr>


<hr>
URL

githubURL:　
<a href="https://github.com/NanjoMiyako2/OtoRPG">https://github.com/NanjoMiyako2/OtoRPG</a>

サンプルページURL:
<a href="https://nanjomiyako2.github.io/OtoRPG/">https://nanjomiyako2.github.io/OtoRPG/</a>


<hr>
参考にしたサイト

<a href="https://qiita.com/riku_takeuchi/items/57f2e8551d1edecbc07d">ボリュームメーターの作り方 #JavaScript - Qiita</a><br><a href="https://simpleonedesign.com/blog/programming/js-tabmenu/">【Javascript】タブメニューの実装方法 -作って学ぶWeb制作- - シンプルワンの技術備忘録</a><br>
<a href="https://qiita.com/rxoxixyxd/items/dd6e5567c816ea2ef96b">Web Audio API で取得したユーザ音声を Node.js でリアルタイム処理 #JavaScript - Qiita</a><br>
<a href="https://magazine.techacademy.jp/magazine/24063">JavaScriptでselectオブジェクトの値（value）を取得する方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン</a><br><a href="https://qiita.com/iiishokoiii/items/4a8fc7a4231e20bdf6cf">localStorageを使ってブラウザにデータを保存する #JavaScript - Qiita</a><br>
<a href="https://www.sejuku.net/blog/29821">【JavaScript入門】alert(アラート)メッセージはこれで完璧。使い方を総まとめ！ | 侍エンジニアブログ</a><br>
<a href="https://exe.tanidaiz.com/roulette.php">ルーレットメーカー WEBツール</a><br>
Windowsの監査ポリシー設定でハマった話

<環境>Windows10,11

監視対象のリソースに対する操作を記録・検知するための監査ポリシー設定で
思わぬ罠にハマってしまったのでここに共有します。

監査ポリシー設定は簡単に説明すると、以下の画面のwindowsログ配下の項目内で
確認できる項目を色々設定できるよ、というものです。

![WIndowsログ２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265059/59ddcbcf-d24d-0530-5f6f-207a44bd9c22.png)

デフォルトで既にログは出力されていますが、
この画面でなるべく多くの情報を取れるようにしたいというところから
出力されるログの種類を増やす目的でスタートしました。

この設定を変更する手段は、

【1】コマンドプロンプトでコマンドの投入
【2】エディターで操作

の2種類が用意されているようです。

そこで、まずは視覚的に分かりやすい方法から行うのが個人的な鉄則であったので
2番目の方法を選択しました。

これは以下のローカルグループポリシーエディタで行え、大雑把に大項目ごと設定する方法と細かく小項目ごとに設定する方法があります。

### 大項目（監査ポリシー構成）
![大項目.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265059/17e4b15a-b515-c1bd-92b1-ac1367b741af.jpeg)

![大項目の設定.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265059/47b1100f-5ce4-4dfc-f9fb-41e8c90aabbb.jpeg)
※上図の場合、ログオンに成功、失敗した場合にログ出力をするように設定できます

### 小項目（監査ポリシーの詳細な構成）
![小項目.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265059/59ae4c35-4304-5915-d05e-d9ac9d1cf4e2.jpeg)

![小項目の設定.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265059/053a9949-81d7-996b-e5a4-f914d06372d2.jpeg)


エディター上では全ての項目で監査しない設定になっていましたが、
今回全ての項目で成功、失敗のログを取得するように設定し、
結果を見ながら必要ないものを削っていく進め方を選択しました。
その結果出力ログが膨大になってしまい、ログがメモリに展開される仕様でメモリリークが発生...

そのため、一旦全ての監査ポリシー設定を元の監査しない状態に戻したところ、
設定前に出力されていたログまで出力されない状態になってしまいました。

どうやら**エディター上で見えているものとは別の設定が内部に存在していた、
かつその設定が優先されていた**模様。
紆余曲折あり、エディター上で見えないデフォルト設定が判明したため、
コマンドプロンプトから以下の設定を投入。

```設定投入.txt
監査ポリシー　デフォルト
 
auditpol /set /subcategory:"" /success:enable /failure:enable
 
auditpol /set /subcategory:"システムの整合性" /success:enable /failure:enable
 
auditpol /set /subcategory:"その他のシステム イベント" /success:enable /failure:enable
 
auditpol /set /subcategory:"セキュリティ状態の変更" /success:enable
 
auditpol /set /subcategory:"ログオン" /success:enable /failure:enable
 
auditpol /set /subcategory:"ログオフ" /success:enable
 
auditpol /set /subcategory:"アカウント ロックアウト" /success:enable
 
auditpol /set /subcategory:"特殊なログオン" /success:enable
 
auditpol /set /subcategory:"ネットワーク ポリシー サーバー" /success:enable /failure:enable
 
auditpol /set /subcategory:"ポリシーの変更の監査" /success:enable
 
auditpol /set /subcategory:"ポリシーの変更の認証" /success:enable
 
auditpol /set /subcategory:"コンピューター アカウント管理" /success:enable
 
auditpol /set /subcategory:"セキュリティ グループ管理" /success:enable
 
auditpol /set /subcategory:"ユーザー アカウント管理" /success:enable
 
auditpol /set /subcategory:"ディレクトリ サービス アクセス" /success:enable
 
auditpol /set /subcategory:"Kerberos サービス チケット操作" /success:enable
 
auditpol /set /subcategory:"Kerberos 認証サービス" /success:enable
 
auditpol /set /subcategory:"資格情報の確認" /success:enable
```

上記コマンド投入後に正常にログが出力されることが確認できました。
エディター側を見にいくと、全ての項目で監査しない設定になっていたため、
エディターではエディターを使用して設定した内容しか反映されないようです。

監査ログ設定を行う際はコマンドプロンプトにて以下コマンドを実行し、
デフォルト設定を抜き出した上で変更を行うのが安全です！

```設定確認.txt
auditpol /get /category:"*"
```

以上、お読みいただきありがとうございました。
DroidKaigi 2024: Hondaブースで出題したAndroid Automotive OSの間違い探し

# はじめに

本田技研工業では車に搭載されたAndroid Automotive OS（以下AAOS）上で動くアプリや、Car PlayやAndroid Autoなど車のディスプレイに投影して動かすアプリ、車やバイクと接続して使用するコンパニオンアプリなどを開発しています。

今回[DroidKaigi 2024](https://2024.droidkaigi.jp/)に初めてスポンサー協賛しました。

実際に来場された方にAndroid Autoやコンパニオンアプリを体験頂きたかったので、車とバイクと一緒に展示しました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083937/0bc0aa52-f04c-9ab2-7a5a-166b547e146a.jpeg)

車両と一緒に展示したプロダクトはこちらです。

- Android Autoに対応している[RoadPeformance](https://www.honda.co.jp/RoadPerformance/)
    
- バイクに接続して利用するコンパニオンアプリ[RoadSync](https://global.honda/en/voice-control-system/ja-top.html)

# AAOSクイズ

ブースでは自動車メーカーならではということで、Androd Automotive OSの間違え探しと題してクイズを出題しました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083937/c911d34a-5f8d-00bb-f202-734b91e95807.jpeg)

#### Q1 : 推奨されないUI構成はどこでしょう？
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083937/00b2e9b5-772a-684b-0144-1e07aad6cdff.jpeg)

AAOSは運転中に使用するということもあり、モバイル向けとは異なる観点のビジュアルの原則あります。

車の画面用にデザインされたコンテンツは、判読可能でひと目で認識できること、一貫した UI と大きなタップ ターゲットを備えており、ドライバーがあらゆる視聴状況で識別できることが必要です。

正解は以下になります。

- テキストの長さ
    - ローマ字を使用したテキスト項目は、句読点とスペースを含めて 120 文字以内にする必要があります。（注: 上記の文は半角 101 文字（全角 51 文字）です）。日本語のテキスト項目は、ローマ字、かな、漢字を合わせて合計 31 文字以内にする必要があります。

- ボタンの大きさ
    - タップ ターゲットは、Android Automotive のガイドラインに沿って、サイズが 76 x 76 dp 以上にする必要があります。特殊なケースでは、車両の上下左右の振動により適切に対応できるよう、幅を少し犠牲にして（全体面積を同じに保ちながら）高さを犠牲にすることもできます。

[ビジュアルの原則](https://developers.google.com/cars/design/design-foundations/visual-principles?hl=ja)について

#### Q2 : 車両と連携するアプリが取得できないDataはどれでしょう？
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083937/b05ddbb0-96ff-d8b4-4a5a-dd214c58a431.jpeg)

AAOS上で動かすアプリは車両から情報を取得できるように設計されており、可視化したり、計算に利用したりしています。

正解は以下になります。

- 15 : HVAC_DRINK_TEMP
    - ドリンクホルダーにはセンサーがないため、現時点では取得できない項目になります。もしセンサーがあると一定の温度を保てたり、温め直したりできそうですね。

[サポートされているシステム プロパティ](https://source.android.com/docs/automotive/vhal/system-properties?hl=ja)について

# 終わりに

今回のDroidKaigi 2024のスポンサー協賛をきっかけに多くの方にコンパニオンアプリやAAOS、Android Autoのことを知っていただけました。
今後も積極的に発信していきたいと思っています！
VPSを借りたら最初にやるべきタスクリスト

# まえがき
※初めに明記しておきますがあくまで自分用の備忘録兼投稿のテストです。
似たような記事やより高品質な記事は探せばごまんと出てくるので、詳細が知りたい方は別の記事をご参考ください。

### この記事の目標
なるべく簡潔に、VPS契約後の初期設定における最低限の諸々を漏れなくまとめる
（筆者は頻繁に環境の構築作業をするのですがその度にやり方を忘れたり抜けたりして調べているので...）
WebArenaは若干ほかと仕様が異なるのでメモ

### 実行する環境
Kagoya VPS / WebArena Indigo
Ubuntu (22.04 LTS)
この記事の手順ではUbuntuのバージョンによる差異はありません。

# 開始
## VPS側のファイアウォール設定
サービスによって設定方法は異なるが、とりあえず22番ポートと任意のssh用ポート以外はまず閉める
後でsshポートの変更が済んだら22番も閉める
IP制限もかけるとなお良い
## パッケージ群のアップデート

```bash:bash
# パッケージリストの更新
$ sudo apt update
# パッケージリストのアップデート
$ sudo apt upgrade -y
```

## SSHポートの変更
コンフィグファイルをエディタで開く
```bash:bash
$ sudo vim /etc/ssh/sshd_config
```
コメントアウト削除、ポートは任意(この記事では40022に設定)
```:sshd_config
変更前
#Port 22
変更後
Port 40022
```
sshdを再起動して設定を反映
```bash:bash
$ sudo systemctl restart sshd
```
これが済んだら、変更したポートでssh接続し直す
## OS側のファイアウォール設定
```bash:bash
# 大体最初から入っているとは思うが、念のため
$ sudo apt install ufw
# デフォルト設定をアクセス拒否に変更
$ sudo ufw default deny
# sshポートの開放
$ sudo ufw allow 40022
# ufwの有効化
$ sudo ufw enable
```

## ユーザの作成
主要なVPSでは初めはrootでログインしている(例外あり)と思うので、別の作業用のユーザを作成する
```bash:bash
# 新規ユーザを作成(以下、YOURNAMEを任意のユーザ名に読み替えてください)
$ sudo adduser YOURNAME
# パスワードを2回入力、フルネームや部屋番号などは空欄でよい

# 作成したユーザをsudoグループに追加してsudo権限を付与
$ sudo gpasswd -a YOURNAME sudo
```

## 公開鍵の設定
VPSからダウンロードした秘密鍵はrootユーザの公開鍵とのペアなので、先ほど作成したユーザのログインでは使用できない
そのため今回は公開鍵をコピーして流用するが、これによりrootと一般ユーザが同一の鍵を持つことになるので一応注意
今回は後でrootログインを禁止する
```bash:bash
# rootの公開鍵を新規ユーザにコピー
$ sudo cp -r .ssh/ /home/YOURNAME/
# コピーした鍵に新規ユーザがアクセスできるよう権限付与
$ sudo chown -R YOURNAME:YOURNAME /home/YOURNAME/.ssh/
```
ここまで終わったら、新規ユーザでssh接続し直す
<details><summary>例外：WebArena Indigoの場合</summary>

初期ユーザはrootではなくubuntuという名前のsudoユーザとなっている
そのため、上の手順の実行はrootではなくubuntuユーザで行う
また、鍵のコピー後ubuntuユーザは不要となるのでリスク低減のため削除
```bash:bash
# ubuntuユーザから新規ユーザにログイン切り替え
$ su - YOURNAME
# ubuntuユーザで実行中のプロセスを確認
$ ps aux | grep ubuntu
# ↑で出力された中に、ubuntuユーザが実行中のプロセスがあれば停止
$ sudo kill <プロセスID>
# ubuntuユーザを消去
$ sudo userdel -r ubuntu
```
</details>

## rootログインの禁止
コンフィグファイルをエディタで再度開く
```bash:bash
$ sudo vim /etc/ssh/sshd_config
```
rootログインとパスワード認証を禁止
変更する箇所のコメントアウトは削除する
```:sshd_config
変更前
#PermitRootLogin prohibit-password
変更後
PermitRootLogin no
---------------------------
変更前
#PasswordAuthentication yes
変更後
PasswordAuthentication no
```
sshdを再起動して設定を反映
```bash:bash
$ sudo systemctl restart sshd
```

## ホスト名の変更
```bash:bash
# HOSTNAMEを任意の名前に読み替え
$ sudo hostnamectl set-hostname HOSTNAME
```

ここまで出来たら、作業は一区切りついたので一度システムを再起動
```bash:bash
$ sudo systemctl reboot
```

## （WebArenaのみ）タイムゾーンの変更
デフォルトタイムゾーンがUTCなのでJSTに変更
```bash:bash
# 日本時間(Asia/Tokyoゾーン)に変更
$ sudo timedatectl set-timezone Asia/Tokyo
```
iOSシミュレーターでIn-App purchaseをテストしてみました。

### StoreKit構成ファイルとは？
StoreKit構成ファイルは、IAPのテストをローカル環境でシミュレートするJSONファイルです。このファイルでは、購入や返金のシミュレーションなど、StoreKitアクションを実際の支払いなしで行えます。サンドボックスと似ていますが、開発中のテストも可能なので、IAPビルドを作成する手間を省き、開発時間が大幅に短縮されます。

### テスト設定手順

StoreKit構成ファイルを作成します。App Store Connectと同期するか、手動で新規作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/20c1b158-e463-686a-88ee-a28d2113a171.png)
ファイル名を入力し、必要ならApp Storeと同期するチェックボックスをオンにします。
購入テストのためにビルドスキームを「編集」します。Xcodeの「Edit Scheme」で、StoreKit Configuration file を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/96406342-5618-deb7-c8f9-8d784dccb35f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/09a51622-5b5c-dbfa-67d6-568a9ad9d5ea.png)

アプリを実行し、テストを開始します。
デバッグ時にサーバーへの通信を無効化するか、必要に応じてサーバー側の設定も調整します。また、トランザクションマネージャで購入履歴を確認できます。

シミュレーターでIn-App purchaseをテストできるようになった！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/f84d3c0a-fe84-d253-5755-eb4d2eed9542.png)


### Good to know 
何回もテストするためにPurchaseの記録をリセットする手順も貼っておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/d7c43832-5dad-3f49-f061-98e7bfb64729.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/5f2921c6-b3f4-a935-4bf0-8d6352f0265e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736127/68871cf3-05cc-3d4d-ca4f-0b50fa452f69.png)
生産性の向上：ONLYOFFICEとOdooの統合

今日のデジタル時代において、企業はチーム間でドキュメントを管理する際に常に課題に直面しています。ONLYOFFICEとOdooは、この課題を解決するために力を合わせ、リアルタイムコラボレーションと効率的なドキュメント管理のためのシームレスな統合を提供します。Odooを離れることなく、重要なドキュメントの編集、共有、共同作業ができることを想像してみてください。

![ONLYOFFICE-Connector-for-Odoo-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655664/85800658-f1de-18b2-00f2-cda6b9251b7f.jpeg)


### Odooとは何？
[Odoo](https://www.odoo.com)は強力なオールインワンのビジネス管理プラットフォームです。CRMから会計まで、ビジネスに必要な完全なツールキットを提供し、業務を円滑に管理できるようにします。

### ONLYOFFICEとは？
[ONLYOFFICE](https://www.onlyoffice.com/ja/)は、強力な文書編集ツールスイートを提供しており、ユーザーはテキスト文書、スプレッドシート、プレゼンテーションの作成、編集、共同作業を行うことができます。ONLYOFFICEは、DOCX、XLSX、PPTXなどの一般的なフォーマットをサポートしており、企業が使い慣れたツールで生産性を維持できるようになっています。

### ONLYOFFICEとOdooがゲームチェンジャーである理由
OdooとONLYOFFICEの統合により、コラボレーションと生産性が1つの屋根の下に集約されます。プラットフォームを切り替える代わりに、チームはOdoo内でドキュメントを編集することができます。これにより、中断が減り、より合理化されたワークフローを実現できます。
### ビジネスを向上させる主な機能：
* **統合されたドキュメント管理**：CRMやセールスなどのOdooのモジュール内で直接ドキュメントを作成・編集できます
* **PDFフォームと編集**：Odoo内でPDFフォームを編集できます。外部ツールは必要ありません。
* **リアルタイムコラボレーション**：チームはリアルタイムで共同編集でき、変更をリアルタイムで確認できます
* **強化された[セキュリティ](https://www.onlyoffice.com/ja/security.aspx)**：ONLYOFFICEのJWTトークンサポートにより、安全なドキュメント交換が保証されます
### ユースケース：実際のメリット
* **営業チーム**：契約書を即座に作成・更新し、全員が最新バージョンで作業できるようにします
* **プロジェクト管理**：プロジェクトのスケジュール、予算、レポートを簡単に共同作業できます
* **財務**：関係者とリアルタイムの財務報告を共有できます。メールの添付ファイルは不要です

### インストールと設定：シンプルかつ高速
使い始めは簡単です。ONLYOFFICEコネクターは[Odoo App Store](https://apps.odoo.com/apps/modules/17.0/onlyoffice_odoo)で入手でき、ユーザーはONLYOFFICE Docsをクラウドまたはオンプレミスでホストできます。接続が完了すると、チームは即座に共同作業を開始できます。

### ぜひお試しください！
ONLYOFFICEとOdooの統合は、文書管理とコラボレーションの強化を目指す企業にとって必須の機能です。チームの生産性を向上させるチャンスをお見逃しなく。今すぐこの強力な組み合わせを試して、その効果を実感してください。
[Joke]癌診断をするプログラム 'diagnosis.py'

ジョークプログラムです。癌かどうかの診断を御家庭で行えます。医者は信用できないので作りました。
`chmod +x diagnosis.py`として実行権を付け、`./diagnosis.py`
として実行してください。
話を聞かないので、97％の確率で癌の診断が下ります。

質問が少ないと思ったら、qlに医者の聞きそうなことを足してください。

```diagnosis.py
#!/usr/bin/python
import random

ql=["痺れがありますか？",
"患部を押すと痼がありますか？",
"だるさ、倦怠感がありますか？",
"発熱がありますか？",
"脱毛がありますか？",
"不眠がありますか？" ]

def main():
    print("Cancer diagnosis ver 1.0")
    s=0
    for i in ql:
        print(i)
        print("いいえ：0、はい：1",end='')
        a=int(input(" : "))
        s+=a
    print("あなたは癌です。" if random.randint(0,99)<97 else "あなたは癌ではありません。")

if __name__=='__main__':
    main()
    exit(0)
```
Google CloudとOCIのクロスクラウド接続におけるゾーン毎のレイテンシ

# はじめに
Google CloudとOCIはクロスクラウド接続を行う事が可能です。
実際に接続を行った検証結果は次のリンクを確認ください。

- [Google Cloud から クロスクラウド接続で OCI のデータベースに接続してみた](https://qiita.com/asahide/items/fe0b33928b676dc1a760)

さてここで、Google Cloudの東京リージョンは3つのゾーンから構成されるのに対し、OCIの東京リージョンは1つのAD(いわゆるゾーン)のみを持ちます。OCIとクロスクラウド接続した際にどのゾーンからクエリを実行するかによって、レイテンシに変化があるのでは？と考えて確認してみました。

ちなみにGoogle Cloudのゾーン間のレイテンシは [パフォーマンスダッシュボード](https://cloud.google.com/network-intelligence-center/docs/performance-dashboard/how-to/view-google-cloud-latency?hl=ja#global-latency-between-zones) で確認することが可能で、次図のような状態でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/6f914d5c-978f-d9c0-ee53-ee9bfdd8c45d.png)


# 確認環境と結果
次図のような環境において、それぞれの仮想サーバからpingでの簡易確認を実施しています。

①Google Cloud ZoneA 上の仮想サーバ(e2-medium, 2vCPU, 4GB mem)
②Google Cloud ZoneB 上の仮想サーバ(e2-medium, 2vCPU, 4GB mem)
③Google Cloud ZoneC 上の仮想サーバ(e2-medium, 2vCPU, 4GB mem)
④OCI 同一AD 上の仮想サーバ(VM.Standard.E2.1.Micro, 2vCPU, 1GB mem)

![01-vm.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/e547fedc-79e4-4d7c-0aca-12d72dc17a90.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/d8276331-4036-0002-0329-c770b7e293ee.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/31aabcba-eb98-43e0-37c0-fb04af550913.png)


結果は次表のような形になりました(それぞれ20分程度実施)。

| | min(ms)	| **avg(ms)**	| max(ms)
|:-|:-|:-|:-|
|①GCP ZoneA|	1.204|	**1.307**|	2.970
|②GCP ZoneB|	1.613|	**1.724**|	4.296
|③GCP ZoneC|	1.151|	**1.234**|	3.896
|④OCI 同一AD|	0.241|	**0.342**|	1.089

Google Cloud内ではZoneCにおけるレイテンシが1番短く、ZoneBが1番長い、という結果になりました。
前述のパフォーマンスダッシュボードの結果とあわせると、クロスクラウド接続はZoneCから接続されている？と推察できますね(実際にはもう少し複雑かと思われます)。

# まとめ
Google CloudのZoneのID（a,b,c）は仮想的なIDとなるため、物理的なIDとは別になりますが、ゾーンによってレイテンシが変わることを確認できました。東京リージョンではレイテンシに大きく変化はないため、どのゾーンでも気にする必要はないかもしれませんが、性能テストなどを行うときは考慮しておいた方が良いかもしれません。

さて、先日GAされた Oracle Database@Google Cloudでは、Google Cloudのそれぞれのゾーンに対応したADが割り当てられるようになると想定されます(次図はOracle Database@Azureの例)。こちらは仮想サーバとデータベースがより近接で動作させることができると想定されますが、複数ゾーンを利用する場合にはいろいろと考慮が必要になりそうです。
また、OCIのADが一つしかない東京では1つのゾーンでのみ利用できるのか、それとも、全てのゾーンで利用できるように実装されるのか、リリースが待たれますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/dd89cdbb-338e-4052-931c-7d1f08d35687.png)

（引用：[First principles(第1原則): Oracle Database@Azureでミッション・クリティカルなアプリケーションを強化](https://blogs.oracle.com/oracle4engineer/post/ja-first-principles-powering-applications-with-oracle-database-at-azure)）
ServiceNowのソフトウェア管理ソリューション「SAM」の概要とできること

## はじめに
今回は、ServiceNowのSAM(Software Asset management)に関する記事を書こうと思います。
SAMは、ITSMやITOMの導入後に追加で利用するお客様が多いのですが、具体的な説明の記事が少ない製品でもあるため、書かせていただききました。SAMを利用することで、ソフトウェア管理をデジタル化することで、無駄なライセンスの削減やガバナンス体制の強化など様々なメリットを享受することが可能です。

## SAMとは
SAMは、ソフトウェア製品のコンプライアンス管理、リスク管理、コスト管理を主眼に置いたサービスです。SAMの主な機能には以下が含まれます。
### 🔳ライセンス管理
ソフトウェアのライセンス使用状況を追跡し、適切なライセンス契約に基づいた使用を保証します。各種パブリッシャー(サービス提供企業)ごとにガバナンスを準拠しているのか、削減見込みのコストがあるのかなどを確認することができます。

⚫️各SaaS製品の状況を1つのワークスペースで確認可能
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3638165/ca448b45-ecf8-439b-a16f-e8a0ee7b203b.png" width=80%>


### 🔳コストの最適化
ライセンスの過剰購入や未使用ソフトウェアの削減を通じてコスト削減を図ります。
⚫️削除見込み金額の表示
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3638165/8dc55586-c999-b473-a0eb-d1b2f8c01693.png" width=80%>
⚫️更新時期の把握
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3638165/30cc0581-1ee4-7e92-1b65-010ce9856233.png
" width=80%>

### 🔳コンプライアンスの順守と監査対応
監査に必要なデータを収集し、監査の準備を効率化します。コンプライアンス状況の確認も可能です。
⚫️健全性をチェック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3638165/127d98bd-995b-a09f-d127-c07072fd22a2.png" width=80%>


### 🔳ソフトウェアの使用状況分析
使用状況のデータを分析して、無駄なソフトウェアの識別や再配置を行います。
⚫️使用状況をチェック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3638165/7cfdbb5e-054e-103f-fbfc-110a82cebd43.png" width=80%>

## その他製品との連動性
そのほかの製品と連動させることで、活用を促進することができます。
⚫️ITSMとの連動
ITSMのService Catalogや、変更管理と連携することで、資産情報の調達から廃止までのフローや、変更管理に紐づくCMDB情報の最新化を行うことができます。

⚫️ITOMとの連動
ITOMで検出したサーバーに紐づくソフトウェア情報の契約情報などの付加情報を管理することができます。

## まとめ
いかがだったでしょうか。今回はServiceNowのソフトウェア資産管理ソリューションであるSAMの概要についてご紹介しました。皆さんもソフトウェア管理を最適化するために、SAMを活用してみてはいかがでしょうか。
paizaラーニング問題集「最安値を達成するには3」を解いてみた

https://paiza.jp/works/mondai/dp_primer/dp_primer_apples_step2

▼考え方：

1.りんごを0個購入するときの金額の最小値は0円

2.りんごを1個からx個のいずれかを購入するときの金額の最小値はa円

3.りんごをx+1個より多く購入するときの金額の最小値は、以下3.1、3.2のように計算する。今回はi個購入するとする

　3.1. まず、りんごx個a円を購入する場合を考える。10,000,000円と、購入前の個数(i-x個)の金額の最小値(dp[i-x])にa円を加えた金額を比較し、小さいほうを最小値とする（事実上、後者が最小値になる。）

　3.2. 次に、りんごy個b円を購入する場合を考える。3.1で計算した最小値と、購入前の個数(i-y個)の金額の最小値(dp[i-y])にb円を加えた金額を比較し、小さいほうを最小値とする

4.題意より、i個以上購入する可能性があるため、i個以上購入したときの金額の最小値を計算する

▼コード：
```py
########## 処理0(準備) インプット,リスト定義など ###########

n,x,a,y,b = map(int, input().split())

# dp: りんごをi個購入した時の金額の最小値を格納するリスト
dp = [10000000] * (n+y)

########## 処理1 漸化式の定義、計算、出力 ##########

# 考え方1参照
dp[0] = 0

# 考え方2参照
for i in range(1,x):
    dp[i] = a

# 考え方3参照
for i in range(x+1,n+y):
    
    if i >= x+1:
        # 考え方3.1参照
        dp[i] = min(dp[i], dp[i-x] + a)
    
    if i >= y:
        # 考え方3.2参照
        dp[i] = min(dp[i], dp[i-y] + b)

# 考え方4参照
print(min(dp[n:]))
```
ChatGPTと対話しながらReactとNodeでwebサービスを作ってみた話

こんにちは！最近、旅行に関するWebサービス[Traveler's class](https://travel-class.com "Traveler's class")
をリリースしました。実は、私はWeb開発の初心者で、HTMLやCSS、JavaScriptの基本的な知識しか持っていません。しかし、ChatGPTと対話しながら開発を進めることで、数日間でサービスを完成させることができました。この記事では、その経験を共有したいと思います。

# なぜWebサービスを作ろうと思ったのか
1〜2年前から、「何か自分でWebサービスを作ってみたい」という思いがありました。そこで、会社の同期数人と一緒に、勉強の一環としてWeb開発に取り組むことにしました。

最初の一歩：独学での挑戦

まずはAWSのEC2にApacheのWebサーバーを立て、HTML、CSS、JavaScriptを学びながら簡単なページを作成してみました。しかし、専門的な知識がない中での独学は思った以上に大変で、勉強に割けるリソースも限られていました。

# ChatGPTとの出会い
そんな中、ChatGPTがリリースされ、コード生成もできることを知りました。これは大きなチャンスだと思い、早速利用してみることにしました。

# ReactとNode.jsへの挑戦
ChatGPTに相談しながら、ReactとNode.jsを使って開発を進めることにしました。これらの技術は全くの未経験でしたが、ChatGPTがコード例や具体的な手順を提供してくれるので、スムーズに理解することができました。

Reactの導入：フロントエンド開発にはReactが適していると教えてもらい、基本的なコンポーネントの作り方から学びました。
Node.jsの活用：サーバーサイドにはNode.jsを使用し、APIの構築やデータのやり取りを実装しました。

# 開発環境の構築
初心者でもわかりやすいシンプルな環境を目指して、以下の構成で開発を進めました。

AWS EC2にReactとNode.jsを実装：ChatGPTの指示に従い、EC2インスタンスに必要な環境を整えました。
ドメインの取得とCloudFrontの設定：独自ドメインを取得し、CloudFrontを経由してEC2に配信されるように設定しました。
※正直なところ、AWSの設定やネットワーク周りはまだ完全には理解できていませんが、ChatGPTのサポートでなんとか形にすることができました。

# MongoDB Atlasでデータ管理
データベースの選定に関してもChatGPTに相談し、MongoDB Atlasを使うことにしました。クラウド上で簡単にセットアップでき、スケーラビリティや可用性も高いという利点があります。

チャットデータの保存：ユーザー間のチャットメッセージやトピック情報など、動的なデータをMongoDB Atlasに保存しました。
Node.jsとの連携：サーバーサイドのNode.jsアプリケーションとMongoDB Atlasを接続し、データの読み書きを実装しました。
リアルタイム通信：Socket.IOを使用して、リアルタイムでのチャット機能を実現しました。

# 開発したサービス「Travel Class」の紹介
コンセプト
海外からの旅行者が、日本に関するさまざまなトピックについて、不特定多数の人とリアルタイムで自由に情報を共有できるプラットフォームです。

特徴
登録不要で簡単アクセス：誰でも手軽にアクセスでき、リアルタイムでやり取りが可能です。

# 今後の展望
AWSの無料枠を使用してサービスを公開しましたが、友人から「大きな負荷には耐えられないので、LambdaとS3を使った方が良い」とアドバイスを受けました。今後は以下の点を改善していく予定です。

サーバーレスアーキテクチャへの移行：LambdaとS3を活用して、スケーラビリティの高いサービスにする。

# まとめ
ChatGPTを活用することで、Web開発初心者の私でも短期間でサービスをリリースすることができました。わからないことがあっても、その都度質問して解決できるので、非常に効率的でした。

これからも新しい技術に挑戦しながら、「Travel Class」をより良いサービスに育てていきたいと思います。もし同じようにWeb開発に興味がある方がいれば、ぜひChatGPTを活用してみてください！

ご覧いただき、ありがとうございました！
よければいろいろなFBをいただけると嬉しいです。

# PS
最後にこの文章もGPTに書いてもらいました。そのおかげで初めてQiitaに投稿するまでに使った時間は出勤前の10分です。これからもGPTと仲良くたくさんアウトプットしたいと思います
Mayaプラグインを使う環境をつくる

便利そうなプラグイン見つけたけど、使い方わからない。
ダウンロードしたzipファイルの中にこんなのがいる時の対処法です。
#### ~.py ←まあ。多分パイソン？これ
#### ~.mll　←見た事あるかも？
#### ~.cpp　←知らん。

この.cppファイルのみが入っていて、他が見当たらない場合は手順が増えます。

作者のブログや配布ページなどで案内される
「How to Use」とか「Basic Usage」が充実していれば、それに従います。
しかし、そうでないプラグインも多数あります。
### この記事はプラグインを使えるようにする事に注目します。
## 下準備
MAYA_PLUG_IN_PATHの設定

https://dftalk.jp/?p=72

![{FA3BE881-06BA-4ABA-9FC3-075773ACE6EE}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759086/e7825fc8-bb15-643d-134a-c57b096f5bb9.png)

こちらの記事を参考に、maya.envに書き込む方法で、環境変数の設定を行います。
### __P-1__
私は C:\Users\ユーザー名\Documents\maya\2024　に新しいフォルダを作成しmodulesと命名します。

![{DDDF25A3-7BDB-41F3-8101-901D59524834}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759086/3d7dbdbe-5f03-2fd2-ec68-b794020dc6b7.png)
### __P-2__
以下の記入例では、新しいフォルダ「modules」の中に、
自分が一目でわかる名前のフォルダ「outer_script」を作って、そこから参照するよう指定しています。

![{5DD63A37-6EF6-4466-8190-EC9A9FC6096E}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759086/ff3741b9-6b22-c759-95e0-1228fa4949ef.png)

maya.env の編集が正しく行えた場合は、以下のようにプラグインマネージャーに表示されます

![{CF1DD690-61FC-44E1-ACAF-02CD48D13DAF}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759086/2dca8b16-05fc-6dd9-ab27-ff38609d4b01.png)


# 1.ノードを追加するツール　.cppのみの場合
ソフトIKノード
https://github.com/PaulSchweizer/softIkNode?tab=readme-ov-file

### エラー発生&How toの内容が薄い
作者のHow to Useがありますが、エラーが出ました。How toの内容も最低限です。
デモや動作確認用の、demo.py が実行できません。

![{D5913CEB-CB0D-48B1-9FE9-FDC2BEE915C9}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759086/90f1abad-2313-d90a-2cb8-275f0559faf0.png)

エラーの内容はsoftIkNodeが見つからない。（参照先に、欲しいファイルが居ない
エラーの原因はsoftIkNode.cpp　にあります。

Maya2024のデフォルトでは、プラグインマネージャーで読み込めるファイル形式は .mll　です
ファイル形式が違う為に、エラーが発生したはずです。

## .cppのコードを.mllにして、Mayaプラグインを読み込む
__必要な材料は__ 
・上記の下準備を済ませたMaya
・Maya2024と互換性があるVScode
・devkitが存在しない場合は、あなたが利用しているMayaに対応しているdevkit
・ダウンロードしたファイルに入っている 「softIkNode.cpp」
の4つです。
__完成したものがこちらになります。__

https://www.dropbox.com/scl/fo/wg3oet0by7s629x3nn263/AC_1Rff8WgefNH6LgBI3IMY?rlkey=2c4x7x3oe9rle5x1jbirotssr&st=nu311dkz&dl=0

boneDynamicsNode.mllをダウンロードして下さい。
Mayaを終了した状態で、ダウンロードした.mllを下準備の __P-2__ で作成した
__自分が一目でわかる名前のフォルダ__ に入れてからMayaを起動、プラグインマネージャーを開いて確認して、☑ロードをクリックして下さい。以下の画像のようになれば完了です。

![{1E9424DC-7F2D-4620-9D55-3A81284FA5E5}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759086/3e1087f7-08bd-7c3b-6f61-dd77e0a06480.png)

ノード
![{5D0E4084-E377-41CF-A72E-7D337D021632}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759086/70e5530b-69f2-d9cf-b168-d2c34922830c.png)

このノードの使い方はまだ勉強中です。

### 以下工事中
# 2.ノードを追加するツール　案内が充実している場合


配布元


https://github.com/PaulSchweizer/softIkNode?tab=readme-ov-file

https://www.toolchefs.com/?portfolio=soft-ik-solver

https://github.com/akasaki1211/boneDynamicsNode

https://x.com/akasaki1211/status/1771607503161196641

参考
環境変数について
https://dftalk.jp/?p=72


簡易的に言うと、.cppフォルダを.mllフォルダに変換する。

以下のサイトを参考に、

https://mukai-lab.org/library/maya-cpp-plugin/

VScode上での操作手順的には、
新しいプロジェクト(DLL)を作成し、プロパティで「ターゲットの拡張子」を .mll に変更し


正確には.cppを新規プロジェクトにインポートし、.mllでコンパイル（ビルド）する

DCCツールと開発言語の互換表
https://vfxplatform.com/
基本情報技術者に向けて　Part.1

# LAN
Local Area Networkの略称
事務所やオフィスの中など比較的狭い範囲のネットワークをLANと呼ぶ

# WAN
Wide Area Networkの略称
遠く離れたLAN同士を接続するネットワークのこと
広義でインターネットもWANと呼べる

# データを運ぶ通信方式
PCはデータのやり取りをする際に通信路が必要になる
また、通信する際に複数のPCと通信するには交換機が必要

## 回線交換方式
送信元から送信先にまで至る経路を交換機が繋ぎ、通信路として固定する方式

## パケット交換方式
パケットという単位に分割された通信データを交換機が適切な回線へ送り出す方式
パケットにすることでデータ量を小さくでき、回線待ちの間にパケットを交換機に蓄積しておける

## 専用線
拠点間を専用回線で結ぶサービス
回線速度と距離によって費用が決まる
セキュリティは高いが非常に高額

## フレームリレー方式
パケット交換方式をベースに伝送中の誤り制御を簡略化し、高速化を図ったもの
データ転送の差異には可変長フレームを用いる

## ATM交換方式（セルリレー方式）
パケット交換方式をもとに、データ転送の単位を可変長ではなく、固定長のセル（５３バイト）とすることで高速化を図ったもの
パケット区間方式に比べて伝送遅延は小さい

## 広域イーサネット
LANで一般的に使われるイーサネット技術を用いて拠点間を接続するもの
高速かつ一般的に使用される機器をそのまま使えるのでコスト面のメリットが大きい

#LANの接続形態
### スター型
ハブを中心に放射状にコンピュータを接続する形態
イーサネット100BASE-TXや1000BASE-Tという規格でつかわれる
テレビ線みたいなケーブルでバス型に比べると太い

### バス型
一本の期間となるケーブルに各コンピュータを接続する形態
イーサネット10BASE-2や10BASE-5という規格などでつかわれる
テレビ線みたいなケーブルでスター型に比べると細い

### リング型
リング状にコンピュータを接続する形態
トークリングという規格などでつかわれる
電話線のような見た目のケーブル

# イーサネット
LANの規格で現在もっとも使われている
IEEE（米国電気電子技術者協会）によって標準化されている
伝送速度にはbpsという単位が使われ、一秒間に送ることができるデータ量（ビット数）をあらわす

## CSMA/CD方式
イーサネットのアクセス制御方式として使われる
Carrier　Sense Multiple Access / Collision Detectionの略
この方式ではネットワーク上の通信状況を監視して、ほかに送信をしているものがいない場合に限りデータの送信を開始する
同時に送信を行ったときに衝突（コリジョン）が発生した場合、時間をおいて再度送信する
この方式の利点は一本のケーブルを複数のコンピュータで共有できること

## トークリングとトークンパッシング方式
トークリングとはリング型LANの代表格、アクセス制御方式にトークンパッシング方式をつかう
トークンという送信の権利をネットワーク内で回しており、これをデータにつけて送信する
データを受信したら、トークンはネットワーク内を回る
データにトークンが付いた状態を**ビジートークン**
ついていない時を**フリートークン**


## 暗号化方式
### WEP
Wi-Fiの暗号化規格として最初に採用された方式
数分で暗号が解かれる可能性があるので使用は非推奨
64/128bit

### WPA
WEPのセキュリティ面を向上させた規格
脆弱性は変わらないので使用は非推奨
TKIP 128bit
AES 128/192/256bit

### WPA2
WPAを改良した規格
現在の主流でAES方式を使用することでより安全
TKIP 128bit
AES 128/192/256bit

### WPA3
WPA2で発見された脆弱性を解消した規格
個人用と企業用の二種類がある
AES 128/192/256bit

# SSID
Service Set IDentifierの略
無線LANの固有名称
SSIDを隠して使うSSIDステルスという機能がある

## 無線LAN
ケーブルを必要とせず、電波などを使い無線で通信を行うLANのこと
IEEE802.11シリーズをして規格化されている
ただし対策をしていないと電波の盗聴の恐れがある

### インフラストラクチャ通信モード
アクセスポイントを介して通信を行うモードのこと

### アドホック通信モード
アクセスポイントを介さず機器同士で直接通信を行うモード

# クライアントとサーバー
## 集中処理
ホストコンピュータが集中的に処理をしてほかのコンピュータはそれにぶら下がる構成
○メリット
・データの一貫性を維持管理しやすい
・セキュリティの確保や運用管理が簡単
○デメリット
・システムの拡張が大変
・ホストコンピュータが故障するとシステム全体が止まる

## 分散処理
複数のコンピュータで負荷を分散させてそれぞれで処理を実行する構成
○メリット
・システムの拡張が簡単
・一部のコンピュータが壊れても全体には影響しない
○デメリット
・データの一貫性を維持管理しづらい
・セキュリティの確保や運用管理が大変

## クライアントサーバシステム
集中的に管理したほうが良い資源やサービスを提供する**サーバ**
必要に応じてリクエストを投げる**クライアント**
上記二種類のコンピュータで処理を行う構成のことをクライアントサーバシステムと呼ぶ
現在の主流となっている
🍜多箇所展開の商品を確認するツールを作る🥟

こんにちは。某小売業で冷凍バイヤーをしています K-ji です。
最近はちょこちょことテレビでも冷凍食品が特集されることが増えてきました。
ホント便利でおいしいのですが、売場には商品がたくさんある上に
商品の売場展開もあちこちにあって従業員も探すのが大変なんです。

**▼同じお店でも離れた場所に2箇所ある商品もあったりします。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/e7d1c605-dde3-b1da-7009-4ed949894d7e.png)

## 今回の取組🚩
あちこちに配置された商品は入荷時の仕分けや出すときに偏って出たり、
片一方は欠品したりと管理が難しい要因になっているので
商品が他の場所にも出ていないか、確認するツールを作りたいと思いました。

## 使用したツール🔧
:::note info
・TeachableMachine
・codepen
:::
## 実施したこと🚀
:::note warn
**スマホで商品画像を映すと「定番だけ展開」か「２箇所展開」かを教えてくれる。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/82357e6d-e056-18dd-e782-82b2b1afa76f.png)

※下記リンクはPC版で実施の動画です。
https://x.com/i/status/1838531011266875700

:::

## 実施手順🎫
**(1)Teachable Machineで画像を認識させて、画像判断をさせる。
(2)codepenでアプリ化
(3)アプリ化したURLをスマホのブラウザで開くとスマホのカメラで使用できます。**

 ## 実施内容🎟

今回は微妙に似たものが多い商品で２箇所以上で展開の商品を学習させます。(下記3品)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/9d831d4f-20ae-4a3d-b98f-a76775f90069.png)

**(1) Teachable Machineで画像学習**
**①クラスは「２箇所展開商品」と　「定番だけ展開」の２つでそれぞれサンプル追加**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/554868e7-16e0-ed46-8b48-3a0f2f228e11.png)

:::note info
２箇所展開の商品は上記の３品で登録
その他の判定はこの３品以外の棚割の写真等で複数登録しました。
:::

**②サンプル追加後　モデルをトレーニングします。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/0a3b48a5-62af-2765-f989-6c1feee16d10.png)

**③モデルをエクスポートで保存します。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/deb27560-2d7f-f6e8-2657-f33997d1ce3a.png)

**④共有可能なリンクをコピーします**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/ce4efab7-aea2-2208-f641-9d0accb629f7.png)

**④codepenを開いて先ほどの①リンクを貼り付け②タイトル名称を変更します。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/d1aa7288-f8e5-b75f-c2a2-8f4f7e318de4.png)

**⑤PCのカメラに判定したい商品を映すと展開状況がかえってきます。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/e7646abd-5f19-ef76-fa3b-abd58a0f2198.png)

:::note info
2箇所で勉強させた商品以外は「定番だけ展開」で返されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/19ba7443-2085-c849-a2d6-928167b30941.png)
:::

:::note warn
**codepenのURLを自分のメールに送り
スマホで開くと携帯電話のカメラで使用できます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/62a4d5f2-ab0f-9f19-29b0-7cce9ba9f3cb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/d9903fa6-0307-1fa6-0c40-5d086f48e7eb.png)
:::

## 最後に🌈
実際は複数展開の商品は多数あるのですが、ラーメン・パスタなどパッケージが
似た商品が多数あるので、物の判別には非常に良いツールと感じています🍔

スマホでも見れるようにしましたが、これを使用すれば
売場での様々な事象が判定できると感じました。
この機能を使って売場業務での改善事項の深堀を実施したいと思います。

(ex)・・・背景、使用イメージの説明はないですが、こんな感じがるといいかな？
・棚割の整合　(陳指通りか？)
・パケージが似てるリニューアル商品の「新・旧」パッケージの見極め(JAN違う物)
・商品の通常時の売価確認

そして便利な機能なので、汎用性を高めるためにももう少し
他のツールとの組み合わせができるようになればと思いました。
チームの振り返りでカラオケやってみた

## はじめに

私は長年開発者としてスクラムに関わってきましたが、先日新米のスクラムマスターとして今のチームにjoinしました。
チームの振り返りでカラオケをやってみたので、今回はその様子や感想を共有します。

## カラオケをやることになった経緯

以前の振り返りで「しばらくKPTをやっていたが、他の手法も試して自分たちに合ったものを探したい」という話があったそうです。
私は社内の他のチームでカラオケという手法をやっている、という話を聞いたことがあったため、チームメンバーに紹介し試してみようということになりました。

## カラオケについて

カラオケは振り返り手法の一つです。
実際にみんなでカラオケをするわけではありません笑

詳細は以下のリンクを参照してください。

https://confengine.com/conferences/scrum-fest-sendai-2024/proposal/20297

## カラオケやってみた

今回は以下のような流れでオンラインで行いました。

- 最初に今スプリントで起こった出来事をおさらい（タイムラインっぽく）
- カラオケの説明
- カラオケ本作り（5分）
- カラオケ実施（1時間） 
- Tryについて議論

今回やってみたボードの様子

![IMG_1838.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492676/150b5400-2b10-bdff-a068-54a25b5ccfd4.jpeg)


## やってみての感想

### いいなと思ったところ

話し合い候補になるカラオケ本作りは特に決まりもなく縛りがないため、やる前はあまり付箋が出ないかなと思っていましたが、そんなことはなく多くの付箋が出てきました。
時間いっぱい議論が行われ、１つひとつについても盛り上がり活発な場になりました。
メンバーからは「すぐ話し合いに繋がっていい」という意見もありました。

### うまくいかなかったと思ったところ

歌い終わった付箋の中からTryにつながる話をしようとすると難しかったです。
自分もKPTが長かったせいで、つい議論した付箋の中からTryを出そうと考えがちでした。
別途Tryの議論は歌い終わったものに縛らず、別で考えるのが良さそうでした。

## おわりに

ざっくばらんに話がしたい！というチームがあれば、ぜひやってみてほしいなと思いました。

自分が想像していたよりも話し合いは活発にされて、ノンジャンルで話せるので、チームの関係性を深めるのにも一躍買ってくれる手法だなと思いました。

他にも良さそうな振り返り手法があれば、チームに提案してより良いものを試して行けたらと思います。