OmniAICreator/Qiita-1.07M huggingface dataset:
中級者に贈るPythonクイズ

# 読み飛ばしてください。
おはようございます、しなもんです。

普段は意識しないようなPythonの特性やトリッキーな部分を6つ、クイズにまとめました。
Pythonの細かい仕様や動作を理解することで、バグを見つけやすくなるかもしれません。

~~正直場合によってはあまり役に立たないかもしれませんが~~ぜひ楽しんでいってください。

# 問題1
以下のコードを実行して出力されるものを答えなさい。
```py
print(0.1 + 0.2 == 0.3)
```
<details><summary>ヒント</summary>
計算している数値は浮動小数点数です。
</details>

<details><summary>答えと解説</summary>

**答え:**
```
False
```
**解説:**
浮動小数点数の精度の問題で、0.1 + 0.2は厳密に0.3にはなりません。

</details>

# 問題2
以下のコードを実行して出力されるものを答えなさい。
```py
a = [1, 2, 3]
b = a
a += [4, 5]
print(b)
```
<details><summary>ヒント</summary>
リストはmutableオブジェクトです。
</details>

<details><summary>答えと解説</summary>

**答え:**
```
[1, 2, 3, 4, 5]
```
**解説:**
`a`と`b`はどちらも同じリストを指しています。
`a += [4, 5]`はリストに要素を追加していて、`b`も同じリストを指しているので更新されます。

https://qiita.com/88IO/items/ae785e8c91082189bc43


</details>

# 問題3
以下のコードを実行して出力されるものを答えなさい。
```py
def foo(x=[]):
    x.append(1)
    return x

print(foo())
print(foo())
```
<details><summary>答えと解説</summary>

**答え:**
```
[1]
[1, 1]
```
**解説:**
デフォルト引数`x`は関数が呼び出されるたびに再初期化されないため、以前の呼び出しの変更が保持されます。

</details>

# 問題4
以下のコードを実行して出力されるものを答えなさい。
```py
x = 10
def foo():
    print(x)
    x = 5

foo()
```
<details><summary>答えと解説</summary>

**答え:**
```
UnboundLocalError: local variable 'x' referenced before assignment
```
**解説:**
関数内部で`x`に値を代入しようとすると、Pythonは`x`をローカル変数とみなします。
代入より前に参照しようとするとエラーになります。

</details>

# 問題5
以下のコードを実行して出力されるものを答えなさい。
```py
a = "Hello" + chr(0)
b = "Hello"
print(a == b)
```
<details><summary>答えと解説</summary>

**答え:**
```
False
```
**解説:**
`chr(0)`は空の文字を追加するため、`a`は`"Hello\x00"`となります。
一方、`b`は`"Hello"`のままです。
したがって、`a == b`は`False`となる。

</details>

# 問題6
以下のコードを実行して出力されるものを答えなさい。
```py
x = "hello"
y = "hello"
print(x is y)
x = "hello!"
y = "hello!"
print(x is y)
```
<details><summary>答えと解説</summary>

**答え:**
```
True
False
```
**解説:**
短い文字列（通常256文字まで）はPythonの内部でキャッシュされるため、`x is y`は`True`になります。
しかし、感嘆符が付くと文字列はキャッシュされず、
新しいオブジェクトが作成されるため、`x is y`は`False`になります。

Pythonは、特定の条件（例えば、特定の記号が含まれる場合など）ではキャッシュされないことがあるのです。

</details>
Windows11のWSLにCentOSをインストールする

# Windows11の設定

PowerShellを管理者権限で開く

<img width="400" alt="PowerShell" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46991/1219b259-1808-7c4b-77cd-ac011cb90883.png">

以下のコマンドで、WSLを有効にする

```
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

以下のコマンドで、仮想マシンプラットフォームを有効にする

```
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

Windows11を再起動する

PowerShellを管理者権限で開き、以下のコマンドで、WSL2をデフォルトバージョンにする

```
> wsl --set-default-version 2
```

# CentOSのインストール

GitHubからCentOS（CentOS7.zip）をダウンロードする

https://github.com/mishamosher/CentOS-WSL/releases/tag/7.9-2211

zipファイルから、rootfs.tarを取り出す
.tarの取り出しには、7-zipを使用
https://7-zip.opensource.jp/


以下のコマンドで、CentOSをインポートする
事前にインポート先のフォルダ（.\CentOS7）を作成しておく

```
> wsl --import CentOS7 .\CentOS7 .\rootfs.tar
```

CentOSを起動する

```
> wsl -d CentOS7
```

パッケージをアップデートし、sudoとパスワード設定ツールをインストール

```
# yum update -y && yum install passwd sudo -y
```

ユーザ（caloewen）を追加し、sudo特権を付与する

```
# myUsername=caloewen
# adduser -G wheel $myUsername
# echo -e "[user]\ndefault=$myUsername" >> /etc/wsl.conf
# passwd $myUsername
```

# WindowsからCentOSのファイルにアクセス

以下のアドレスで、エクスプローラーを開く

```
\\wsl.localhost\CentOS7
```


# 参考にしたサイト
https://learn.microsoft.com/ja-jp/windows/wsl/use-custom-distro
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual
【Unity】Playerの地面との衝突判定

`Capsule Collider`をもつPlayerオブジェクトの`FixedUpdate`で地面との衝突判定をする`IsGrounded()`を実装した。

```csharp
private void FixedUpdate()
{
    Move();
    if(IsGrounded())
    {
        jumping = false;
    }
}

private bool IsGrounded(float length = 0.1f) 
{
    Vector3 raycastOrigin = transform.position;
    raycastOrigin.y += .05f;

    if(Physics.Raycast(raycastOrigin, Vector3.down, out RaycastHit hit, length, groundLayer))
    {
        return true;
    }
    return false;
}
```

はじめは、`IsGrounded()`の中で、`length`の値と、`raycastOrigin.y`に加算する値がミスっており上手く衝突判定できなかった。

なので図で描いて整理してみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616035/1dc8ade4-b7a8-6db7-6898-54cc5c20d7c0.png)

> 図の補足
> - 青矢印はray
> - 下の四角がGroundオブジェクト（図のGroudは誤字）
> - Playerオブジェクト自体の`transform.position.y`が0になるように、オブジェクトを設定している

NG例とOK例を見比べると、rayの長さは衝突判定対象のColliderの真ん中以上に突っ切らないように調節したほうがよさそうだと思った。
ウェブ開発者向けインフラの基本

この勉強会。社内向け。ウェブ開発を1～3年やってるけど、そろそろインフラも勉強したい人向け。たまにクラウド（AWS/Azure）も出てくるよ。


# ウェブインフラストラクチャーの基本概念

## 1. ウェブサーバーとは？
ウェブサーバー。ウェブページやアプリをインターネット経由で提供するコンピューターやソフトウェア。ユーザーのブラウザからのリクエスト。レスポンスを返す。これがウェブサーバーの仕事。

**例:**
- Apache HTTP Server
- Nginx
- Microsoft IIS

## 2. クライアントとサーバーの関係
クライアントとサーバーの関係。基本は以下の流れ。

1. **クライアントのリクエスト:**
   - ユーザーがブラウザでURLを入力。特定のウェブページを要求。

2. **サーバーのレスポンス:**
   - サーバーがリクエストを受け取る。要求されたページ（HTMLファイル、画像、データなど）をクライアントに返す。

このリクエストとレスポンスのやり取り。HTTP（HyperText Transfer Protocol）を通じて行われる。

## 3. 基本的なリクエストとレスポンスの流れ
以下の図で、基本的なリクエストとレスポンスの流れを説明。

```
ユーザー入力 (URL) -> ブラウザ (クライアント) -> インターネット -> ウェブサーバー
         <- ウェブページのデータ (HTML, CSS, JS) <- ウェブサーバー
```

**具体的な例:**
- ユーザーが `www.example.com` をブラウザに入力
- ブラウザがDNSを使って `example.com` のIPアドレスを取得
- リクエストが `example.com` のウェブサーバーに送信される
- サーバーがリクエストを受け取り、対応するウェブページのデータを返す
- ブラウザがデータを受け取り、ユーザーにウェブページを表示

```mermaid
sequenceDiagram
    participant ユーザー
    participant ブラウザ
    participant DNS
    participant ウェブサーバー

    ユーザー->>ブラウザ: www.example.com を入力
    ブラウザ->>DNS: example.com のIPアドレスを取得
    DNS->>ブラウザ: IPアドレスを返す
    ブラウザ->>ウェブサーバー: リクエストを送信
    ウェブサーバー->>ブラウザ: ウェブページのデータを返す
    ブラウザ->>ユーザー: データを受け取り、ウェブページを表示
```


## 4. リクエストとレスポンスの具体例
**HTTP リクエストの例:**
```
GET /index.html HTTP/1.1
Host: www.example.com
```

**HTTP レスポンスの例:**
```
HTTP/1.1 200 OK
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>
```




