OmniAICreator/Qiita-1.07M huggingface dataset:
ナレッジの共有

+ [カテゴリー（Category）のまとめ](https://qiita.com/Keiji_otsubo/items/abdd926d6abfd9d898bf)

+ [ナレッジの共有方法に関する問題について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmL7U)

:::note
プロファイルだけでは、データ カテゴリの表示設定を制限できないというのが正解で、ヘルプの修正がされた？ようですね。

Doc Fix: Unable to restrict Data Category visibility settings with only profiles

https://issues.salesforce.com/issue/a028c00000qQ0exAAC/doc-fix-unable-to-restrict-data-category-visibility-settings-with-only-profiles

ナレッジ記事の表示とデータカテゴリに関する考慮事項
https://help.salesforce.com/s/articleView?id=000382931&type=1
:::

+ [ナレッジ記事のトピック名の取得SOQL](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HDzwI)
VLOOKUP 関数

[VLOOKUP](https://help.salesforce.com/s/articleView?id=sf.customize_functions_vlookup.htm&type=5)

+ [数式項目でVlookupを使い、関連オブジェクトの値を出力したい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmOCn)

:::note alert
エラー: 関数 VLOOKUP は、この種類の数式では使用できません。
:::

:::note
VLOOKUP関数は入力規則の数式でのみ使用できますので、数式項目では使用できません。
:::
Djangoでスクレイピングをする

# はじめに

こんにちは、エンジニアのkeitaMaxです。

前回、Djangoの環境をDockerで構築して、カスタムコマンドと定期実行を作成しました。

今回は、カスタムコマンドを使ってスクレイピングをしたいと思います。

前回の記事

https://qiita.com/keitaMax/items/d30d2ba23ae5e7d7a65c

# コマンドの作成

`scraping`というコマンドを新しく作成しました。

```py:scraping.py
from django.core.management.base import BaseCommand

class Command(BaseCommand):

    def handle(self, *args, **options):
        print("scraping")
```

カスタムコマンド作成については前の記事をご覧ください。

https://qiita.com/keitaMax/items/c898d0364cd153f90e9d

# スクレイピングの作成

### ライブラリインストール

`BeautifulSoup`というライブラリを使用して作成します。

以下のコマンドでインストールします。

```
pip install requests beautifulsoup4
```

ついでに`requirements.txt`ファイルにも記載しておきます。

```txt:requirements.txt
Django==5.0

apscheduler
mysqlclient
requests
beautifulsoup4

```

### コマンド修正

　先ほど作成した`scraping.py`ファイルを以下のように修正します。

```py:scraping.py
from django.core.management.base import BaseCommand
from bs4 import BeautifulSoup
import requests

class Command(BaseCommand):
    def handle(self, *args, **options):
        res = requests.get('https://tankomayan.qboad.com/')
        soup = BeautifulSoup(res.text, 'html.parser')
        title_text = soup.find('title').get_text()
        print(title_text)
```

`https://tankomayan.qboad.com/`は自分で運営しているサイトです。

このサイトのtitleをとるような処理になります。

ちなみにこのサイトのtitleは以下の感じです。

![スクリーンショット 2024-07-20 11.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/f7d62d78-4449-04c2-9a22-d1f443458188.png)

`たんこまゃん-TOP`という文字列が取れたら成功です。

### 実行

以下のコマンドでカスタムコマンドを実行してみます。

```
python3 manage.py scraping
```

結果は以下のようになりました。

```
root@aa175d699bf9:/code# python3 manage.py scraping
ããã¾ãã-TOP
root@aa175d699bf9:/code# 
```

`ããã¾ãã-TOP`と日本語部分が文字化けしてしまいました。

# 文字化けの修正

以下のように`scraping.py`１行を追加しました。

```py:scraping.py
from django.core.management.base import BaseCommand
from bs4 import BeautifulSoup
import requests

class Command(BaseCommand):

    def handle(self, *args, **options):
        res = requests.get('https://tankomayan.qboad.com/')
        soup = BeautifulSoup(res.text, 'html.parser')
        soup = BeautifulSoup(res.content.decode("utf-8", "ignore"), "html.parser")　# 追加
        title_text = soup.find('title').get_text()
        print(title_text)
```

これでコマンドを叩いてみます。
```
root@aa175d699bf9:/code# python3 manage.py scraping
たんこまゃん-TOP
root@aa175d699bf9:/code# 
```

無事`たんこまゃん-TOP`を取得することができました。


# おわりに

スクレイピングが簡単にできました。

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました！

# 参考

https://qiita.com/Chanmoro/items/db51658b073acddea4ac

# 次の記事
超難問！more-itertoolsクイズ

Pythonのサードパーティのモジュールである`more-itertools`（バージョン10.3.0）の**クイズ**を作成しました。
下記から試せます。

https://forms.gle/4jGifHXSeg3Nuvbs7

全10問の四択問題です。
かなり難しいと思います。

more-itertoolsについては、下記を参照してください。

https://more-itertools.readthedocs.io/

https://qiita.com/SaitoTsutomu/items/ddb5076ef62745f03b56

more-itertoolsについて興味を持ってもらえれば幸いです。
メータデータのリリース

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)


+ [メータデータのリリース方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmOhq)

エラー：B.A カスタム項目 取引先責任者 にはすでに XXXXX という子リレーションがあります。

今Bは削除しましたが、Aで標準項目以外も`カスタム項目もない、環境DEV02でXXXXX を検索して何も出ません。

:::note
以下の投稿をみると削除しても復元したい場合に備えて、15 日間は完全には削除されないようです。通常の環境だとSalesforce Classic に切り替えて完全に削除できるのですが...

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8P7CSAV
:::
Javaで「メソッドのオーバーロード」の動作を確認してみた

# 概要

Javaで「メソッドのオーバーロード」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index8.html

# 実装

以下のファイルを作成しました。
```JSample8_1.java
class JSample8_1{
  public static void main(String args[]){
    System.out.println(plus(10, 7));
    System.out.println(plus(3.2, 4));
    System.out.println(plus(7, 1.223));
    System.out.println(plus(5.08, 2.4));
  }

  private static int plus(int n1, int n2){
    System.out.println("int + int");
    return n1 + n2;
  }

  private static double plus(int n1, double d1){
    System.out.println("int + double");
    return n1 + d1;
  }

  private static double plus(double d1, int n1){
    System.out.println("double + int");
    return n1 + d1;
  }

  private static double plus(double d1, double d2){
    System.out.println("double + double");
    return d1 + d2;
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample8_1.java 
$ java JSample8_1 
int + int
17
double + int
7.2
int + double
8.223
double + double
7.48
```

# まとめ

何かの役に立てばと。
Next.js初心者必見！ゼロから学べる実践入門

はじめに
---
Next.jsは、Reactをベースにした人気のフレームワークで、サーバーサイドレンダリング（SSR）や静的サイト生成（SSG）などの機能を提供しています。

ページとルーティング
---
Next.jsでは、pagesディレクトリ内のファイルが自動的にルートとなります。
```
pages/
  index.js
  about.js
```
`pages/index.js`はルートURL（/）に対応します。
`pages/about.js`は/aboutに対応します。

静的サイト生成（SSG）
---
ビルド時にHTMLを生成します。
getStaticPropsを使ってデータをフェッチし、ページを静的に生成します。
`ビルド(build)`:ソースコードやその他のリソースを最終的なプロダクトに変換するプロセス
`getStaticProps`:ページコンポーネントのエクスポートとして定義される非同期関数
リクエスト時にサーバーがHTMLを生成する必要がなくなります。

サーバーサイドレンダリング（SSR）
---
リクエスト時にHTMLを生成します。
getServerSidePropsを使ってリクエスト時にデータをフェッチし、サーバーサイドでレンダリングします。
`getServerSideProps`: ページコンポーネントのエクスポートとして定義される非同期関数
デプロイメント後のリクエスト時にデータフェッチが行われます。

APIルート
---
pages/apiディレクトリ内にAPIエンドポイントを作成できます。これにより、フロントエンドとバックエンドのロジックを同じプロジェクト内で管理できます。

基本的なディレクトリ構成
---
``` 
my-nextjs-app/
├── public/
│   ├── assets/        # 画像やフォントなどの静的ファイル
│   └── favicon.ico    # サイトのファビコン
├── src/
│   ├── components/   # 再利用可能なReactコンポーネント
│   ├── pages/        # ページコンポーネント（ルーティングを自動管理）
│   │   ├── api/      # APIルート
│   │   ├── _app.js   # カスタムAppコンポーネント
│   │   └── _document.js # カスタムDocumentコンポーネント
│   ├── styles/       # グローバルなスタイルやCSSモジュール
│   ├── utils/        # ユーティリティ関数やカスタムフック
│   └── hooks/        # カスタムReactフック
├── .gitignore        # Gitで無視するファイルやディレクトリ
├── next.config.js    # Next.jsの設定ファイル
├── package.json      # プロジェクトの依存関係とスクリプト
└── README.md         # プロジェクトの説明
```

まとめ
---
Next.jsは、Reactの強力な機能に加えて、サーバーサイドレンダリングや静的サイト生成などの高度な機能を提供し、モダンなWebアプリケーションの開発をサポートします
Ubuntu 20.04でPython3.6をインストールしようとして詰まった話

# はじめに
Ubuntu Server 20.04でわけあってPython3.6をインストールしようとしたら、
いろいろ大変だったので備忘録としてここに残そうと思う

# ネットでよく見る`apt`からする方法(失敗した方法)
Ubuntuでは一般的に何らかのパッケージをインストールするときは`apt`パッケージマネージャーを使うが、
**Ubuntu 20.04での`apt`の公式リポジトリからはすでにPython3.6がなくなっている**

ネットでは、**Python3.6を提供しているPrivate Package Archiveである`deadsnake/ppa`をリポジトリに追加して`apt install python3.6`する**ことでこれを解決している記事が多いが、
自分の環境ではリポジトリの追加まではできても、**python3.6というパッケージがレポジトリに追加されることは無かった**

これは、[`deadsnake/ppa`のドキュメント](https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa)を見る限り、
**Ubuntu 20.04ではPython 3.6がサポート対象外になっているから**だと考えられる

一応こちらの方式でのやり方も記述しておく

### 1. `deadsnake/ppa`を`apt`リポジトリへ追加
```
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
```
### 2. Python 3.6のインストール
```
sudo apt install python3.6
```

# Python公式のソースコードからインストールする方法(成功した方法)
`apt`からインストールすることができなかったので、初心に帰って(?)ソースコードからコンパイルしてインストールすることにした
実際のやり方は[こちら](https://phoenixnap.com/kb/how-to-install-python-3-ubuntu)を参考にして以下の手順で行った

### 1. インストールに必要な依存関係をインストール
```
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
```

### 2. ソースコードのダウンロード
Ubuntuでは`/tmp`がダウンロードしたプログラムのソースコードを一時的に置く場所として一般的らしいのでそこにダウンロードしてくる
```
cd /tmp
wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz
```

### 3. ソースコードの解凍
```
tar -xf Python-3.6.15.tgz
```

### 4. システムの検証とPythonの最適化
```
cd Python-3.6.15
./configure --enable-optimizations
```

### 5. Pythonのインストール
[公式ドキュメント](https://docs.python.org/ja/3.6/using/unix.html)にもあったが、`make install`でもインストールできるが、既存のPython3バイナリを上書きしてしまう可能性があるので、以下のコマンドで、**`/usr/bin/python3.6`のみをインストールした**

```
sudo make altinstall
```
...するとなぜか、**Python3.6.15の場合Segmentation faultが起きて途中でインストールもといコンパイルが終了する**

### 6. Segmentation faultへの対処
ここで(も)[先人の知恵](https://blog.jp.square-enix.com/iteng-blog/posts/00003-python3_6-gcc-11/)をお借りして、この方がやったように**外部からのパッチファイルを適用してコンパイルを実行する**
ただ、この方は`pyenv install`のpオプションを利用してパッチ、コンパイルを行っているが、こちらはそうではないため、**直にパッチをあてる**
といってもやることは愚直に、当該ファイルを書き換えるだけで具体的には以下の二つをやるだけ

1. `./Include/objimpl.h`の258行目のdummy変数の型をlong doubleに変更
2. `./Objects/obmalloc.c`の653行目以降を[このように](https://github.com/python/cpython/commit/f0be4bbb9b3cee876249c23f2ae6f38f43fa7495)変更

そして、再度`sudo make altinstall`して無事 **``/usr/local/bin``** 内にインストール完了!
4:3サイズのエリアをブラウザいっぱいに画面全体に表示する方法

# はじめに

ゲームっぽいウェブアプリを作っています。

４：３の比率で作成されたマップ画像をブラウザの画面いっぱいに表示したいです。

つまり、下記のようなことをしたいです。
* ブラウザのウィンドウが横長の時は、左右に余白をつけて、上下は余白なし
* ブラウザのウィンドウが横長の時は、上下に余白をつけて、左右は余白なし

以下、Chromeでの実験結果です。

# 4:3のエリアをブラウザ内いっぱいに表示する方法

ChatGPTに聞いたところとても良いソリューションを教えてくれましたので、ここで共有します。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body, html {
            height: 100%;
            margin: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: black; /* 背景色を設定してエリアを際立たせる */
        }
        .container {
            width: 100vw;
            height: 75vw;
            max-width: 133.33vh;
            max-height: 100vh;
            background-color: lightgray; /* テスト用の背景色 */
        }
    </style>
</head>
<body>
    <div class="container">
        <!-- コンテンツをここに追加 -->
        <p>ここに内容を追加します。高さが小さすぎる場合にはスクロールバーが表示されます。</p>
    </div>
</body>
</html>
```

`body`, `html` でまず子要素を`flex`化し、左右も上下もセンタリングするように指定しています。

## 縦長の場合

そして、子要素となる `.container` クラスが面白いです。

まずは縦長の場合の４：３エリア設定です。

`width: 100vw`, `height: 75vw` で、４：３のサイズを指定しています。ここで単位にどちらも`vw`を使っているのがミソです。`vw` はブラウザ内の表示エリアの横幅を%で指定する単位です。高さに対しても横幅基準で設定することで４：３を実現しています。

開発中のウェブアプリに適用したのが下記です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/957245/402786fa-c141-289e-440d-7f80f26efef5.png)


## 横長の場合

これだけだとブラウザが横長の時には子要素の高さが大きすぎて画面をはみ出してしまいます。

この対策が `max-width: 133.33vh` と `max-height: 100vh` です。こんどは `vh` を単位としているところがミソです。高さは最大 `100vh`、つまりブラウザの表示エリアの高さまでとし、横幅の最大値も高さ単位で133% とすることで４：３を実現しています。

先ほどのウェブアプリで、ブラウザのサイズを変えてみると次のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/957245/3f51c831-c91d-c4de-f00f-8fdb5603871f.png)


私はこれでうまくいきました。

なお、ブラウザの横幅や高さが小さくなり過ぎたらこの指定をやめてスクロールに切り替えたいと思いましたが、 `min-width: 300px` などとしただけではうまくいきませんでした。JavaScriptの支援が必要かもしれません。

おわり。
LLMsの新たな評価フレームワーク：機能近似器としての役割と可能性

# LLMs as Function Approximators: Terminology, Taxonomy, and Questions for Evaluation

今回は、最新の研究成果である「LLMs as Function Approximators: Terminology, Taxonomy, and Questions for Evaluation」という論文をご紹介します。この研究は、LLMs（大規模言語モデル）がどのように機能を近似するかを探求し、それが評価にどのような意味を持つかを論じています。

### 論文情報
- **タイトル**: LLMs as Function Approximators: Terminology, Taxonomy, and Questions for Evaluation
- **リンク**: [arXiv:2407.13761](https://arxiv.org/abs/2407.13761)
- **発表日**: 2024年7月18日
- **著者**: David Schlangen
- **DOI**: 10.48550/arXiv.2407.13761

## 背景と目的

自然言語処理（NLP）の分野は、過去数年間で飛躍的な進展を遂げました。特に、GPT-3.5やGPT-4の登場により、LLMsが「人工汎用知能」としての期待を集めています。しかし、これらのモデルが実際に何をモデル化しているのか、どのように評価すべきかについては明確な理解が不足しています。この論文は、LLMsを「機能近似器」として再評価し、その有用性と限界を明確にすることを目的としています。

### 研究の背景

現代のLLMsは、多様なタスクに対して驚くべき性能を発揮します。しかし、これらのモデルがタスクをどのように処理し、どの程度汎用的に対応できるのかを理解するためには、新しい評価フレームワークが必要です。特に、モデルの安定性、発見性、保護性を評価することは、実世界の応用において重要です。

## 研究の焦点

この研究の主な焦点は、LLMsを「機能近似器」として捉え、その評価方法を再考することです。具体的には、以下のような問いに答えます。

- LLMsはどのように特定のタスクを近似するのか？
- その近似の質はどのように評価されるべきか？
- モデルの発見性、安定性、保護性に関する質問はどのようにフレーミングされるべきか？

## 実験の概要と結果

研究では、以下の実験と結果が示されています。

1. **タスクの分類**: タスクを変換タスク、分類タスク、付加タスク（再現性のある付加と創造的付加）に分類しました
2. **プロンプト誘導関数の特定**: プロンプトを用いてモデルから特定の関数を誘導する方法を定義し、その過程を分析しました
3. **評価フレームワークの提案**: 提案されたフレームワークを用いて、LLMsの評価方法を実証しました

実験では、モデルが提示されたプロンプトに基づいて、いかにして特定のタスクを遂行するかを詳細に分析しました。

## 賛否両論
**賛成意見**

- 新しい評価フレームワークは、LLMsの特定の能力をより正確に評価する方法を提供します
- タスクの分類が明確であり、異なるタスクタイプに対するモデルの性能を比較しやすくしています

**反対意見**

- 提案された評価方法は、実際の応用におけるすべての側面をカバーしていない可能性があります
- 一部のタスクは分類が難しく、分類間の境界が曖昧です

## 関連研究との比較

この研究は、LLMsを機能近似器として捉える新しい視点を提供していますが、関連する先行研究との比較も重要です。例えば、Bubeck et al.（2023）の「Sparks of Artificial General Intelligence」では、LLMsの汎用性について議論されていますが、本研究はより具体的な評価フレームワークを提供しています。また、HELM（Liang et al., 2023）のような評価手法との違いも明確にしています。

## まとめ

この研究は、LLMsを機能近似器として捉える新しい視点を提供し、それが評価方法にどのように影響するかを示しています。提案されたフレーミングと評価方法が、LLMsの性能をより深く理解し、改善するための一助となることを期待しています。

この記事が皆さんの研究や実務に役立つことを願っています。ご質問やフィードバックがありましたら、コメント欄にお寄せください。
イベント操作で画像を表示するようにする。

お疲れ様です。

今日は自分で考えたもので、いずれかのラジオボタンを選択すると画像が表示されるというものを実装してみたいと思い、あれやこれやとコードを書いています。

![215.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/95f20c4b-9d1b-258d-b380-fb76916371ea.png)
![211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/d0ba48f6-6fa4-1d75-ae99-207658030f86.png)

ラジオボタンを div で囲わずにcssで justify-content: space-between を書いたらボタンが離れてしまいました…
各ボタンを div で囲って justify-content: space-between を指定するとちゃんとボタンがついてきてくれました。
縦並びだとそんな必要はないかなと思いましたが、均等に間をあけるようにする時には、囲うことが必要なのだなと勉強になりました。
![214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/06aeb443-58d8-df17-3380-6afb27de9efc.png)

その後ボタンを作って、JSで addEventListener を使って「選択」の下に画像を表示するように設定しているのですが、エラーが解消できずまだ実装できていません…
エラー内容を確認し、実装するのも勉強だし、コードの1つ1つの確認やスペルミスもないか確認する癖をつけていかなければ。
![216.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/ce62cf52-6f6e-0b66-2d88-23c838ce2685.png)
Embarcadero Dev-C++ で TDM-GCC 10.3.0 を使う

## なぜ Embarcadero Dev-C++ なのか
元々Borlandが好きだったからその流れで（ぉ
最近のVisualStudioなどの開発環境をセットアップした時の容量が大きいのですが、少ないとOSを再インストールした時にもサクッとコピーすればいい手軽さが楽です。それでも600MB程度はあるんですよね・・・。
32bitでもよいなら、https://www.embarcadero.com/jp/free-tools/ccompiler という選択肢もあります。

## 必要なツール
7zipが必要です。

https://7-zip.opensource.jp/

## Dev-C++のダウンロードと展開
https://github.com/Embarcadero/Dev-Cpp/releases

上記から、Embarcadero_Dev-Cpp_6.3_No_Compiler_Portable.7zをダウンロードします。
7zipを使って、任意の場所にファイルを展開します。

## 日本語の文字化けを直す
Lang\Japanese.lngをエディタで開き、「Lang=日本語」を「Lang=Japanese (日本語)」に変更し保存します。下記を参考にしました。

https://qiita.com/ht_deko/items/7de6f946e4b718fd4ca4

## TDM-GCCのダウンロードとインストール
https://jmeubank.github.io/tdm-gcc/download/

tdm64-gcc-10.3.0-2.exeをダウンロードし実行します。次のことに注意します。

1. Createで32-bit and 64-bitを選ぶ
2. インストール先はC:\TDM-GCC-64にする
3. gccのopenmpにチェックを入れる
4. gdb32にチェックを入れる
5. StartMenu itemsとAdd to Pathのチェックを外す
6. Dev-Cppを展開したフォルダにTDM-GCC-64フォルダを作る
7. C:\TDM-GCC-64フォルダを開き、__installerとshare以外のファイル及びフォルダをTDM-GCC-64にコピーする
8. devcppPortable.exeを起動する ※devcpp.exeを起動するとレジストリを使うので触らない
9. 一旦終了する
10. C:\TDM-GCC-64フォルダを開き、shareフォルダをTDM-GCC-64にコピーする
11. アプリケーションの追加と削除から、TDM-GCCをアンインストールする

## おわりに
よきプログラムライフを！
![SnapCrab_NoName_2024-8-15_1-13-3_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842880/b83b74df-af96-59fb-41c0-0611c6fa5f54.png)
【Unity】Androidでビルドした時に「A problem occurred configuring project ':unityLibrary:xrmanifest.androidlib'.」エラーの解消法

UnityでAndroidでビルドすると
```
A problem occurred configuring project ':unityLibrary:xrmanifest.androidlib'.
```

というエラーが出るときがある。
この時は「C:\Users\ユーザー名\.gradle\caches」フォルダの中を削除するとうまくいく
一般的な幾何学意識を備えた弱教師付き3Dオブジェクト検出法の紹介

# General Geometry-aware Weakly Supervised 3D Object Detection

今回は、最新の研究成果である「General Geometry-aware Weakly Supervised 3D Object Detection」という論文をご紹介します。この研究は、3Dオブジェクト検出の分野で大きな前進を遂げるものであり、特にアノテーションの労力を大幅に削減するための手法を提案しています。

### 論文情報
- **タイトル**: General Geometry-aware Weakly Supervised 3D Object Detection
- **リンク**: [論文リンク](https://arxiv.org/abs/2407.13761)
- **発表日**: 2024年7月18日
- **著者**: Guowen Zhang, Junsong Fan, Liyi Chen, Zhaoxiang Zhang, Zhen Lei, Lei Zhang
- **DOI**: 10.48550/arXiv.2407.13761

## 背景と目的
3Dオブジェクト検出は、シーン理解に不可欠な技術であり、自動運転やロボティクスなど多くの応用分野で重要です。しかし、大規模な3Dデータセットのアノテーションには膨大な人的労力が必要です。この問題を解決するために、多くの方法が2Dボックスとシーンやクラス特有の事前情報を利用して3Dボックスを推定する弱教師付き3Dオブジェクト検出を採用しています。しかし、これらのアプローチは一般に複雑な手動の事前情報に依存しており、新しいカテゴリやシーンに一般化するのが難しいという課題があります。

## 研究の焦点
本研究の主な焦点は以下の3点です：
1. **事前情報注入モジュール**: LLM（大規模言語モデル）から一般的なオブジェクトの幾何学的事前情報を取得し、それを利用して3Dボックスを推定します。具体的には、GPT-4などのモデルから取得したセマンティック比率情報を使用します
2. **2D空間投影制約**: 予測された3Dボックスの投影境界と対応する2Dボックスの間の不一致を最小化します。これは、投影された3Dボックスのワイヤーフレームが2Dボックスの境界と一致するようにするものです。
3. **3D空間幾何制約**: 予測された3Dボックスの位置をさらに精緻化するために、ポイントとボックスのアライメントロスを導入します。これにより、3Dボックスがポイントクラウドに対して正確にアラインされます。

## 具体的な技術解説
### 事前情報注入モジュール
このモジュールは、LLMから取得したオブジェクトの幾何学的事前情報を利用します。例えば、物体の幅と高さの比率など、一般的な形状情報を提供することで、2Dと3D間の情報ギャップを埋めます。

### 2D空間投影制約
2D空間投影制約は、3Dボックスの投影されたワイヤーフレームが2Dボックスの境界と一致するように調整します。これにより、2Dから3Dへの変換がより正確になります。

### 3D空間幾何制約
3D空間幾何制約は、ポイントクラウドと3Dボックスの位置合わせを行います。これにより、予測された3Dボックスが正確に物体を囲むようになります。

## 実験の概要と結果
本研究では、KITTIとSUN-RGBDデータセットを使用して実験を行いました。以下に主要な結果を示します：

- **KITTIデータセット**: 弱教師付き手法でありながら、いくつかの完全教師付き手法に匹敵する、またはそれを上回る性能を達成しました。具体的な数値として、例えばAP3D(0.7)で、Easyカテゴリでは56.02、中程度では40.35、Hardカテゴリでは33.15という結果が得られました
- **SUN-RGBDデータセット**: 室内シーンにおいても優れた3Dオブジェクト検出性能を示しました。AP@0.25スコアは、全体で48.5を達成し、特にベッド(69.9)やテーブル(71.4)などのカテゴリで高い性能を示しました

### 賛否両論
**賛成意見**
- 本手法は、従来の手法に比べて大幅にアノテーションコストを削減できる点で非常に有望です
- 大規模言語モデルを活用することで、手動の事前情報に依存せずに一般化能力を向上させています

**反対意見**
- カメラから遠くにあるオブジェクトや、ポイントクラウドが少ないオブジェクトに対しては、依然としてロバスト性に課題があります
- 高密度のポイントクラウドを含むオブジェクトからの知識転移が今後の課題として残ります

## まとめ
この記事が皆さんの研究や実務に役立つことを願っています。ご質問やフィードバックがありましたら、コメント欄にお寄せください。また、関連する研究や興味深いテーマがありましたら、是非共有してください。

## 参考文献
1. [Language Models are Few-Shot Learners](https://arxiv.org/abs/2005.14165)
2. [nuscenes: A multimodal dataset for autonomous driving](https://arxiv.org/abs/1903.11027)
3. [Shapenet: An information-rich 3d model repository](https://arxiv.org/abs/1512.03012)
4. [Deep hough voting for 3d object detection in point clouds](https://arxiv.org/abs/1904.09664)
5. [FGR: Frustum-aware geometric reasoning for weakly supervised 3d vehicle detection](https://arxiv.org/abs/2012.11348)
6. [FPR: False positive rectification for weakly supervised semantic segmentation](https://arxiv.org/abs/2023.11065)
7. [Monocular 3D object detection leveraging accurate proposals and shape reconstruction](https://arxiv.org/abs/2019.10612)
Rubyで発生した例外クラスをまとめてみた

# はじめに
Rubyでコードを書いていて発生したエラーを自分用にまとめてみました。

# NameError
定義されていない変数や定数を呼び出そうとすると発生するエラー。
呼び出す変数の名前を間違ったりしてよく起こしました。

```ruby:変数名の間違い
name = "Taro"
#nameがnamaになっている 
p nama
```
```:出力
undefined local variable or method 'nama' for ...(NameError)
```

# NoMethodError
メソッド名を間違えた時や、呼び出せないメソッドを呼び出そうとしたときに発生するエラー。
個人的にはレシーバが想定に反してnilになっている場合が多かったです。

```ruby:メソッド名の間違い
a = [1, 2, 3]
#eachがeechになっている
a.eech do |n|
  sum += n
end
```
```:出力
undefined method `eech' for ... (NoMethodError)
```
```ruby:privateメソッドをクラス外部から呼び出す
class Private
  private

  def secret
    "秘密"
  end
end

private = Private.new
p private.secret
```
```:出力
private method `secret' called for ... (NoMethodError)
```
```ruby:レシーバがnilだった場合
a = nil

a.push(1)
```
```:出力
undefined method `push' for nil:NilClass (NoMethodError)
```

# TypeError
整数と文字を足そうとしたときのように、期待しない型がメソッドの引数に渡されたときに出るエラー。

```ruby:1と' 1 'を足す
1 + '1'
```
```:出力
String can't be coerced into Intager (TypeError)
```

# ArgumentError
引数の数が違ったり、期待する値でなかったときに発生するエラー。
```ruby:メソッドの引数が違う
def sum(a, b, c)
  a + b + c
end
#引数が少ない
sum(1, 2)
```
```:出力
wrong number of arguments (given 2, expected 3) (ArgumentError)
```

# SyntaxError
endやカンマの数が足りなかったり、カッコが閉じられていなかったときに発生するエラー。
```ruby:endが足りない
a = nil

if a == nil
   p "何もなかった！"
```
```:出力
syntax error, unexpected end-of-input, expecting `end'
```
【GitHub】ラベルを追加・編集・削除する方法

GitHubのリポジトリを開き、Issues > Labelsとクリックするとラベルを追加・編集・削除する画面が開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/bde273d6-65af-b054-f51b-3e361baf64c4.png)

![スクリーンショット 2024-07-21 23.57.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/4994af0b-3790-3505-0aae-ec322fa815b4.png)
エラー対処　System.ArgumentNullException: e

## 以下のエラーが出た際の対処法について

System.ArgumentNullException: e This Exception was thrown from a job compiled with Burst, which has limited exception support.

このエラーは直接的な原因がかなり分かりずらいです。
根本的な原因は不明な部分もありますが、ひとまず問題が起きた対象スクリプトと対処法だけは、メモを残します。

問題のスクリプト
```
[BurstCompile]
[WithAll(typeof(Simulate))]
partial struct ShortDistanceAttackEnemyJob : IJobEntity
{
    public float currentTime;
    public EntityCommandBuffer.ParallelWriter ecb;

    public void Execute(Entity entity, TargetEntity targetEntity, ref CharactorAttackProperties attackProperties,
        ref UnitBrain brain, ShortDistanceAttack shortAttack, [ChunkIndexInQuery] int sortKey) 
    {
        ecb.AddComponent(sortKey, entity, new CharactorAttackProperties { LastAttackTime = currentTime });
```

かなり省略して書いていますが、要はExcute内でAddComponentして、特定のcomponent内の変数設定すると、問題が発生しました。

仕方がないので、暫定的に以下のように記述することで、解決させました。
```
[BurstCompile]
[WithAll(typeof(Simulate))]
public partial struct ShortDistanceAttackEnemyJob : IJobEntity
{
    public float currentTime;
    public EntityCommandBuffer.ParallelWriter ecb;

    public void Execute(Entity entity, TargetEntity targetEntity, CharactorAttackProperties attackProperties,
        ref UnitBrain brain, ShortDistanceAttack shortAttack, [ChunkIndexInQuery] int sortKey) //entityは攻撃するEntity
    {
        ecb.AddComponent(sortKey, entity, new AttackLastTime { Value = currentTime });
```

別のコンポーネントを作成して、CurrrentTimeを格納しています。
あまり納得がいかないですが、これなら問題なく動くのと、他に解決方法が思い浮かばないです...
原因と解決方法が分かったら、本記事もアップデートしようと思います。
[Rails] マークダウン形式でtext_areaに入力できるようにする


# commonmarker

 - `gem commonmaker`をインストール 
 ```
 gem 'commonmarker'
 ```
 - helperに下記を記述
 ```module ApplicationHelper
  def markdown_to_html(text)
    html = Commonmarker.to_html(text)
    raw(html)
  end
end
```
- 例）show.html.haml
```
= markdown_to_html("# CommonMarker")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/fd44edd2-6589-33c2-5658-d29cded00577.png)

### 参考URL
https://github.com/gjtorikian/commonmarker

思いのほかサクッと実装できました。
何かご指摘あればお願いします！
JLCPCBで基盤を注文する

# はじめに
一関高専機械技術部ではJLCPCBのスポンサーシップに参加させて頂きました。
JLCPCBは、基盤制作、部品実装、３Dプリントなどのサービスを提供している会社です。今回は基盤の発注方法について解説します。

JLCPCBホームページ
https://jlcpcb.com/jp

スポンサーシップ
https://jlcpcb.com/help/article/152-how-to-apply-for-free-pcb

# 手順１
JLCPCPのホームページにアクセスし、画像左下のAdd gerber fileと書かれている場所にガーバーファイルをドラッグアンドドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/fe98e0a7-edca-15e8-4169-03183399040e.png)

# 手順2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/60ca8567-beb8-3669-277d-14efad9175c4.png)
注文する基盤の設定画面に飛びます。
画面上部には、ドラッグアンドドロップしたガーバーファイルの内容が反映されます。正しくファイルが出力できている場合、注文する基盤のPCBと同じように配線などが表示されるはずです。このとき基板設計CADの3Dビューアーと見比べるとミスがないか確認しやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/92b29dc9-1bef-dad5-3076-5bc8c5a9ed6e.png)

（画像はKicadの3Dビューアーを使用）


注文する基盤の設定はPCB Color（発注する基盤の色）とPCB Qty(発注する基盤の枚数)など、必要に応じて変更しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/a72f48a6-573c-58fc-1580-080578fd6496.png)

# 手順3
設定が全て完了したらいよいよ注文に入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/19911453-b4af-6929-df45-92ed1db9c585.png)

画面右のSAVE TO CARTと書かれた青いボタンをクリックします。
Sign inを促す画面が出てくるので、アカウントを作成していない場合はここで作成しましょう。
Sign inすると青いボタンをクリックした画面に戻るので、再度青いボタンをクリックし、注文する基盤をカートに入れます。
その後、カートに移動し、カートに注文する基盤が表示されていればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/e867759b-e164-6191-0d55-bc1e4ab6dd4d.png)
注文内容をクリックすると、チェックボックスにチェックが入り、SUMMARYに値段が表示されます。その状態でSecure Checkoutをクリックすると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/92870f19-b5a7-5deb-d8c0-1d0abf1b1031.png)

まず住所の入力画面に飛びます。
新規で住所を入力する場合は、+Add new shipping addressをクリックしてください。
届け先の住所を入力し、Same as shipping addressにチェックをつけたら右下のcontinueをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/7eb6577c-bbf3-0f8f-8efb-118d830cd4db.png)

次に、配送方法の選択画面に飛びます。
ここではどれを選んでもいいですが、OCS ExpressかOCS NEPが安くておすすめです。
配送期間は二週間程かかるので、注文するときは余裕をもって注文しましょう。

配送方法を選んだら、右下のcontinueをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/5a012a6c-de71-970e-2b9e-81bb6a8d1bec.png)
最後に、注文方法の選択に飛びます。
上の注文方法はファイルの審査を待たず、直接支払いが行われます。
下の注文方法はファイルの審査が行われたうえで支払うか決定できます。審査は最長で一日かかります。
今回は下の注文方法を選択し、右下のSubmit Orderをクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/30d1e568-5261-abc5-4b69-ac552d576a69.png)
無事にファイルの審査が終わると、支払いができるようになるので、Payを押して注文を確定しましょう。
手順は以上になります。お疲れさまでした。

# おわりに
今回はJLCPCBでの基盤の注文方法について解説しました。
前回注文した基盤は1週間ほどで届きました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/fd430385-d9e4-9903-e418-7f1b6ab37e49.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820428/89b40bcf-578d-d4e0-9c78-397113d0619a.png)

他にJLCPCBでは、３Dプリントや基盤の部品実装なども利用できます。皆さんもぜひJLCPCBを利用してみてください。
通信文に使用するByte配列変換について

# はじめに
通信文を作成する際にByte配列からInt型の変換、Int型からByte配列の変換する機会はとても多いです。手こずることはないと思いますが、同じような形、さらには一行で変換処理を行えればコードとしてはかなり見やすくなると思い、作成したものを紹介します。

# 拡張関数について
拡張関数とは、その型のパブリックメソッドのように使うことができる関数です。
基本的な書き方は以下のようになります。
~~~C#
public static class [拡張する型名]+Extend
{
    public static [返り値型名] メソッド名(this [拡張する型名] [引数名]　)
    {
        //処理
    }
}
~~~
staticクラスで宣言をすることができ、一つ目の引数の型名の手前に「this」をつけることによって一つ目の引数の型から派生するメソッドとして扱えます。

~~~C#
public static long ToLong(this int value)
{
    return (long)value;
}
//メインから呼び出す。
public static main(string[] args)
{
    int ival = 1;
    long lval =ival.ToLong();
}
~~~
このようにint型には「ToLong」はありませんが、拡張メソッドを作成したおかげで「ToLong」を呼び出すことができます。

# Int型からByte配列への変換
メインとしてはBitConverterを利用します。
Intの拡張メソッドとしてByte配列に変換するための「ToBytes」を作成しましょう。
~~~C#
public static byte[] ToBytes(this int value)
{
	return BitConverter.GetBytes(value);
}
~~~
ただBitConverterを使用してるだけと言われればその通りですが、コードで見た際に、一番左に来る内容が変数名であることに価値があると私は感じています。
またBitConverterの部分を別の処理（リトルエンディアン）などにしてもよいでしょう。
引数２以降も使用できるのでリトルにするかのフラグを用意するのもありですね。
# Byte配列からIntへの変換
またBitConverterを利用します。
Byte配列の拡張メソッドとしてIntに変換するための「ToInt」を作成しましょう。
~~~C#
public static int ToInt(this byte[] bytes,ref int curentIndex)
{
	int ret = BitConverter.ToInt32(bytes,curentIndex);
	curentIndex += sizeof(int);
	return ret;
}
~~~
こちらは変換元のByte配列以外にも現在の添え字をrefで受け取っています。そのため変換完了後に添え字をずらせる点が良いところです。
「BitConverter」をメインで使用してしまうと変換と変換の間に添え字をずらす処理を入れる必要があり、変換をやっているだけなのに別の処理が挟まりコードとして長くなってしまい、必要でない情報まで入ってしまいます。
しかし拡張を使うことによって、変換する変数名が一番左に行き何をどの順番で変換しているのかがわかりやすくなります。

# 実装
今回は一旦「int」「double」「DateTime」の変換を用意しました。
「ToBytes」においてはオーバーロードを利用することでどの型からも同じような形で呼び出せるようにします。
~~~C#
public static class UserConverter
{
	public static int ToInt(this byte[] bytes,ref int curentIndex)
	{
		int ret = BitConverter.ToInt32(bytes,curentIndex);
		curentIndex += sizeof(int);
		return ret;
	}
	public static double ToDouble(this byte[] bytes, ref int curentIndex)
	{
		double ret = BitConverter.ToDouble(bytes,curentIndex);
		curentIndex += sizeof(double);
		return ret;
	}
	public static DateTime ToDateTime(this byte[] bytes, ref int curentIndex)
	{
		DateTime ret = DateTime.FromOADate(bytes.ToDouble(ref curentIndex));
		return ret;
	}
	public static byte[] ToBytes(this int value)
	{
		return BitConverter.GetBytes(value);
	}
	public static byte[] ToBytes(this double value)
	{
		return BitConverter.GetBytes(value);
	}
	public static byte[] ToBytes(this DateTime value)
	{
		return BitConverter.GetBytes(value.ToOADate());
	}
}
~~~

# 使用例
Byteからの変換で添え字をずらしているため、連続して変換を呼び出しても未使用のデータから変換を行ってくれます。
~~~C#
public int Number{get:private set;}
public double Value{get:private set;}
public DateTime Date{get:private set;}
public void ConvertMessage(byte[] message)
{
    int index=0;
    Number=message.ToInt(ref index);
    Value =message.ToDouble(ref index);
    Date  =message.ToDateTime(ref index);
}
~~~
ABC363 日記

　新人競プロerの山田です。
　ABCDF5完、503位、perf1898、rate変動999→1142でした。

### [A問題](https://atcoder.jp/contests/abc363/tasks/abc363_a) [B問題](https://atcoder.jp/contests/abc363/tasks/abc363_b)
　はい。(ここまで5分22秒0ペナ)

### [C問題](https://atcoder.jp/contests/abc363/tasks/abc363_c)
　順列全探索しか思いつかないが、順列全探索にしてはn≦10という制約がそこまで小さくない。10!をグーグルに計算させたところ300万ぐらいだったので行けるか……？と思いながらnext_permutation使って実装。結果1748ms(制約2sec)で通った。あぶねえええええええ。
　Pythonでやってたら通ってなかったと思うとなんかズルした感もある。しかし言語間の有利不利も含めて競技なんだと割り切った。そうしないとこのあと焦る。ここまでで24分56秒0ペナ。（所要時間19分。結構かかってるな。何に時間取られたか覚えていない。日記はコンテスト当日に書くべきか）

　コンテスト終了後にツイッターで見かけたが、Pythonで通した人は200人に満たないらしい。そこまで攻めた制約にすることあるか。

### [D問題](https://atcoder.jp/contests/abc363/tasks/abc363_d)
　〇〇番目の回文数はなんですか問題。丁寧に実装しなければ自爆すると思って、コメントを多めにつけながらAC。ここまでで48分53秒0ペナ。（所要時間24分。デバッグに時間がかかった）
　350点問題にしてはかなり時間がかかった。ここまで丁寧にやるのが正解だと思った。

### [E問題](https://atcoder.jp/contests/abc363/tasks/abc363_e)
　島水没問題。5分ぐらい考えたがわからなかった。飛ばしてF問題を見た(点数差が50点しかないので、そこまで難易度差がないと思った)。
　解答見てもここでどうやってpriority_queueを思いつくのか不明。

### [F問題](https://atcoder.jp/contests/abc363/tasks/abc363_e)
　回文で数式を書け問題。
　これに手を付けたのが勝利の始まり。
　解法はすぐに浮かんだ。nの約数とそれを逆さ読みした数を、割れるときに割っていって、回文数が出てきたら数式を作れる。作れなかったら戻って別の逆さ読み約数で割れるものを探す、というのを再帰関数を書くという解法（説明むず）。しかし計算量がよくわからない。
　この解法でやるなら再帰関数を書かなければならない。再帰関数の書き方に慣れていなくて時間がかかってE問題を落としたこともある(ABC357)が、当時よりは成長していたらしく実装できた。
　サンプルが合わなかった。けれどすぐに「出力にゼロを含んではいけない」ことをに気づき修正。
　サンプルが全部合った。けれど計算量が全くわからないし、ここから計算量を落とす方法はいくつか浮かぶが、残り時間が少なすぎるので投げた。
　22:33:18 AC(0ペナ)。ちなみにC問題と同じく実行時間は超ギリギリ。
　ここで順位表を見たら山田は500位でガッツポーズ。ABCDE5完のすべての人より上なのが強すぎる。

### コンテスト終了
　競プロにおけるC++の有利さを実感した回。史上最高perfでしたがもし山田がPython勢だったら3完しかできていなかった可能性が高いです。
　それにしても今回は強運でした。もしE問題の解法が普通に浮かび、飛ばしていなければいつも通り水色perfでした。F問題の相性もたまたま良かったです。
　これからF問題を解ける確率があがっていけば、Eを先に解くかFを先に解くかという駆け引きが重要になっていきそうです。
zOS備忘録1　F4でSDST画面呼び出し

<h1>備忘録１</h1>
環境が変わるたびに探すのが面倒だから記載する
<br>

<h2>ステップ1　SDSF起動用CLISTを作成</h2>
<h3>userid.CLISTで区分データセットを作成</h3>
割と適当な設定で作る
<ul>
    <li>
        Record length . . . : 80<br>
    </li>
    <li>
        Block size  . . . . : 800<br>
    </li>
    <li>
        1st extent tracks . : 5<br>
    </li>
    <li>
        Secondary tracks  . : 3 <br>
    </li>
    <li>
        Allocated tracks  . : 5 
    </li>
    <li>
        Allocated extents . : 1 
    </li>
    <li>
        Maximum dir. blocks : 10    
    </li>
    <li>
        作成メンバー名 : SDST    
    </li>
</ul>
<h2>ステップ2　SDSF起動用CLISTを作成</h2>
<h3>userid.CLISTで区分データセットを作成</h3>

```zOS:userid.CLIST(SDST)
PROC 0                                                        
ISPEXEC SELECT PGM(ISFISP) NEWAPPL(ISF) SCRNAME(SDSF) PARM(ST)
```
<h2>ステップ3　動作確認</h2>
<h3>そのままEDIT画面のCommandで下記のコマンドを実行</h3>

```zOS:Command
TSO EX (SDST)
```
SDST画面に遷移すればOK

<h2>ステップ4　F4にさっきのコマンドを登録</h2>
<article>
    <p>EDIT画面のCommandでkeysを入力してコマンドを実行</p>
    <p>Keylist Utilityg画面に遷移するので、F4のところを以下ように変更</p>
    <ul>
        <li>
            Definition ：TSO EX (SDST) 
        </li>
    </ul>
    <ul>
        <li>
             Format ：SHORT 
        </li>
    </ul>
    <ul>
        <li>
             Label ：SDSF 
        </li>
    </ul>
</article>
<br>
これでF4でSDST画面に遷移できる。データセット一覧からも遷移させたい場合は、データセット一覧でステップ4をすればOK
<br><br><br>


参考にさせていただいたサイト
「メインフレーム・コンピューター」で遊ぼう
　　F4キーでSDSFのSTパネルを起動する
　　https://arteceed.squares.net/?p=1002
【JP1】JP1認定エンジニア(V13) 勉強方法

JP1認定エンジニア(V13) 【HMJ-130E】を受験してきた。同試験についての勉強方法やナレッジ(合格体験記)がネット上に少ないため記事を作成

# 試験について
受験料：6,600円（税込み）※2024年7月時点
試験方法：テストセンターでのCBT方式
出題：出題形式（択一式）
問題数：20問
試験時間：45分
合格基準：70%以上
※結果はテスト終了後、CBT試験のパソコンに表示される

# 勉強方法・勉強時間・受験結果
■勉強方法
翔泳社より出版されている以下書籍を読み、記載の問題を解く(2週ほど)
IT Service Management教科書 JP1認定エンジニア V13対応

■勉強時間
10時間～15時間程度(2周するのに要した時間)

■受験結果
合格 得点：75%

# 勉強時に注意、意識した点
・JP1の各製品の違い、特徴
例：
「JP1/Automatic Job Management System」と「JP1/Client Process Automation」の違いなど

・用語
例：
ジョブ、ジョブネット、タスク、サービス等

・各製品の基本的な知識、機能
例：
ジョブスケジューラ(JP1/Automatic Job Management System)のジョブネットモニタのアイコン色について等

# 備考
試験の申込みはPearsonから行う。アカウントの登録がめんどくさかった
https://www.pearsonvue.co.jp/Clients/Hitachi.aspx
VSCodeでrails開発する時のコーディング効率を上げたい

Railsの初学者です。

VSCodeでコーディングするときにスペルミスやタイピングに時間がかかることを課題に感じたため
Railsに関するエディターの設定や拡張機能を色々と試しています！
現状設定や導入を行ったものをまとめつつ、記事もアップデートしていきたいと思います。

# Emmetの設定
Emmet とは、htmlで補完してくれたり、省略記法で入力できる機能。
htmlはデフォルトで適用されていますが、html.erbでEmmetを使用するためには
setting.jsonで設定する必要があります。

```json
{
  "emmet.includeLanguages": {
    "erb": "html",
    "html.erb": "html"
  }
}
```

# 導入した拡張機能
VSCodeで以下の拡張機能を導入してみました。
知識が浅く、まだどんな機能が提供されているのか理解し切れていない拡張機能もあるので
これから使いながら理解していきます...！

## endwise
`def`や`if`の後の`end`を自動入力してくれる。

https://marketplace.visualstudio.com/items?itemName=kaiwood.endwise

## Trailing Spaces
無駄なスペースに色を付けて表示してくれる。

https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces

## Ruby Language Colorization
Rubyのシンタックスハイライト（キーワードの色付けなど）を提供してくれる。

https://marketplace.visualstudio.com/items?itemName=groksrc.ruby

## ERB Formatter/Beautify
html.erbでAuto Format（インデントとか空行とか）整えてくれるらしいが、インデント整形できているように見えないので確認中。
Gemfileがないよ〜のエラーが出ることは確認した。

https://marketplace.visualstudio.com/items?itemName=aliariff.vscode-erb-beautify

## Ruby on Rails
Ruby on Rails のスニペットを追加してくれるとのこと。

https://marketplace.visualstudio.com/items?itemName=hridoy.rails-snippets

## Ruby LSP
Ruby用のあれこれ便利な機能。
[公式ドキュメント](https://shopify.github.io/ruby-lsp/RubyLsp/Requests.html)

https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp

# 今後導入検討するもの
多くの方がおすすめしていたが、現在の学習環境と相性が悪かったものや、機能の理解ができなかったもの。
今後必要に応じて導入を検討してみようと思います。

## Rails

https://marketplace.visualstudio.com/items?itemName=bung87.rails

## Ruby Solargraph

https://marketplace.visualstudio.com/items?itemName=castwide.solargraph

# 参考文献
参考にした一部ですが、色々とわかりやすくまとめてくださっている方に感謝です..

https://justy.life/programming/recommended-vscode-plugin-for-ruby-on-rails/
https://qiita.com/hakshu/items/98ed12c32da97474b68d
https://note.com/hagaga/n/nfed42fb293f4
https://karlley.hatenablog.jp/entry/2022/11/14/074650
C#で順列をすべて表示する

# はじめに
Atcoderで順列のすべてのパターンを洗い出す必要のある問題があったので調べた．C++にはnext_permutationがありそれを使えば順列を全列挙できるがC#にはないらしい．．．ので作ります．

# C#で順列の列挙

```c#
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<int> a = Console.ReadLine().Split().Select(int.Parse).ToList();
        a.Sort();

        //全列挙
        do
        {
            Console.WriteLine(string.Join(" ", a));
        }while (NextPermutation(a));
        
    }

    // C#には next_permutation がないので、自前で実装
    static bool NextPermutation(List<int> a)
    {
        int i = a.Count - 2;
        while (i >= 0 && a[i] >= a[i + 1]) i--;

        if (i < 0) return false;

        int j = a.Count - 1;
        while (a[j] <= a[i]) j--;

        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;

        a.Reverse(i + 1, a.Count - i - 1);
        return true;
    }
}
```

```　:入力例1
1 2 3
```

```:出力例1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
```

```　:入力例2
1 1 2
```

```:出力例2
1 1 2
1 2 1
2 1 1
```

なんでこれでいけるのかはなんとなくはわかったけど説明難しいです
Azure 構築概要

1.ライセンス有効化
https://qiita.com/nicnic69/items/6bd4d1a199dc373d947f

2.ユーザーとグループの管理


3.Azureサブスクリプションの管理とガバナンス


4.Azure Policy


5.RBACの設定


6.ARMテンプレートとBicep


7.仮想ネットワークの概要


8.サイト間接続の設定


9.ネットワークトラフィックの管理


10.ストレージ管理


11.仮想マシン


12.Azure App Service


13.コンテナの管理


14.バックアップとリカバリの設定


15.リソースの監視設定
Microsoft Entra ID P2の有効化

Microsoft Entra IDとは
--
IDおよびアクセス管理ができるクラウドサービス

ライセンス
--
ライセンスで使用できる機能が異なる
ライセンスの詳細は以下
https://www.microsoft.com/ja-jp/security/business/microsoft-entra-pricing

ライセンス
--
無料試用版ライセンスは30日無料で使用できる

適用手順
--
1.ポータルにアクセスする
https://portal.azure.com/

2.検索バーに「ライセンスと入力」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3146038/8b16c9da-9904-12e6-35d4-d2bf5a225e86.png)

3.クイックタスクの「無料試用版を入手する」を選択し、「p2」をActiveにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3146038/539adda3-bc30-7fd8-de92-77d408d0c5fa.png)


4.以下項目を入力する
* ご本人について
* サインインの詳細
* 完了して開始

5.入力後、登録したアドレスに確認メールが届くため、試用版の開始を押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3146038/a5b08a6a-43ae-731e-dd3e-9e5a575acfb2.png)

6.有効化されたことを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3146038/32b6b0d9-9493-41e0-986f-a558e4c823e1.png)

また、紐づけられていることを確認する
4.で設定したテナントへログインし、Microsoft Entra IDを検索バーに入力し、概要の基本情報内のライセンスを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3146038/c3f8c6ef-1fdd-ca56-927c-4537363659c7.png)
Gitについて

## Gitの仕組みと現場でよく使用するコマンド
職場の勉強会で発表することになり、お題をGitとコマンドに決めたため
調べたものをまとめる場としてこの記事を書くことにしました。

#### 見出し
+ Gitとは
+ Gitを使うと嬉しいこと
+ 集中型バージョン管理システムとの違い
+ Gitの構造
+ 上記以外で使用する事が多いコマンド

### Gitとは
まず、Gitとはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムのことであり、かのLunuxを開発したリーナス・トーバルズ氏によって開発されたシステムです。

Gitが生まれた経緯としてざっくり言うと、もともとLinuxカーネル開発[^1]でBitKeeperというバージョン管理システムを使用していたが、社員の一人がやらかしてしまいBitKeeperの無料提供の停止が通告され、交渉も決裂してしまい利用できなくなってしまいました。
BitKeeper利用前の状態に戻るのは耐えられないが、他社のシステムの中でBitKeeperの代用品になるシステムが見つからず、最終的には自前でSCMを開発することになりました。
その結果誕生したのがGitです。

#### Gitを使うと嬉しいこと
ソースコードの変更をしている最中に「これ、変更したけど前のほうがいいな」「色々修正していたら元々コードがどんなものだったか分からなくなった」「バグが起きたけど原因が分からない、変更前の状態からやり直したい」という事が起きます。
その際、あらかじめGitにコミットして履歴を残していると以前の状態に戻すことが容易にできます。

またVSCodeにGitGraphなどの拡張機能を入れて上で変更の差分を表示させて、変更箇所の特定の部分だけ戻すなどの操作も可能です。

### 集中型バージョン管理システムとの違い
そもそもバージョン管理システムとなにかという話になりますが、「テキストファイルの変更履歴を管理する」ためのツールです。(テキスト以外のバイナリファイルのバージョン管理にも使われます)
変更の内容と日時の記録や、リポジトリから任意の時点のデータを復元など、手戻りやバグなどの課題を発見、レビューの際に差分点を効率的に見つけることができます。

そして集中型バージョン管理(SVNなど)との違いですが、ローカルリポジトリの有無になります。
![スクリーンショット 2024-07-21 171919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3469865/4c11751b-f2aa-0832-819c-b2ca7870f2e9.png)

集中型は1つの共有リポジトリに随時コミットしていくのに対して、分散型は各個人が持っているローカルリポジトリにコミットしていきます。
集中型は自分のコミットが他のメンバーの作業にも影響するため、ある程度まとまった状態でないとコミットできませんが、分散型は個人でリポジトリを持っているので中途半端なデータをコミットしても他のメンバーの作業には影響しません。
そのため、Gitはこまめにコミット(履歴を記録)できてミスを探したり戻し作業がしやすいです。

他の利点としてはGitはブランチを簡単に切れることが挙げられます。SVNでもブランチを切ることは出来るのですが、制約やコストが大きいらしく簡単にGitのようにブランチを切ることはできないようです。(SVNは触ったことがないのでよく分かりませんが…)

このあたりの話は以下の動画が分かりやすかった為、参考にさせて頂きました。
https://youtu.be/jOFSn59q6IY?si=DRb8FGUY4mJEozS4

### Gitの構造
Gitの構造ですが何もなしに説明するのは難しいため実際にGitを使用するときのケースを元に説明します。
実際に開発する場合は大体以下の画像の通りの流れになると思います。
![Slide1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3469865/3f0219f5-de1e-8b9d-7629-90bf67ddf738.jpeg)


といってもこれだけ見てもGitに馴染みがない人には分かりづらいと思うので順を追って説明していきます。

##### 1\.ワーキングツリー
実際にコードをゴリゴリ書いたり、削除したりする作業場所。
##### 2\.インデックス
コミットするための前準備としてファイルを記録する場所。
ワーキングツリーで変更したファイルを`git add`コマンドでインデックスに移動させる。
`git add ファイル名`で特定のファイルだけステージング(インデックスに移動)させたり、
`git add -p`でファイル内の特定のコードだけをステージングさせることも可能。
##### 3\.ローカルリポジトリ
リモートリポジトリにアップロードするためのコミット履歴とファイルを記録する場所。
ステージングしたインデックス上のファイルを、`git commit`コマンドでローカルリポジトリにコミットする。
`git commit -m "メッセージ"`でコミットにメッセージを残せる。コミットするときはなんのコミットなのか分かりやすくするためにコミットメッセージを残すのが基本。
##### 4\.リモートリポジトリ
複数人で共有するリポジトリ。
`git push`コマンドでローカルリポジトリにコミットしたファイルとコミット履歴をリモートリポジトリにアップロードする。

アップロードされたコミットからコードの変更点を比較してレビューを行ったり、プルリクエストを発行してマージしたりします。
### 上記以外で使用する事が多いコマンド
`git pull`
リモートリポジトリに記録されている最新の内容をローカルリポジトリに反映するコマンド。

`git stash`
まだコミットしていない内容を一時的に避難するコマンド。

`git stash pop`
stashしたものを戻すコマンド。似たコマンドとして`git stash apply`がある。stashしたものを戻すのは同じだが、popは履歴から削除する、applyは履歴を残すといった違いがある。





### 参考サイト
https://qiita.com/gold-kou/items/7f6a3b46e2781b0dd4a0

https://qiita.com/y518gaku/items/9a789b4bddfabe687dfa

https://qiita.com/jesus_isao/items/2a0495c973a4c911c2cc

https://qiita.com/jesus_isao/items/63557eba36819faa4ad9
[^1]:ハードウェアとソフトウェアの中立ちをしてくれる、OSとして動く大元の部分。
Aurora Serverless v1 (MySQL) からのアップグレード

# Aurora Serverless v1 のサポート終了
**2024/12/31** を以って Aurora Serverless v1（MySQL 5.7互換）のサポートが終了します。

https://aws.amazon.com/jp/builders-flash/202402/awsgeek-amazon-aurora-serverless/#:~:text=%E3%81%AA%E3%81%8A%E3%80%812024%20%E5%B9%B4%2012%20%E6%9C%88,%E3%82%92%E3%81%8A%E5%8B%A7%E3%82%81%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

ただし、対応する **Aurora MySQL 2** が **2024/10/31** までとなっており、後述する移行手順の中で一時的に Aurora 2 を経由するので早めの対応が望ましいでしょう。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Concepts.Aurora_Fea_Regions_DB-eng.Feature.ServerlessV1.html

なお、単純に Serverless v2 に移行すればよいかというと、かなり性格の違うサービスになっているようなので検討が必要です。

# v1とv2の違い

- クラスター内のインスタンスは不可視なのがv1
- 同一クラスター内でサーバーレスのインスタンスとプロビジョンドのインスタンスが同居もできるのがv2

https://dev.classmethod.jp/articles/moving-from-aurora-serverless-v1-tov2/

- スケーリング性能が大きく向上
- 一方、コストはACU単価が倍になり、かつアイドル状態のときにACUをゼロにする（＝停止する）オプションがなくなった

https://logmi.jp/tech/articles/328375

特にコスト面で見たとき、v2よりもプロビジョンドでリザーブドインスタンスを適用するなどしたほうがメリットが出るプロダクトもあるのではないでしょうか。
（開発環境で利用していたアイドル時停止オプションがないのは痛いです…）

## 【11/22更新】v2でもアイドル時停止オプションをサポート
待望のアイドル時停止オプション（最小キャパシティ0設定）がv2でもサポートされるようになりました。
これで気兼ねなくv2へのアップグレードが進められます。
- 対応エンジンバージョン：Aurora MySQL **3.08以上**

https://dev.classmethod.jp/articles/amazon-aurora-serverless-v2-supports-acu0-pause-resume/

# アップグレード手順
手順はほぼ以下のサイトのとおりです。

https://blog.serverworks.co.jp/create-aurora-serverless-v1-and-upgrade-to-v2

## (1) サーバーレス → プロビジョンドに変換
これはAWSコンソールからは作業できず、CLIでの作業となります。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.modifying.html#aurora-serverless.modifying.convert

```:例）
aws rds modify-db-cluster \
    --db-cluster-identifier CLUSTER_NAME \
    --engine-mode provisioned \
    --allow-engine-mode-change \
    --db-cluster-instance-class db.t4g.medium
```

:::note warn
CLIバージョン 2.11.14以上が必要です（おそらく）
https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst
:::

コマンドが成功すると、自動でスナップショットが保存され、クラスターが「変更中」になり、インスタンスも1つ作成されます。

## (2) Aurora MySQL 2 → 3 へのアップグレード
ここは以前書いた記事と同様です。

https://qiita.com/tksnino/items/4b3fdce7f1ec0fcaca92

## (3) Aurora Serverless v2 への変更
**※必要に応じて**
コンソール上、インスタンスの「変更」からプロビジョンドからサーバーレスに変更します。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2-administration.html#aurora-serverless-v2-converting-from-provisioned

v2は簡単にプロビジョンドとサーバーレスの変更ができるようになりました。

# Data API の対応
さて、実は非常に困ったことになったのがこれです。
あるフルサーバーレスプロダクトでは、LambdaからのアクセスをData API（aws-sdk の `RDSDataService`）を使っていたので、アップグレードすると完全に動作しなくなってしまいます。

https://docs.aws.amazon.com/ja_jp/rdsdataservice/latest/APIReference/Welcome.html

Aurora MySQL では、Data API に対応しているのが Serverless v1 のみ。
Serverless v2 も プロビジョンドの Aurora 3 も非対応なので、アップグレード先の選択肢がありません。
PostgreSQL は対応しているんだから、MySQL も対応してくれるのか…？

## 【9/29更新】Aurora MySQLでのサポート開始
9/26に発表がありました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/09/amazon-aurora-mysql-rds-data-api/

条件はありますが、これで安心してアップグレードができそうです。
- 対応エンジンバージョン：Aurora MySQL **3.07以上**
- 対応インスタンスタイプ：**rシリーズ**（tシリーズはサポート外）

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api.limitations
スミス数を求めるプログラム

スミス数を求めるプログラムをC++で実装します。実行環境はVisual Studio Community 2022バージョン17.10.1とC++20です。

# スミス数の定義
合成数で、その素因数の各位の数字の和の合計が元の数字の各位の数字の和に等しい数をスミス数と呼びます。
例えば648の各位の数字の和は$6 + 4 + 8 = 18$より18です。
一方、648を素因数分解すると$648 = 2^{3} + 3^{4}$なので、648の素因数の各位の数字の和の合計は$2×3+3×4 = 18$より18となり、元の数字の各位の数字の和に等しいので、648はスミス数に該当します。

# プログラム
スミス数自体は無限に存在しますが、ここでは正の整数Nまでのスミス数を求めて列挙するプログラムを以下に書きます。
```C++:Smith.cpp
#include <iostream>
#include <vector>

//素数判定のための関数
bool isPrime(long long x)
{
	for (long long i = 2; i * i <= x; i++)
	{
		if (x % i == 0)
		{
			return false;
		}
	}

	return true;
}

//各位の和を計算する関数
long long digit_sum(long long n)
{
	long long sum = 0;

	while (n > 0)
	{
		sum += n % 10; //1の位の数字を求めて合計に加算
		n /= 10; //10で割って右に1桁シフトさせる
	}

	return sum;
}

//スミス数判定の関数
bool isSmith(long long n)
{
	std::vector<long long> prime_factor; //分解した素因数を格納するための配列
	long long m = n;

    //while文の中で素因数分解を実行
	while (m > 1)
	{
		for (long long i = 2; i <= m; i++)
		{
			if (m % i == 0)
			{
				prime_factor.emplace_back(i);
				m /= i;
				break;
			}
		}
	}

	long long prime_sum = 0; //素因数の各位の数字の和の合計を入れるための変数

    //素因数の各位の数字の和を加算していく
	for (auto x : prime_factor)
	{
		prime_sum += digit_sum(x);
	}

    //元の数字の各位の和と素因数の各位の和の合計を比較
	if (digit_sum(n) == prime_sum)
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	long long N; //スミス数を計算する上限値
	N = 1000;
	
	for (int i = 2; i <= N; i++)
	{
		if (isSmith(i) == true && isPrime(i) == false)
		{
			std::cout << i << std::endl;
		}
	}
}
```
main関数の最後で素数判定を忘れないようにしましょう。スミス数は合成数であることが定義されています。素数が条件を満たすのは当然ですが、定義に従い素数は除外します。isSmith関数がtrue、isPrime関数がfalse、この2つが同時に成立する数字のみを出力します。

出力結果
```
4
22
27
58
85
94
121
166
202
265
274
319
346
355
378
382
391
438
454
483
517
526
535
562
576
588
627
634
636
645
648
654
663
666
690
706
728
729
762
778
825
852
861
895
913
915
922
958
985
```

# 参考
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%9F%E3%82%B9%E6%95%B0
投稿 21 TypeScript 2024/07/21

本日の勉強時間　3H![IMG_6326.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579814/d3b49b1e-5eb9-2846-0d42-7e9ec54d9951.png)


JavaScriptを使用して開発する際、型の不一致によるバグや複雑なデータ構造の扱いに頭を悩ませることは少なくありません。
そこで注目されているのが「TypeScript（タイプスクリプト）」です。Microsoftによって開発されたこの言語は、JavaScriptをベースにしつつ、型安全性を提供しより信頼性の高いコードの作成を可能にします。
JavaScriptの論理演算子の挙動

# 論理演算子(&&,||)について

Reactを学ぶ上でJavaScriptの論理演算子(&&,||)について、いまいち挙動を理解できていなかったので覚えたことをアウトプットします。

## 論理演算子(&&,||)の挙動

`&&`の左辺がtrueの場合、右辺を実行します。

```JavaScript:
1 + 1 === 2 && console.log("正解"); //console.logが実行される
```

`&&`の左辺がfalseの場合、右辺は実行されません。

```JavaScript:
1 + 1 === 20 && console.log("正解"); //console.logが実行されない
```

`||`は左辺がtrueの場合、左辺が実行されます。このような処理を選択的代入と呼ぶそうです。

```JavaScript:
const hoge = fuga || "default"; //左辺がtrueならhogeにはfugaが、falseなら"default"が代入される
```

### 挙動の詳細

```JavaScript:
true && true // true
true && false // false
false && true // false
false && false // false

true || true // true
true || false // true
false || true // true
false || false // false
```

`&&`は左辺がfalseなら、`||`は左辺がtrueの場合は左辺を評価しただけで右辺の処理を省ける場合が存在します。
このような処理のことを短絡評価と呼びます。

### falseとみなすことができる値

* 0
* -0
* null
* false
* NaN
* undefined
* 空文字列("")

trueは上記以外のものすべて。

## おまけ(三項演算子)

三項演算子`x ? y : z`を使えば、条件分岐が可能です。

```JavaScript:
1 + 1 === 20 ? console.log("正解") : console.log("不正解"); //?の左辺がtrueなら:の左辺が、falseなら右辺が実行される
```

## まとめ

自分の中では`&&`と`||`は`AND` `OR`と読み替えて必ず`true`or`false`を返す演算子だと思っていました。
実際は両辺のどちらかの値を返すという挙動をしていました。

## 参考文献

ほぼ丸パクリみたいなものですが参考にさせていただきました。

https://qiita.com/Imamotty/items/bc659569239379dded55
7/20 tecHub（IT交流会）を秋葉原で開催！

![pickup_1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670233/7dfa1004-ea52-e7e9-b271-d84b7ff6a93d.jpeg)


全国規模で猛暑が続いています。
通勤するだけで汗をかき、着替えを用意する人もいると思います。

<b>「気持ちが上がらない」</b>
<b>「体調がすぐれない」</b>
この暑さの影響で健康面の不調を感じます。
気温の変化から仕事のパフォーマンスを十分に発揮できない時もあるでしょう。

暑さによる仕事への影響と、対策についてトピックをまとめています。

**目次▼**
<INS>[今月のトピック](#今月のトピック)
[2024年7月のtecHubを開催しました！](#2024年7月のtecHubを開催しました！)
[今後について](#今後について)
[次回の開催](#次回の開催)</INS>

<h3>今月のトピック</h3>
<b>夏の暑さによる仕事への影響を体験したのは8割</b>

「夏の暑さは仕事のやる気減少に影響するか」とのアンケートを行った所、

<b>１位 とても影響する(33.7％)
２位  影響する(30.3%)
３位  どちらかといえば影響する(21.1%)</b>

仕事への影響を体験した人は8割となり、夏バテが仕事に影響したと感じる人は半数に至る結果となりました。

逆に、やる気が最も上がる季節についてのアンケートでは、春と秋が全体の6割となり、気温が落ち着き過ごしやすい時期が選ばれました。

<b>暑さが仕事に影響しやすい時期だからこそ対策を</b>

夏バテを予防している人が具体的に実施している内容の割合は、下記となりました。

<b>１位  こまめに水分補給する(64.5％)
２位  睡眠をしっかりとる(62.0％)
３位  生活リズムを整える(56.0%)</b>

気温による体調・メンタルへの影響は、夏が一番起きやすいようです。
しっかり対策をして乗り越えたいですね。

季節ごとの対策をしていれば、体調を管理することができます。
仕事もプライベートも社会人だからこそ、気を付けたいところですね。

<h3>2024年7月のtecHubを開催しました！</h3>
7/20にtecHubを秋葉原で開催しました。
参加者は、76名となり、大盛況でした。

日付：7/20(土)　14:00～16:00
場所：LIFORK秋葉原
参加者：76名
内容：IT交流会

<b>tecHubは毎月イベント開催しています！</b>
![pickup_2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670233/1b233442-1e51-7546-208f-41cf61d7af8a.jpeg)

毎月60〜80名ほどの方が参加している人気のイベントです。

3ヶ月に1度：LT（ライトニングトーク）と懇親会の2部構成イベント
その他：オフラインのIT交流会イベント

IT交流会では、ピザとドリンクを片手に、ITエンジニア同士の情報交換や他分野の話を聞いたり、キャリアの相談ができます。
普段の職場では聞けない話も聞けるので、会を重ねるごとに参加者が増えています。

<h3>参加者の声</h3>
今回も幅広い分野のIT関係者が集まり、会社員からフリーランスエンジニア、法人化している人まで様々な方が参加していました。

ネットワークインフラやフロントエンド、バックエンド、PMOなど各分野の技術を持つ方々が集ました。
分野ごとに交流を増やす機会にもなりました。

今月の交流会も、参加者一人一人の実体験から来る仕事の話は、濃厚かつ具体的でした。
今後のキャリアをどうするか考えている話も多かったです。
幅広い分野と様々なキャリアの話は、異なる視点や考え方を知る機会になっているようでした。

参加者からは、
<b>「転職やフリーランス転向などのキャリアアップを考えるきっかけになった」
「学びの多い会だった」
「参加してよかった」</b>
などの声をいただいています。

<h3>今後について</h3>
tecHubは、今後もイベントを毎月開催していきます。
他にもITエンジニアがより活躍し、理想のキャリアを切り拓けるように、新たな取り組みをしていく予定です。
今後もtecHubをよろしくお願いいたします。

<h3>次回の開催</h3>
次回の開催は、以下の日程を予定しております。

日時：8/10(土)　14:00～17:00　
場所：お茶の水 ワイム貸し会議室
内容：2部構成（LT＋懇親会）

詳細とお申込みは、以下のサイトをご確認ください。

https://tecworks.connpass.com/event/322862/

また、tecHubはコミュニティサイトも始めました。
会社員、フリーランス、法人の方向けに、オフラインコンテンツと人脈形成の機会を提供しています。

https://www.navi56.com/communities/tecHub