最近のメモ

 
 [**ウェブ開発者向けインフラの基本**](https://qiita.com/dms-matthew/items/22440f59370e84be3f55)
 
[**ウェブ開発者向けインフラの基本2**](https://qiita.com/dms-matthew/items/3db4fd1c4328e4efffd3)

[**ウェブ開発者向けインフラの基本3**](https://qiita.com/dms-matthew/items/0b7900723e58003f86d6)
 
[**ウェブ開発者向けインフラの基本4**](https://qiita.com/dms-matthew/items/8bbdc0bf51002fbd8603)
自己紹介ページ　進捗

お疲れ様です。

今日も今日とて自己紹介ページの編集です。
文章の内容の変更はありませんが、背景などがなかったためその辺りの編集を1時間半ほどしておりました…

![shadow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/b4f2167d-7d0d-b32f-9451-3eacf8f50b94.png)

やっぱりちょっと寂しいかと思い、 text-shadow 要素で影をつけ、著作権フリーイラストでとりあえず背景になりそうな画像を探す旅に出て、 background-image で設定:point_up:

ただ、DLする際に1000pxの小サイズでやってしまったため…
![wide.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/20bd0198-5335-f8ce-8be8-52d81e5060d6.png)

ページを最大化すると背景を繰り返しで表示しておりました:cry:
はじめはDLしたサイズのことに気づかず、「あっ！ no-repeat だ！」とか思って、 background-repeat: no-repeat;　にすると、「l」の文字当たりでぶっつり画像がきれちゃったのでした…当然です:sob:

ので、またもMDN先生で調べたり、GPT先生に教えを乞いつつ、 background-size: cover; で要素全体にフィットできるよ！と学び、実装しました。

![wide 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/e093a8b6-94e0-4936-e587-614398c8276a.png)
繰り返されず、ぶったぎられもせずきれいに全体に表示することができました。
DLする際は、用途にもよりますがサイズの大きさに気を付けなければいけませんね…

あとは青空の画像を差し込んでいましたが、それを transition要素を使って、じんわり表示されるようにしていきたいと思っていますが、その前にJSやjQueryをもう一度復習せねばなりませんかね…
地道に1つずつ完遂させていきます:writing_hand:

**background-repeat: no-repeat;**
　↳背景画像を繰り返されないようにする

**background-size: cover;**
　↳背景画像を要素全体にフィットさせる。要素のサイズに合わせてリサイズされる。
JavaScript無効化時のSvelte

## 概要
この記事はJavaScriptが無効な状態でもサイトやアプリケーションを使えるようにしたい人のためのTips記事です。

JavaScriptが無効化されている時に操作できないようなサイトやアプリケーション、ありますよね。たくさん。
~~舐めやがって！誰もがJavaScriptを有効化していると思うな！~~

**JavaScriptの使用を強制するのは良くない！なくても動くようにしよう！**

あれ？でもJavaScriptが無効かどうかってどうやって取得するの？JavaScriptが無効化されてるんだからJavaScriptで取得できないよね？

## JavaScriptが無効かどうかの判定
:::note warn
最初に断っておくと、JavaScriptが動かなくても動くようにするための実装はもちろん**自分でやる**必要があります。頑張れ！
:::

判定方法はざっくり3つあります。

### 1. noscriptを使う
```svelte
<noscript>JavaScriptが無効です</noscript>
```

`noscript`の中にJavaScriptが無効な時表示したいものを入れます。

デメリットはHTMLがでかくなることです。
あと当たり前ですが、`noscript`の外に書いたコンテンツはJavaScriptが有効化されていても無効化されていても表示されるので、出しわけできるのはnoscriptの中のコンテンツだけです。

これが欲しいと思ったことあんまりないんだよな…

### 2. state
```svelte
<script>
	let no_script = $state(true);
	$effect.pre(() => {
		no_script = false;
	});
</script>

{#if no_script}
  JavaScriptが無効です
{:else}
  JavaScriptが有効です
{/if}
```
こうします。

こうすると`$effect.pre`の部分はJavaScriptが無効な時実行されないので「JavaScriptが無効です」が表示され、JavaScriptが有効な場合は「JavaScriptが有効です」が表示され、出しわけできます。

これを使えば、例えば入力欄のサジェスト表示で
- JavaScriptが有効な場合はリッチなビジュアルと機能を持つものを表示
- 無効化されている場合は`<datalist>`を使って表示

などすることができます。

`datalist`はモバイルSafariで見た時めっちゃ見にくいのであまり使いたくないですね…

### 3. awaitブロック
```svelte
{#await Promise.resolve('')}
	JavaScriptが無効です
{:then}
	JavaScriptが有効です
{/await}
```

こうします。
`Promise`はブラウザ側で解決されるので、JavaScriptが無効な時は`await`ブロックの`then`に入る前の部分が表示されます。

有効な場合は`then`の中が表示されます。

## まとめ
ここまで3つのやり方を紹介しましたが、どれも一瞬ちらつきます。

JavaScriptが無効でも動くぜ〜！とドヤることができても、JavaScriptが有効化されているユーザーにレイアウトシフト起こって体験が悪くなったら台無しです。

:::note alert
🤖 **< 体験が悪くなるJavaScriptなんて書かなければいいのに…**
:::

見た目に差分が極力出ないようにCSSを頑張って書きましょう。
Azure Data Factory にて Azure Key Vault からシークレットを Web アクティビティにて取得する方法

## 概要

Azure Data Factory にて Azure Key Vault からシークレットを Web アクティビティにて取得する方法を共有します。リンクサービス作成時などに Azure Key Vault からシークレットを取得すること可能ですが、パイプライン上 Azure Key Vault のシークレットを利用したい場合があります。その場合には、 Web アクティビティにてシークレット情報を取得することで対応できます。


## 実施手順

### 1. Azure key Vault にてシークレットを作成


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/cc7ace43-79cf-03b8-6f18-b6a13465e8cb.png)


### 2. Azure Data Factory にて Azure Key Vault への接続情報をもつ web 接続のリンクサービスを作成

| #    | 項目        | 値                                                  |
| ---- | ----------- | --------------------------------------------------- |
| 1    | ベース  URL | https://{KeyVaultName}.vault.azure.net/             |
| 2    | 認証        | システム割り当てマネージドID                        |
| 3    | リソース    | [https://vault.azure.net](https://vault.azure.net/) |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/10c83eeb-c863-7a73-c2a2-d45f1a4f2190.png)

### 3. Azure Data Factory にてパイプラインに Web アクティビティを追加

| #    | 項目            | 値                                     |
| ---- | --------------- | -------------------------------------- |
| 1    | 接続の種類      | リンクサービス                         |
| 2    | リンク サービス | 作成したリンクサービス                 |
| 3    | 相対 URL        | /secrets/{sercretName}?api-version=7.0 |
| 4    | メソッド        | Get                                    |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/873fc0ab-5c54-c880-ed67-2a1ffb13a827.png)

### 4. パイプラインを実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ce696112-c584-fe36-9379-3d60be04c674.png)


### 5. シークレットを取得できていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/87b0eaa5-64e9-0b27-7ffa-78c2c6aec506.png)
supabase ローカル環境構築 備忘録

## 前提条件
・Node.js がインストールされている
（以下ケースでは、`npm` コマンドを使用しています
・Docker Desktop がインストールされている
（内部的に docker のイメージを使用するため、docker のコマンドが通る様になっている必要があります。Docker Desktop じゃないといけないわけではないですが、今回は簡単に用意できる Docker Desktop を用意することを想定して作業していきます）

## インストール・構築（コマンド）
`supabase` をインストール
```
npx npm install supabase --save-dev
```

`supabase`を初期化
（コマンドを実行したディレクトリに`supabase`フォルダが生成されます）
```
npx supabase init
```
続けて以下コマンドを実行
-> コマンド実行が終わると、ローカル環境用の情報が出力されます
```
npx supabase start
```

## リモートDBとローカルDBをリンクする

```
npx supabase link --project-ref 「プロジェクトID」
```

「プロジェクトID」は、リモート環境のURL末尾を参照する
`https://supabase.com/dashboard/project/「プロジェクトID」`
コマンド実行後にパスワードを聞かれるため、リモート環境のパスワードを入力する


#### リモートDBの情報を取得する
```
npx supabase db pull
```
エンジニアとしてのライフプランを考える上で大事な心得5箇条

# 概要
研究開発職、技術者として楽しく仕事をするために必要な事は何か？ひいては生涯現役！？としてやっていくのには何が必要か？ということをまとめてみようと思います。

# 筆者の略歴
修士卒の新卒採用で現在の勤務先に入社しました。入社以来一貫して研究開発職(ソフトウェア開発職)です。しかし、ここ数年はキャリアプラン、ライフプランに思い悩む日々でしたが、つい最近、社内転職で社内の研究所に異動しました。まだ人生経験を語れる程の長いキャリアは有りませんが、社内転職に至るまでの経過を思い返すと、今後の教訓になることが色々と有ることに気付きました。よって、今後の教訓のためにも、心得5箇条としてまとめておこうと思います。

:::note warn
記事のテーマは最高のライフプランについての様ですが、最高のライフプランは10人居れば10人が全く異なるライフプランになってしまうでしょう。よって、ライフプランを考える時に筆者なら以下の心得5箇条に照らし合わせて考えるという体でまとめます。
:::

# 心得5箇条
今後の自分への戒めも込めて心得5箇条にまとめたいと思います。
## 心得1: 人の一生は重荷を負って遠き道を行くが如し。
これは「東照宮遺訓(徳川家康公遺訓)」の一節です。この一節に「急ぐべからず。」が続きます。しばしば「未経験で○○エンジニアに」という文言を見掛けますが、未経験の業務に取り組んだり、未経験の職種に変わることは、容易なことではありません。これは転職や社内転職でも言えることだと思います。取る側からすると人材不足で新しい人を取りたい訳で、0から教育をする余裕は無いというパターンが多いでしょう。よって、経験者が欲しいとなる訳です。ですから、未経験の業界、職種に変わることは多大なエネルギーを必要とします。社内転職も同様です。筆者は社内転職でそれまでの業務でほとんど関わった経験のないAIソフトウェアの開発職に異動しました。そういう意味で、「未経験で○○エンジニア」のパターンでしょう。ただ、筆者の場合、入社以来AIソフトウェアの開発にいつか関わりたいと思っていたこともあり、AIに関する勉強や社内インターンシップに参加するなどして、知識のアップデートや技術力を伸ばすことを続けてきました。そして、チャンスが来た時に逃さない様に心掛けていました。準備を怠っていると突然チャンスが巡ってきた時に、慌てふためいた末にチャンスが掴めずに終わる可能性も有ります。しかし、日頃から備えていれば、急がず、焦らず対処することが出来るでしょう。

## 心得2: 迷ったら楽しい方を選ぶべし。
アメリカで発表された研究の結果であったと思いますが、「自分は運が良い」と思っている人、人から「運が良い」と言われる人に共通する物事の選択方法に「選択に迷った時は、自分にとって楽しい方を選ぶ。」ということが挙げられるそうです。筆者はこのような研究結果が発表されていることを知らなかったのですが、これまで、選択を迫られた場面で、筆者自身にとって「楽しい方」を選んでいる傾向があるということに気付きました。筆者自身は、自分のことを特段「運が良い」とは思いませんが、楽しい方を選ぶという選択で悪い結果に終わったという経験が無いように思います。仮にその時は思う様な結果が出なかったとしても、後々に生きてくると思います。

## 心得3: アンテナは常に高く、広く、感度良く有るべし。
世の中のトレンドを追い続けるのは、簡単なことではないでしょう。しかし、研究開発職、技術者としてアンテナを常に高く、広い範囲をカバーし、感度を良くしておくことが重要だと思います。前に居た部署ではAI技術は一時的な流行ですぐに滅びるからやっても意味が無いと言うようなことを平然と言う人が少なくありませんでしたが、その根拠がまた薄弱で、お偉い誰々がそう言っていたからそうなんだ。AIをやりたいなんて世の中のトレンドが分かっていない。などなど。どちらが世の中のトレンドを分かっていなかったかはここで述べるまでも無いでしょう。矢張り、世の中でどうなっているかを見ることも無しに、××さんというお偉いさんが言うから正しいんだと盲信する様では道を誤るでしょう。そうならないためにも、様々な部署、職種の友人と交流を持ったり、業務とは別に社内の(コミュニティ)活動に参加するなどして、見聞を広めておくことが世の中のトレンドから大きくズレないためにも重要でしょう。

## 心得4: 地の利、人の輪、天の時
三国志演義で劉備元徳に諸葛亮孔明が物事を成し遂げるために重要な三要素について説くシーンが有ります。確か天下三分の計の件です。その三要素とは、地の利、人の輪、天の時であり、地の利とは地理的な有意性または環境、人の輪は人との交流、人脈を指し、天の時は運を表しています。どんなに高い志が有って、色々勉強しても、それを実践に移せる環境で無くては結果は出せませんし、評価もされません。人との交流は、それが良い交流で有れば、1人出せる以上の成果や結果を出すことに繋がります。そして、運。これはある意味神様のみぞ知ることですが、チャンス神様が自分の前に現れたら、その前髪を掴める様に準備しておくことが恐らく運を呼び込むために出来る唯一のことでしょう。

## 心得5: リスクを考える時は、長期目線で見るべし。
リスクには2種類のリスクが有ると思います。1つ目が「本当のリスク」これは絶対に避けなければなりません。なぜならば、この選択肢を取っても何1つ良いことが無い本当の意味でのリスクだからです。2つ目は一見リスクに見えるけれど長期的な視点に立って見ると、寧ろプラスに働くというリスク、このリスクは恐れずに取ることで、結果として良い方向に繋がるでしょう。例えば、今の部署での仕事に不満が有り、これ以上今の環境ではどうすることもできないけれど、我慢して仕事を続けるか、多少のリスクは見込んでも、別の部署に異動出来る様に行動を起こすかで結果は変わってくるでしょう。現に筆者の社内転職も「長期視点で見た時にリスクとなるか？」の視点で、元の部署に残り続ける方が寧ろ百害あって一利無しで、多少のリスクを取っても、環境を変える努力をする方が後々のためになるという考えに基づく行動でした。

# まとめ
人間は忘れやすい生き物なので、時間が経つと昔々のことはドンドン忘れます。この5箇条は今後も事ある毎に見返すこととし、随時内容も改訂してブラッシュアップしていくこととします。

# 関連記事
https://qiita.com/y-vectorfield/items/4d3c6957de7d28beb038

https://qiita.com/y-vectorfield/items/686b0113ddf721182654
AtCoder 勉強記録[C++] その7

AtCoderで入茶を目指して勉強しています。
勉強を継続するために投稿を始めました。
もともとアカウントを作成していましたが、今年の4月から本格的に勉強を始めました。
一応自分用に解法を書いていますが雑です、自分で読み返して困ったら修正します。
[私のアカウント](https://atcoder.jp/users/nanami_brother)
[解いた問題](https://kenkoooo.com/atcoder/#/table/nanami_brother)
# 本日解いた問題
## B - Minimize Ordering
[B - Minimize Ordering](https://atcoder.jp/contests/abc242/tasks/abc242_b)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  string s;
  cin >> s;
  sort(s.begin(),s.end());
  cout << s << endl;
}
```
### 解法
文字列をソートするだけでOK
## B - Hit and Blow
[B - Hit and Blow](https://atcoder.jp/contests/abc243/tasks/abc243_b)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n;
  cin >> n;
  vec a(n), b(n);
  rep(i, n) cin >> a[i];
  rep(i, n) cin >> b[i];
  ll res1 = 0, res2 = 0;
  rep(i, n){
    if(a[i] == b[i]) res1++;
    rep(j, n){
      if(a[i] == b[j] && i != j) res2++;
    }
  }
  cout << res1 << endl;
  cout << res2 << endl;
}
```
### 解法
位置と値が一致したときにres1を増やして、値が一致していて位置が違う場合にres2を増やす。

## B - Vertical Reading
[B - Vertical Reading](https://atcoder.jp/contests/abc360/tasks/abc360_b)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  string s, t;
  cin >> s >> t;
  for(int i = 1; i < s.size(); i++){
    for(int j = 0; j < i; j++){
      string res = "";
      for(int k = j; k < s.size();k+=i) {
        res += s[k];
      }
      if(res == t) {
        cout << "Yes" << endl;
        exit(0);
      }
    }
  }
  cout << "No" << endl;
}
```
### 解法
cとwを求めて、条件を満たすcとwがあるかを判定する。

## C - Move It
[C - Move It](https://atcoder.jp/contests/abc360/tasks/abc360_c)
解答
```c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n;
  cin >> n;
  vec a(n), w(n);
  rep(i, n) cin >> a[i];
  rep(i, n) cin >> w[i];
  vec wmax(n);
  rep(i, n){
    a[i]--;
    wmax[a[i]] = max(wmax[a[i]], w[i]);
  }
  ll wsum = reduce(w.begin(), w.end());
  ll dup = reduce(wmax.begin(), wmax.end());
  cout << wsum - dup << endl;
}
```
### 解法
すべての荷物の重さを用意しておき、そこから移動する荷物の重さの合計を引くことで求めることができる。
Svelteでコンポーネントを非同期読み込みする

## Svelteコンポーネントの非同期読み込み
特に説明することがないので答えを書きます！

```svelte
{#await import('$lib/Counter.svelte') then { default: Counter }}
  <Counter initialCount={1} />
{/await}
```

コンポーネントは特に何も考えずいつも通り作ってしまって問題ありません。
`props`も もちろん渡せます。

## ちょっと説明
Svelteコンポーネントはこちらの[JS output](https://svelte-5-preview.vercel.app/)を見て分かる通り、`export default`された関数です。

`await`ブロックで`import`し、`Promise`が解決したら`default`という名前で受け取ることができます。
`<default />`だとちょっとコンポーネントっぽくないので、`{ default: Counter }`の部分で`Counter`という名前をつけました。
コンポーネントっぽいですね〜

今回はコンポーネントを非同期読み込みしましたが、
例えば
```ts
export function hoge(){ return 'hoge' }
```
こういう関数を`import`する場合は
```svelte
{#await import('$lib/hoge.ts') then { hoge }}
  {hoge()}
{/await}
```
のように書くことができます。

今回紹介したコードは[SvelteLab](https://www.sveltelab.dev/8g5gyovp9wv9f31)にあります。
以上、Svelteコンポーネントの非同期読み込み方法でした。
mdbookを使ってみる　導入編　

個人的「質はともかく継続する」24日目です

## mdbookを使ってみる　導入編　

よく仕事の自分用Tips集にmdbookを使っています。
仕事はwindowsなので、macでの導入を試してみる事にしました。

## Rustのインストール

brewを使ってもいいのですが、まずは素直に公式サイトに則ってインストールします。

https://www.rust-lang.org/ja/tools/install

```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

１）のstandardを選択します。
![スクリーンショット 2024-07-01 22.42.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/526055e5-2337-c111-a8e3-a0adae1e17a8.png)

うまくいきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/25497dc4-94a3-f088-45c2-77a319d65dcd.png)

## mdbookのインストール

こちらも公式サイトを参考に進めてみます。

https://rust-lang.github.io/mdBook/guide/installation.html

パッケージマネージャのcargoを使ってインストールします。

```sh
cargo install mdbook
```

installが完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/43f966e3-7803-b341-f020-17e44b93a1b7.png)

## 簡単に試す

簡単に試して見ます。
初期化します。

```sh
mdbook init first-book
```

.gitignoreの作成有無を聞かれるので、今回は作成しました。
タイトルを聞かれるので今回は「First Book」としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/f7dd92fe-04b4-bbf6-35a8-763fbf21341b.png)

ディレクトリはこんな感じ。
すでにsrc配下に記事があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/5b27f85d-5749-6bc2-fc5d-90a3d45572e7.png)


早速、作成したディレクトリに移動して、サーバーを立ち上げます。
--openをつけるとブラウザが立ち上がります。
```sh
cd first-book
mdbook serve --open
```

うまくいきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/508cd655-b827-a880-7e8f-56c77ae135a8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/feb15608-265d-1fc6-d14e-1d97fe4873d0.png)

これだとサーバーで動いている状態なので、buildしてみます。

```sh
mdbook build
```

buildできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45303/0d08b41e-040e-06ca-7807-7adeda0f9f00.png)

## まとめ

とても簡単にできる上、ビルドも高速にできました。
次回はもう少しいい感じにカスタマイズしていきます。
Pythonをダブルクリックで実行

# はじめに
Pythonで作成したアプリケーションをexeにするほどでもないな、というときに比較的簡単にダブルクリックでコード実行ができるようにする方法を紹介する。

:::note warn
注意点
* Windowsを想定
* 他の人のPCにもpython.exeがインストールされていること
:::

# 環境
Windows10
winpython 3.10.90


# 結論
batファイルからpython.exeを呼び出し、引数としてPythonスクリプトを渡してしまう。
そうすればあたかも「exeを開いたような感じ」になる。
``` bat
@echo off
setlocal

title windowtitle
set PythonEXE="python.exeのフルパス"
set Program="Pythonコードのフルパス"

call %PythonEXE% %Program%
```

# 応用
基本形をベースによく使うものを記載する。
## D&DでPythonにファイルパスを渡す
`call`の文に`%*`をつける。
``` bat
call %PythonEXE% %Program% %*
```

Python側では次のように記載するとD&Dされたファイルのフルパスをリストで取得できる。
``` python
import sys
sys.argv[1:]
```

## カレントディレクトリを変更する
相対パスなどでファイルを扱う際にカレントディレクトリを変更してから実行すると良い
``` bat
cd /d "カレントにしたいディレクトリ"
```

``` bat
cd /d %~dp0
```

## 画面サイズを変更する
画面がデカくて邪魔なとき用
``` bat
mode con: cols=50 lines=17
```

## ユーザーの指示があるまで処理を停止
barファイルの最後に書いておくと処理が終わったのかエラーだったのかがわかるので書くことを推奨。なにかキーを押すと`pause`文が終了する。
``` bat
pause
```

## winpythonのコマンドプロンプトを起動する
```bat
call "絶対パス\WPy64-****\scripts\env_for_icons.bat" %*
```

## ユーザー入力を受け付ける
処理終了後、普段のコマンドプロンプトのようにユーザーからの入力を受け付けてくれる。
``` bat
cmd /k
```

## 画面を緑にする
見た目がかっこよくなるのでたまに使ってる。
``` bat
color 0a
```
openplcとラズパイpicow(※openPLCとラズベリーパイpicowに関する書籍を持っている初心者用の説明です。)



PLCに興味を持ったのでOpen PLCとラズベリーパイ picoW を用いて勉強を始めました。
openPLCとは実機等がなくても、PLCの学習が出来るツールです。

OpenPLC自体の説明は参考にした書籍の丸パクりになるので省いて、このような書籍に載っていない私のような超初心者にありがちな失敗について共有いたします。

①ラズベリーパイpicowがパソコンと繋がらない。
 openPLCの説明とは外れるが、pico Wとパソコンがつながらず悪戦苦闘する初心者は多いと思う。
 要因としてはUSBケーブルが通信非対応、pico wの白いボタンを押しながらUSB接続を行っていないが殆どです。こんなのは間違えないよと思いますが、初心者はここで沼ります。

 【ラズベリーパイpicow 参考】
 ![KIMG0283.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827595/63e827b1-ee2a-d319-4e92-41307f88c54c.jpeg)


②ラズペリーパイpicowと繋がっているポートが分からない。
OpenPLCのデータをラズベリーパイpicowに書き込む際に、ラズベリーパイpicowと繋がっているポートを指定する必要があります。
【openPLC画面 参考】
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827595/25e2b627-829c-4286-6db2-f0c99c90b9a8.png)


これはデバイスマネージャーのポート(COMとLPT)に表示されている場合もありますが、私のように表示されていない場合があります。

【表示されていない例　参考】
![33.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827595/6858b2c5-3571-7bdc-45b7-4e0daaa688c1.png)

このような場合は表示→非表示デバイスの表示を押すと必要なポートを見つけられることが出来ます。

【表示後の例 参考】
![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827595/347bbe38-1dab-9922-4118-fc0597d3af09.png)
Azure Data Factory にて CSV 形式のファイル内容をそのまま取得する方法

## 概要

Azure Data Factory にて CSV 形式のファイル内容をそのまま取得する方法を共有します。ルックアップ（参照）アクティビティを利用した場合には json 形式で出力されてしまうのですが、 Web アクティビティ経由であればファイル内容をそのまま取得できました。

＜ルックアップ（参照）アクティビティの出力結果＞

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/73d71380-7867-5470-d387-b299aa5ad4d7.png)

＜想定結果＞

```csv
"Name","ExternalId__c"
"A Company","1"
"B Compan","2"
"C Company","3"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bead7544-520f-969d-e071-8ba0659b42c9.png)

CSV 形式のファイル内容をそのまま取得するユースケースの１つは、 Salesforce の Bulk API 2.0 を利用するケースです。API の仕様により CSV 形式で

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/59580b66-be1f-9152-3ded-3485fffafec7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e59a41fc-64d5-e89b-f486-f1afe3149e3a.png)

引用元：[ステップ 5: 一括更新/挿入 | Bulk API 2.0 および Bulk API 開発者ガイド | Salesforce Developers](https://developer.salesforce.com/docs/atlas.ja-jp.api_asynch.meta/api_asynch/walkthrough_upsert.htm)

## 実施手順

### 事前準備

- Azure Storage の構築
- Azure Data Factory の構築
- Azure Data Factory にて Azure Storage のリンクサービスを作成 *1

*1 Azure Storage に対するリンクサービスは、 Web 接続として下記のように作成します。

| #    | 項目       | 値                                         |
| ---- | ---------- | ------------------------------------------ |
| 1    | ベース URL | https://{storageName}.dfs.core.windows.net |
| 2    | リソース   | https://storage.azure.com/                 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5564a558-522e-5de7-6cd7-11938a77fe6d.png)

### 1. Azure Data Factory にて Web アクティビティを追加



| #    | 項目            | 値                                |
| ---- | --------------- | --------------------------------- |
| 1    | 接続の種類      | リンク サービス                   |
| 2    | リンク サービス | 作成した Web 接続のリンクサービス |
| 3    | 相対 URL        | ファイルのパス                    |
| 4    | メソッド        | Get                               |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4618def9-0d69-656b-67e3-bc9f378d91ee.png)


### 2. Azure Data Factory にてパイプラインを実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5fc8f83c-59b5-d86d-de98-6e5df5fdae3f.png)


### 3. 出力結果を確認

> "Response": "\"Name\",\"ExternalId__c\"\r\n\"A Company\",\"1\"\r\n\"B Compan\",\"2\"\r\n\"C Company\",\"3\"\r\n",

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/08f3016e-bd28-9eb0-552c-da803c18d66e.png)
【初心者向け】知っておくと役に立つPythonのTips

Pythonで意外と知らないTipsをいくつか紹介
逐一思い出し次第追加していきます。

### 文字列の中で変数を使用する
```python
a = "hoge!"
print(f"Hello,{a}")
```

### リストの最後尾
Pythonでは、インデックスに-1を指定することにより、一番最後の値を参照することができる
```python
list = ["hoge", "hogee", "hogege", "hogehoge"]
print(list[-1])#出力　hogehoge
```

### リストのスライス
リストは[]内で:を使用することにより、n~mというように一部を取り出すことができる
```python
list = ["hoge", "hogee", "hogege", "hogehoge"]
print(list[2:3])#出力　['hogege', 'hogehoge']
```
これを利用することにより、文字列の「何文字目から何文字目」というような取り出し方もできる。
```python
string = "hello world!"
print(string[0:5])#hello
```

### リストの逆順
[]を[::-1]とすることにより、逆順のリストを指定することができる。
```python
my_list = [1, 2, 3, 4, 5]
reversed_list = my_list[::-1]
print(reversed_list)# 出力: [5, 4, 3, 2, 1]
```

### リスト内包表記
リスト内に式を書くことにより、その式の値をリストに格納することが可能になる
```python
twice = [x*2 for x in range(10)]
print(twice)#出力: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
```

### 複数の変数を一度に代入
```python
a, b, c = 1, 2, 3
print(a, b, c)#出力: 1 2 3
```

### 文字列の分割
split()メソッドを使用することで文字列を分割することができる
```python
s = "hello world"
words = s.split()
print(words)#出力: ['hello', 'world']
```

また、split()に引数を指定することにより、「引数に指定したもので分割する」ということも可能
```python
s = "2024-07-01"
words = s.split("-")
print(words)#出力: ['2024', '07', '01']
```

### 関数の引数と返り値に型を指定
今回は文字列(str)を指定してみる
```python
def greeting(name:str)->str:
    return f"Hello,{name}"
    
print(greeting("tarou"))#出力 Hello,tarou
```

### 関数のデフォルト引数
引数に指定がなかった場合、デフォルトでこれを引数とする。みたいなことを決めることができる
```python
def greeting(name:str="yamada")->str:
    return f"Hello,{name}"
    
print(greeting())#出力 Hello,yamada
```
この通り引数をしてしない。

### インデックス付きループ
```python
my_list = ['a', 'b', 'c']
for index, value in enumerate(my_list):
    print(index, value)
#出力:
# 0 a
# 1 b
# 2 c
```

### リストの要素がすべて(どれかが)真かどうかを確認
allを使用することですべて真(True)かどうか
anyを使用することでどれか1つでも真(True)があるかどうかを判断できる。
```python
my_list = [True, True, False]
print(all(my_list))  #出力: False
print(any(my_list))  #出力: True
```
何もしていなかった自分が毎日アウトプットしつづけた3週間を振り返る

6/10のQiitaEngineerFesta2024記事投稿イベント開催から本日で約3週間が経過し、
自分は完走賞を目指して毎日記事を投稿していた。
実は、この記事で自分が投稿したキャンペーン参加記事は22記事目である。
- いつの間にかハーフマラソン賞を獲得していた😳

折り返し地点を過ぎたので、一度振り返ってみる

# アウトプットを始めたきっかけ

今更だが、今回のイベント開催から記事投稿を始めた経緯をまとめる

QiitaでAtCoderの色変記事などを見て興味を持ち、3月頃にAtCoderを始めた。
入茶したタイミング自分も色変記事をと思ったが何もせず、
そこから少し経ち3ヶ月という区切りで初めて記事を書いた。

https://qiita.com/comet725/items/122a62d7c85f8ba2250c

最初の記事を投稿してから数日後、今回のQiitaEngineerFesta2024の開催を知り、
自分なりのネタがいくつかあったので、折角なので色々とネタ出しの記事を書いてみた。

https://qiita.com/comet725/items/f17b3168eceb627bb669

翌日以降そのネタ出しの内容から記事書いてみて投稿するようになった。

https://qiita.com/comet725/items/5ecc49da19bfac3d25db

https://qiita.com/comet725/items/fd87e44bd630fa156fe8

# 続けた感想

ここまで記事投稿を続けてきた感想としては、
始めてみたら思ったほど難しくはないということである。

イメージしてみてほしい。
X(Twitter)等のSNSで色々つぶやくことと、
このように文章を書いて記事を投稿するのでは、
どちらが大変だと思うだろうか。
普通なら圧倒的に後者が大変だと思うだろう。

3週間やってみた正直な感想としては、**ほとんど変わらない**というものであった。

文章を書いて、投稿するという点ではどっちも同じであり、
オンライン上で情報を共有し、意見や感想、経験等を表現すること、タグなどで分類されたものを検索して投稿を探すこと、トレンドに上がっているものに対して色々反応すること、いいねや返信(コメント)などの頂くと嬉しいフィードバックがあることなど、
共通点はいくつかある。
そもそも、Xは分類すると**マイクロブログ**と呼ばれるものであり、
このような記事（ブログ）を書いていくのはそのXでつぶやくようなことの延長線上だと思えなくもない。

勿論この感想は、**つぶやきの延長線上で記事を書いていく分には難しくはない**という話で、アイデア出し、トピックの選出、見出しを考える、実行した結果をまとめる、校正、編集など、
実験レポートや論文を書くようなステップを踏んで100％を目指した真面目な記事を作ろうとすると時間がかかって大変なのは当然のことである。
7～8割ぐらいのクオリティで書いていくのが丁度いいと様々な記事をよく見るが、その通りだと思う。

とりあえずアウトプットをしてみたいという人はXにつぶやく感覚で記事を書いたらどうだろうか？

# 自分の変化

3週間やってきて自分の変化を少し感じるようになった。

以前は書きたいなとか思うだけで全く何もしていなかった。

今では、とりあえず書けるネタがあれば、
即座に書き始め、ある程度の形になった時点で投稿までしている、
そのようなマインドや行動の変化を現時点で感じた。

また、色々な記事を参考にしながらまとめていき、
自分なりのアウトプットの定跡を少し形成しつつある。

このような変化があり、成長を感じた。

# ネタ出しの振り返り

ここからはネタ出し記事の内容を振り返る

https://qiita.com/comet725/items/f17b3168eceb627bb669

この記事では以下について触れてきた
- テトリス風落ち物パズル
- AtCoder
- スライドパズル
- その他(ポエム等)

以降ではそれぞれの項について振り返ってみる

## テトリス風落ち物パズル

現状でpart11まで書き、part12の下書きが6割位ある

内容としては自分が以前作っていたプログラムを順番に説明したものを出していて、
もうすぐでその以前作ったプログラムに記事の内容が追いついてしまう。
追いついてしまった場合、これ以上の作り込みには時間がかかりそうな予感
あと出せたとして精々4，5本くらい(?)

## AtCoder

最初はABCの振り返り記事しか書いていなかったが、
特定の1問に焦点を当てた記事を書くようにしてから、
こちらの記事を投稿することが増えてきた。

ここからはこっちの記事を作るパターンが増えてきそう

## スライドパズル

こちらはなにも手を付けておらず、放置状態

テトリス風落ち物パズルの記事が一区切りしたら、色々書いていくかも(?)

## その他、(ポエム等)

ネタ出し記事の最後では「その他」という見出しを立て、そこでは「ポエム等も書くのはありかもね」と記述した。
まさに今回の記事がわりとポエム的な部分があると思っている。

個人的にはQiitaで関心をもつのはこういう話をまとめた記事なのでもっと書いていきたい。

## 振り返りの結論とこれからの方針

とりあえず振り返った結果としては、
テトリス風落ち物パズルは11記事書いて、最近はAtCoderの問題をまとめるようになった
スライドパズルについては現在ノータッチで、
その他としてポエム等を考えていたが、書いたのは今回の記事ぐらいという結論になった。

ネタ出しの記事に纏めていない話としては、
何か自己流のコーディング術とかお気に入りの拡張機能、ツール等を
まとめられないかとか模索している状態

# まとめ

今回はこの3週間でアウトプットしてきた内容について振り返った。

いままでは何もアウトプットしてこなかった自分が
なんとなく適当に記事を、書いていったら現時点まで毎日書けているのは正直意外で、
きっかけがあれば自分を変えることができるのだねという話
Fish起動時に大文字のFISHを出す

## スクリプト

```
echo " ________    _    ________    _       _ "
echo "|  ______|  | |  |  ______|  | |     | |"
echo "| |______   | |  | |______   | |_____| |"
echo "| _______|  | |  |______  |  |  _____  |"
echo "| |         | |   ______| |  | |     | |"
echo "|_|         |_|  |________|  |_|     |_|"
```

## 結果
![スクリーンショット 2024-07-01 22.40.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166924/0dd39315-38a4-813a-24cb-68841b9c18c8.png)
自己紹介


# はじめに
Qiita初投稿です。
今年でちょうど30歳になりますが、完全未経験からPGへの転職を目指して勉強中です。







# 自己紹介
* 国立大学工学部材料系卒
* 新卒ではメーカーへ就職し、マシンオペレーターとしてNCプログラムを組んでました
* その後、航空自衛官に転職し、航空機を探知するレーダーの整備業務を行なっていました






# プログラマーを目指すきっかけ
大学で専門ではないもののプログラミングの授業があり、C言語を少し学びました。当時は全く理解できず正直プログラミングは自分には向いていないなと言う印象でした。月日が経ち20代後半になってから、このままでは何のスキルも身に付かず、組織に頼らないと生きていけないと言う不安があり、自分のスキルを磨いて自分の力で稼げるようになりたくて本格的にエンジニアになろうと決心しました。








# 学習していること
2024年6月より、プログラミング学習を開始。

* HTML ,CSS ,Sass
* JavaScript, Node.js
* PHP, Laravel
* Git/GitHub(SouceTree)







# おわりに
学習したことのアウトプット及び後々自分で見返すためのメモとして投稿していきたいと考えています。
よろしくお願いします。
Goのnet/httpで、ミドルウェアを書いてみる

## はじめに
Goの標準パッケージを使ったプログラミングに慣れるために、net/httpだけでミドルウェアを書いてみました。

next.ServeHTTP(w, r)の前に書くか、後に書くかで、いつ処理されるかが決まるようです。

```go
package main

import (
	"net/http"
)

func middleware1(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("before middleware\n"))
		next.ServeHTTP(w, r)
	})
}

func middleware2(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		next.ServeHTTP(w, r)
		w.Write([]byte("after middleware\n"))
	})
}

func main() {
	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello World\n"))
	})

	http.Handle("/", middleware1(middleware2(handler)))

	http.ListenAndServe(":8080", nil)
}
```

## 動かしてみる

```zsh
curl http://localhost:8080

before middleware
Hello World
after middleware
```
[gitlab] 新規参画者のために、Group 配下の Project をまとめて git clone するスクリプトを作った

# はじめに

仕事環境では、以下のように Group（=サービス） の中にそれぞれ機能ごとに Project が格納されている構造を取っています。

```
sample
├── documents
├── sample-client
├── sample-database
├── sample-api
├── sample-admin-api
...
```

そのため、新規サービスに参画したときや、新人たちは一つ一つ Project 数ぶん `git clone` する必要があり、とても面倒でした。
多いときは同じ Group 内に 30 以上も Project があったりします。。。

なので新規参画者のために効率化しようと思い、一発でまとめてクローンできるようなスクリプトを作成しました！

# 使い方

1. $(GROUP_ID) に clone したい Group（リポジトリ）を指定する。
1. clone したい階層にて git bash でコマンドを実行する。

# 前提

- Group 配下に Subgroup がある場合、その Subgroup は clone してくれない。
    - その場合は、その配下分、同じようにスクリプトを実行すること。

# スクリプト

```bash
#!/bin/sh

GITLAB_HOST=git.sample.com
PRIVATE_TOKEN=XXXXXXXXXX

# Group ID を指定
GROUP_ID=9999999

curl -sS --request GET \
    --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" \
    "https://${GITLAB_HOST}/api/v4/groups/${GROUP_ID}" | jq '.projects[].http_url_to_repo' | xargs -n 1 git clone
```

もし gitlab クライアント証明書使用している場合、$(KEY_FILE) と $(CERT_FILE) に自身の gitlab クライアント証明書のパスを指定します。

```bash
#!/bin/sh

GITLAB_HOST=git.sample.com
PRIVATE_TOKEN=XXXXXXXXXX

# gitlab クライアント証明書のパスを指定
KEY_FILE=xxx-key.pem
CERT_FILE=yyy-cert.pem

# Group ID を指定
GROUP_ID=9999999

curl -sS --request GET \
    --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" \
    --key ${KEY_FILE} \
    --cert ${CERT_FILE} \
    "https://${GITLAB_HOST}/api/v4/groups/${GROUP_ID}" | jq '.projects[].http_url_to_repo' | xargs -n 1 git clone
```

# さいごに

前提にも書いてあるように、今回のスクリプトでは「Group 配下に Subgroup がある場合、その Subgroup は clone してくれない。」ので、これも解決できるようなスクリプトを今後は書きたいです！
何度UiPathでセレクターを設定しても実行したらズレる沼

## はじめに
  UiPath Studioで開発を始めてはや1年。
  これまで手作業でしていた作業をもう少しで自動化できそう…ってところまで来たのですが、
  テスト実行していると必ずほぼ決まったところでセレクターがずれて読み込めない…
  WebUIを操作する際に「あいまいセレクター」を使うことが多いのですが、設定方法の見直しを何度しても
  どうしても根本解決ができませんでした。

  やっと解決できたと思った時には結構基礎的なところで悩んでいたことに
  気づきましたが、なかなか気づけなかった自分の備忘録として、
  他の同じ悩みを持つ方に見ていただけるように記録を残します。

## 開発環境 
 * 仮想マシン
 * Windows Server 2016 
 * UiPath Studio v2022.10

## 解決方法
以下の「ディスプレイの解像度」を合わせて設定すること

 * 仮想マシンに接続するローカルPC
 * 仮想マシンであるWindows Server
論文解説：Improving 2D Human Pose Estimation in Rare Camera Views with Synthetic Data

## 初めに
この記事は著者の理解を深めるために書いた記事です。
ちゃんと理解した内容を書いているつもりですが、初学者が書いているため、間違いがあるかもしれません。
もし間違いがありましたら指摘していただけると大変嬉しいです。
原著論文：https://arxiv.org/pdf/2307.06737
研究紹介サイト：https://mirapurkrabek.github.io/RePoGen-paper/
以下、記事内で使用している画像については全て原著論文を参照しています。

## 概要
ゲームエンジンで難しそうな姿勢を複数生成し、それをデータセットに追加して学習させた
珍しい場面の姿勢において精度向上

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/f0f0a36b-c553-7b4c-eafb-11e507263de8.png)

# どんなもの？
難しい（見えにくい）姿勢に注目して姿勢推定する。現在、PoseEstimationでよく使われているCOCOデータセットにはスポーツの場面などで見られる極端な姿勢のシーン（上面図とか下面図とか）が少なく、そういう珍しい場面に対する姿勢推定は各モデルの精度を低下させる要因になっている。そこで包括的にポーズを確認できる合成データ生成のための新たな手法を提案。

# 先行研究と比べてどこがすごい？

人や体の一部を追加してオクルージョンをシミュレートする方法も存在するが、多角的な視点を考慮するものでない。ゲームエンジンを用いた合成データ精製方法も存在するが、ポーズのばらつきに制限があり、日常的な生活ポーズしか生成できない。これらに対し、関節の制約や確率パラメータを入力し、ポーズを生成、テクスチャを貼り付け、光とカメラの位置・背景をセッティングすることで、珍しいポーズデータも生成することが可能に。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/7c1d1360-f215-38e5-4035-7161ffb156d5.png)

# 技術や手法のキモはどこ？
関節や回転角度に制限をもたせることで、珍しいポーズでかつ非現実的なポーズを排除できていること。

# どうやって有効だと検証した？
生成したデータを通常のCocoデータセットのみで学習させたモデルと拡張データセットで学習したモデルで比較し、精度が上がっていることを確認した。
場合わけしたい引数がnullishの場合どうする？

## はじめに
この問題は`ts-pattern`を使います。

https://github.com/gvergnaud/ts-pattern

## P.nullish
以下公式の例コード
引数である`input`の型定義が`number | null | undefined`これらどのパターンも入りうる場合。
`number`型の時は`P.number`
それ以外(`null`, `undefined`)の場合は、`P.nullish`とすることで
場合分けが可能です。

```typescript
import { match, P } from 'ts-pattern';

const input = null;

const output = match<number | null | undefined>(input)
  .with(P.number, () => 'it is a number!')
  .with(P.nullish, () => 'it is either null or undefined!')
  .exhaustive();

console.log(output);
// => 'it is either null or undefined!'
```

## さいごに
`ts-pattern`を使うときに引数として`nullish`な型を呼び出すイメージがあまりなかったので、驚いた技法でした。
それよりも前段階で`nullish`を省く形をとっていました。
これを活用している良い例があったら知りたいです。自分もうまく活用できないか模索中。
LeetCode挑戦日記：Day24

# はじめに

最近、業務で実装する時間よりも資料作成やレビューをする時間が多くなってきました。
このままでは自身のコーディング能力が落ちそうで怖いので、LeetCodeを始めてみました。

自身の学習の記録 & LeetCodeに興味のある人が挑戦しやすいように、記事に残していきます。
このような競技プログラミングをした経験がないので、ひよってEasyからやっていきます...

# [Medium] 2390. Removing Stars From a String

文字列`s`が与えられ、そこには星`*`が含まれています。

1回の操作で以下のことができます：
- `s`の中で星を1つ選びます
- その星の左側にある最も近い非星文字を削除し、星自体も削除します

すべての星が削除された後の文字列を返してください。

注意：
- 入力は常に操作が可能なように生成されます
- 結果の文字列は常に一意であることが示されています

## 素直に解いてみる

### 考え方

1. `s`を前から確認し、`'*'`でない場合はレスポンスに追加し、`'*'`の場合はレスポンスから一文字削除する

### コーディング

```typescript
function removeStars(s: string): string {
    const response: string[] = [];

    for (let i = 0; i < s.length; i++) {
        const letter = s.charAt(i);
        if (letter === '*') {
            response.pop();
        } else {
            response.push(letter);
        }
    }

    return response.join('');
};
```

### 結果

Runtime：78ms
Beats 91.98%

Memory：64.45MB
Beats 37.13%
（初学者・学生）とりあえずAWSの勉強してみたいとき AWS Cloud Quest-CloudPractitioner

# とりあえずAWSを使ってみたい
理系大学生が就活について考え出すと、情報系の技術・知識の欄にAWSがあったりします。
しかし、AWSは普段の大学生活では使わないし、研究活動でも使わない。
勉強を始めようと触ってみるとお金がかかりそうで怖いという人に向け、1つ公式のサービスを紹介します。

それが **AWS Cloud Quest-CloudPractitioner** です。

とりあえずAWSを勉強してみたい人には最適で、インフラのシステム構築やサーバーの立ち上げ、、データベース管理などを無料で触ることができます。

[AWS Cloud Quest](https://aws.amazon.com/jp/training/digital/aws-cloud-quest/)

少し前から完全ではないですが日本語対応しているので、内容も理解しやすいです。

リンク先を見ていただくと分かりますが、結構本当にゲームって感じです笑

少し前から、これを使いながら勉強しているので、同じように勉強したいけど、AWSにお金を払うのに抵抗があると言う方一緒にやって勉強しましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/5ee0c529-84d4-0f31-0918-cbe7c8a29bd0.png)
【Mac】bashで!でびっくり!

Macで以下コマンドを実行すると、こんなことになりまして。。。
```bash
echo "Hello, world!" >> hello_world.txt
dquote> 
```

History見てみると、
```bash
echo "Hello, world >> hello_world.txt
```
となっており、!"が変な解釈されていそう。

devcontainerでlinuxベースのbashにすると、
```bash
echo "Hello, world!" >> hello_world.txt
```
で、問題なくファイル生成されていて、コマンド入力ミスっているわけではなさそう。

調べてみると、こんな記事が。

https://superuser.com/questions/133780/in-bash-how-do-i-escape-an-exclamation-mark

ということで、以下コマンドにすると、当初想定通りの結果に。

```bash
echo "Hello, world"! >> hello_world.txt
```

ちなみに、シングルクオートだとそのままでうまくいくという。。。
```bash
echo 'Hello, world!' >> hello_world.txt
```

Linux系と一緒だと思ってたら訳わかんないところでちょっとはまりました。。。
Azure: なんの id だったっけ？ってなった時用の調査記録

# 背景

始めて間もない頃、id 自体が何用の id なのかが掴めてなかった。

で、とりあえず、id 情報取得系のコマンドを呼んで、該当するものを探す、という荒業をしていた記録

# 内容

- 以下powershell 内のコマンドを使って調べた。
- で、コマンド順番に打つの面倒だったんで、powershell にまとめただけ

とはいえ、今となってはいつ使うんだって代物・・

> detect.ps1 {unknown id}

```powershell: detect.ps1
param(
    [string]$Id
)

# サービスプリンシパルの確認
try {
    $sp = az ad sp show --id $Id --query "{Name: displayName, AppId: appId}" -o json
    if ($sp) {
        Write-Output "ID: $Id is a Service Principal"
        Write-Output $sp
        return
    }
} catch {
    Write-Output "Not a Service Principal"
}

# グループの確認
try {
    $group = az ad group show --group $Id --query "{Name: displayName, Id: objectId}" -o json
    if ($group) {
        Write-Output "ID: $Id is a Group"
        Write-Output $group
        return
    }
} catch {
    Write-Output "Not a Group"
}

# ユーザーの確認
try {
    $user = az ad user show --id $Id --query "{Name: displayName, UserPrincipalName: userPrincipalName}" -o json
    if ($user) {
        Write-Output "ID: $Id is a User"
        Write-Output $user
        return
    }
} catch {
    Write-Output "Not a User"
}

# マネージドIDの確認
try {
    $managedIdentity = az identity show --ids $Id --query "{Name: name, Id: id}" -o json
    if ($managedIdentity) {
        Write-Output "ID: $Id is a Managed Identity"
        Write-Output $managedIdentity
        return
    }
} catch {
    Write-Output "Not a Managed Identity"
}

# アプリケーションの確認
try {
    $application = az ad app show --id $Id --query "{Name: displayName, AppId: appId}" -o json
    if ($application) {
        Write-Output "ID: $Id is an Application"
        Write-Output $application
        return
    }
} catch {
    Write-Output "Not an Application"
}

# ロール定義の確認
try {
    $roleDefinition = az role definition list --query "[?id=='$Id']" -o json
    if ($roleDefinition -and $roleDefinition.Count -gt 0) {
        Write-Output "ID: $Id is a Role Definition"
        Write-Output $roleDefinition
        return
    }
} catch {
    Write-Output "Not a Role Definition"
}

# ロール割り当ての確認
try {
    $roleAssignment = az role assignment list --all --query "[?id=='$Id']" -o json
    if ($roleAssignment -and $roleAssignment.Count -gt 0) {
        Write-Output "ID: $Id is a Role Assignment"
        Write-Output $roleAssignment
        return
    }
} catch {
    Write-Output "Not a Role Assignment"
}

Write-Output "ID: $Id is not a recognized Azure identity type"
```

# あとがき

うーん・・・なんでこんなことが必要になったか？と思い出すと・・

- アプリ登録は、会社が管理している為、許可制
- 申請後、展開されてくる情報が、MS-Learn の説明とで、表記揺れがあった
- *** id みたいなのが、いったいどれに該当するのか？不明

ってことで、調べた際のもののような・・ :sweat_smile:
Salesforceで商品作成時に効率よく商品に標準価格表を紐づける方法

Salesforceで商品作成時に効率よく商品に標準価格表を紐づける方法を解説します
（商品作成時の価格表エントリ自動作成）

まず、前提として商品作成時に価格表エントリ自動作成　は標準の設定ではできないようです

なので一括商品作成時にコードを使用した方法が試されていました

https://salesforce.stackexchange.com/questions/217327/automatically-add-a-standard-price-book-entry-after-creating-product


ではSalesforce画面上ではどうでしょうか

Lightning環境ではまず新規で商談作成後[保存]クリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/265046f4-e965-00cf-4471-5229e9a5b215.png)

その後関連リストのボタンから「標準価格を追加」をクリックして保存　という動きになります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0ae43c28-76f5-84bb-0ab3-f2804e8b7b30.png)




なお、こちらのヘルプを見れば差も自動で商品が作成されれば自動で標準価格表が作成される　と書いてあるようにも見えます


>標準価格表は、すべての商品とそのデフォルト標準価格のマスターリストです。商品レコードの作成を開始すると、Salesforce によって標準価格表が作成されます。標準価格表には、同じ商品が含まれるカスタム価格表の有無に関わらず、すべての商品とその標準価格が含まれます。

https://help.salesforce.com/s/articleView?id=sf.pricebooks_landing_page.htm&type=5

しかし、実際には以下ヘルプのように商品作成時は手動で標準価格表も作成する必要があるのでご注意ください

https://help.salesforce.com/s/articleView?id=sf.comm_standard_pricebook.htm&type=5

>[商品] をクリックします。
既存の商品を選択するか、商品を作成して [価格表] セクションまでスクロールします。
[標準価格を追加] をクリックします。
[有効] を選択します。
ヤマハルーターで、VRRP と 回線冗長化の併用 (LUA)

## 前提

- インターネット回線は二つ
- ルーターも二つ
- 平時もバックアップ回線を有効活用したい
- パソコンのゲートウェイは１つのアドレスで固定

図にすると、こんな感じのケース。
L3スイッチのGatewayは、10.10.0.254 を見ている想定です。

![完成予想図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180964/eadb9026-8244-902f-f2c3-9887b436dcdf.png)

## 設定

コアな部分のみ書きます。

Router1
```
ip lan1 vrrp 1 10.10.0.254 priority=200
ip lan1 vrrp shutdown trigger 1 lan2
ip lan1 vrrp 2 10.10.0.253 priority=100
lan keepalive use lan2 icmp-echo 8.8.8.8 length=65

ip filter 2501 pass 192.168.200.1-192.168.200.253 * * * *
ip forward filter 1 1 gateway 10.10.0.253 filter 2501
ip lan1 forward filter 1
schedule at 1 startup * lua emfs:/vrrp-check.lua
```

Router1 の LUA

``` lua
embedded file vrrp-check.lua <<EOF
LOG_PTN = "%[VRRP LAN1:2%].* (%w+)$"
CMD_ROUTING = "ip lan1 forward filter 1"

function change_routing_vrrp(VRRP_STATE)
	if VRRP_STATE == "MASTER" then
		rt.command("no " .. CMD_ROUTING)
	else
		rt.command(CMD_ROUTING)
	end
end

function vrrp_status_check()
	local rtn, str
	rtn, str = rt.command("show status vrrp lan1 2")
	if (not rtn) or (not str) then
		return 1
	end

	if string.find(str,"Master") ~= nil then
		change_routing_vrrp("MASTER")
	else
		change_routing_vrrp("BACKUP")
	end
end

function wait_log()
	local rtn, array
	while true do
		rtn, array  = rt.syslogwatch(LOG_PTN)
		if rtn > 0 then
			change_routing_vrrp( string.match(array[1], LOG_PTN))
		end
	end
end

vrrp_status_check()
wait_log()
EOF
```

Router2

```
ip lan1 vrrp 1 10.10.0.254 priority=100
ip lan1 vrrp 2 10.10.0.253 priority=200
ip lan1 vrrp shutdown trigger 2 lan2
lan keepalive use lan2 icmp-echo 8.8.8.8 length=65
```

## 解説

両方の回線が生きている場合、
端末セグメント２はルーター１の パケット転送フィルター（ip lan1 forward filter  ～）で、回線２ を使うようになっています。

回線１が障害の場合、
VRRPにより全通信がルーター２に向きます。

回線２が障害の場合、
端末セグメント２はパケット転送フィルターにより、NextHopが 10.10.0.253になりますが、これはルーター１自身のIPになってしまいます。これを回避するため、LUAで パケット転送フィルターの オン/オフを VRRPに連動して切り替えます。


## LUA が必要な理由

- VRRPの状態により経路変更する仕組みがない


## LUA が不要なパターン

- 端末のゲートウェイ設定をルーター１にしたり、ルーター２にしたり指定できる場合。（図のL3がなくなり、ルーターのLANセグメントに直接、端末がつながっているパターン）
DHCP サービスを走らせて、fallback オプションと gateway指定の組み合わせで分けたりできる。


## 後記
いろいろ試してみたけど、どうにも組み込みコマンドだけで設定するのは難しそう。
L3スイッチでソースアドレス指定した経路設定できたら問題ないんだけど。
ヤマハルータなら設定例みたいなソースアドレス指定で経路設計できるので、スイッチでも実装してくれたらいいのに。
pythonコードでとりあえずデモページ作ってと言われたら（Gradio）

# Gradioについて
以前、pythonでコード作成依頼を受けた際、簡単でいいので、それをコマンドラインではなく、何かデモとして確認できる形にしてほしいと依頼されました。
そんな時に見つけたのがGradioです。

Pythonでコードを作成したのに、サイトみたいにデモページを確認したい！と無茶振りされた時に使えます。

今回は、例として掛け算を行うサイトのデモを作ります。
必要なライブラリは`gradio`です。

例えば、以下のように依頼されたコードを書いたとします。

```python
# 掛け算する関数
def multiply_numbers(num1, num2):
    return num1 * num2
```
これに対して、とりあえず.pyで作成したのでコマンドラインで実行させたいですが、デモサイトのように確認したいと言われたら...

```python
import gradio as gr

# 掛け算する関数
def multiply_numbers(num1, num2):
    return num1 * num2

# Gradioインターフェースの定義
demo = gr.Interface(
    fn=multiply_numbers,  # 使用する関数
    inputs=[gr.Number(label="Number 1"), gr.Number(label="Number 2")],  # 入力タイプ
    outputs=gr.Number(label="Result"),  # 出力タイプ
    title="掛け算デモ",  # タイトル
    description="二つの数字を入力すると掛け算して結果を返します。"  # 説明
)

# デモの起動
if __name__ == "__main__":
    demo.launch()
```

これくらいで最低限のものは完成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/ea41f37c-bc05-f607-56af-739148e975b8.png)

プログラムを実行したら、ローカルのリンクが表示されるのでそれをクリックするだけです。
非常に簡単ではないでしょうか。

ちなみにCSSで外観も変更できるので、多少の融通も効きます。
ぜひ、無茶振りされた時に使って爆速でデモを作ってみてください。
コードレビューの指摘について

# はじめに
とあるコードレビューで指摘を受けた内容です。
今後の自分に対してのメモとしての備忘録です。

# 修正前
## 対象コード
```ruby
  scope :public_record, -> {
    where(open_at: ..Time.zone.now)
      .where(close_at: Time.zone.now...)
      .or(where(open_at: ..Time.zone.now).where(close_at: nil))
      .or(where(open_at: nil).where(close_at: Time.zone.now...))
  }
```
## 指摘内容
このスコープがとても見づらく、次に条件式を加える際に何処に手を加えればいいかわかりづらいとのこと

# 修正後
## 対象コード
```ruby
  scope :public_record, -> {
    query1 = where(open_at: ..Time.zone.now).where(close_at: Time.zone.now...)
    query2 = where(open_at: ..Time.zone.now).where(close_at: nil)
    query3 = where(open_at: nil).where(close_at: Time.zone.now...)

    query1.or(query2).or(query3)
  }
```

# さいごに
個人的には修正する必要あるかな？と思う反面、判る人には判るが判らない人にはとても読みづらいとのことでした。
修正後はとても好評で、読みやすく理解しやすいとのことでした。
scopeとしてどうなのだろう？と思う所もありますが、クエリとして成立してましたのでヨシとしました。
今後は、こういったものが可読性だったり保守性に繋がると思うので注意していきたいと思った次第です。
面談で緊張しがちなあなたへ

# この記事で伝えたいこと
面談を受けるために以下のようなマインドセットをすると、緊張しにくくなるかもしれません！
* 面談は「会話」の場であり、「スピーチ」の場ではありません
* 敬語は、いつも使い慣れている最低限のもので十分です
* 自分で話題を引き出す必要がない分、普段の会話よりも楽です

# この記事の対象者
* SESとして働いている人
* エンジニアの派遣会社に勤めている人
* 面談が大嫌いな人

# 筆者について
こんにちは、おさだです！
今回は、エンジニア仲間内で「面談が嫌だな」「緊張する」といった話が出たので、人生で一度も **「面談・面接に落ちたことがない私」** が、緊張しないコツを書いてみます。

# そもそも面談が嫌いになる理由
私は面接・面談が大好きで、面談まで行けば「もうもらったな！」と思えるほどですが、世の中にはそのような人は少数派です。では、なぜ面談が嫌いになるのでしょうか？
それは、「練習」「訓練」「ルール」を必死に守るべき試験だと思い込まされているからです。

受験でも面接があります。その時に教師から多くのことを教わったかと思いますが、その印象が原因で、面談にも苦手意識を持つことが多いのです。そんな人は、事前に覚えた予想問題集と解答リストを頭に叩き込み、質問されたらそれを答えることが対策だと考えるでしょう。

それがそもそもの間違いで、私はそのような対策を一切しませんでした。予想問題集があるなら、一度目を通して「自分ならこう答えるかな」と頭の中で考えるだけで十分です。

# 面談のコツ① 面談は会話です
ここで、面談相手の気持ちを考えてみましょう。その人の使命は「一緒に働く仲間」を探すことです。つまり、人となりやキャラクター、現場に馴染めるかを面談で判断しようとしています。
それなのに、用意してきた答えをペラペラ喋るだけでは、その人の本質がわかるでしょうか？全くわからず「こんな人と一緒に働いて大丈夫か？」と不安にさせるだけです。

そう、面談でやるべきことは **「会話」** です。決して「スピーチ」をする場ではないことに注意しましょう。

よって、すべきことは相手の質問をよく聞き、素直に答えることです。それ以外にありません。

会話なら普段現場でしていますよね？そのくらいのテンションでいいのです。今は面接官でも、ゆくゆくは同じ現場で働く仲間になるかもしれないので、素直に会話しましょう。

# 面談のコツ② 敬語は使い慣れている範囲で
よくある失敗として、敬語を使おうとして噛んだりどもったりしてうまく喋れないことがあります。「承知いたたました」と言って恥ずかしくなり、リズムが崩れるなんて経験があるのではないでしょうか。

結論から言うと、かしこまった敬語はそれほど重要視されません。普段現場で使っているような丁寧な言葉遣いで十分です。なぜなら、必要なのはスキルであって敬語の能力ではないからです。マナー講師の面接ではないので、気を楽にして問題ありません。

いつもの口調で言いたいことをはっきり喋るようにしましょう。

# 面談のコツ③ 受け身でいい面談ほど楽な会話はない
最後に面談に対する考え方ですが、面談ほど受け身で楽な会話はありません。全て面接官から質問してもらえますし、「緊張しなくて大丈夫です」と気遣ってもらえる場合もあります。

もしこれが初対面同士の会話なら、自分から質問や会話の流れを考え、共通点を見つけるなどたくさん考えなければならず面倒です。それに比べたら、面談は質問に答えるだけなので簡単だと思えませんか？

# 終わりに
以上で、私の面談時のマインドセットをお伝えしました。私はこのようにして緊張せず、面談をむしろ楽しむマインドで臨んでいます。面談が苦手な人も、肩の力を抜いて楽に自分を相手に知ってもらえるようになればいいなと思います。

この記事がよかったら、ぜひフォローお願いします。
これからも開発に関わる人のためになる記事を投稿していこうと思います！！
投稿１Query関数

本日の勉強時間　４H


▪️Query関数とは
選択した範囲の情報を別のシートに出力できる関数です。
スプレッドシート専用の関数で、一説では上級者むけの関数と言われています。

▪️クエリ（query）とは

「問い合わせ（る）」
「訪ねる」などの意味を持つ英単語で、ITではソフトウェアに対するデータの問い合わせや要求などを一定の形式で文字に表現することを意味します。 
クエリを通じて、データの検索や更新、削除、抽出などの要求をデータベース（DBMS）に送信することができます。


データベースに要求を行う上で必要な知識になります。



▪️例

①QUERY(users!A2:C, "SELECT A")

![スクリーンショット 2024-07-01 21.56.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579814/edb84188-f17d-9a5e-8f44-9b6f95cd886b.png)










②QUERY(users!A2:C, "SELECT * WHERE C=date '2000-06-09'")

![スクリーンショット 2024-07-01 22.02.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579814/1e0e872a-98ce-3a64-ce1f-bc17b8f027c6.png)







③QUERY(users!A2:C, "SELECT B WHERE C >= date'2000-06-09'")

これは2000/6/9以降のユーザーの名前を出したいとき、こういう時に使えます。