OmniAICreator/Qiita-1.07M huggingface dataset:
GitHub Actionsでジョブ間で変数を共有する方法

GitHub Actionsにおけるワークフローの自動化では、異なるジョブ間で情報を共有する必要がしばしばあります。ジョブ間で変数を共有するには、ジョブのoutputsセクションを活用し、後続のジョブでこれらの出力を参照します。

### 1. 変数を設定する

最初に、変数を設定し、出力として公開したいジョブを定義します。これはGITHUB_OUTPUT環境変数を利用して行います。

```yaml
jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      myVariable: ${{ steps.set_output.outputs.value }}
    steps:
      - name: Outputを設定
        id: set_output
        run: echo "value=Hello, GitHub Actions!" >> $GITHUB_OUTPUT
```

このコードスニペットでは、job1がHello, GitHub Actions!という値をmyVariableとして出力します。

### 2. 後続のジョブで変数を使用する

次に、先のジョブで設定された変数を使用します。これを実現するために、needsキーワードを使用して、依存するジョブを明示的に指定し、そのoutputsにアクセスします。

```yaml
  job2:
    needs: job1
    runs-on: ubuntu-latest
    steps:
      - name: job1からの出力を使用
        run: echo "job1からの出力: ${{ needs.job1.outputs.myVariable }}"
```

ここで、job2はjob1の出力myVariableを使用しています。この方法により、ワークフロー内の異なるジョブ間で効果的にデータを受け渡すことができます。

### 3. 例：job1 & job2

```yaml
jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      myVariable: ${{ steps.set_output.outputs.value }}
    steps:
      - name: Outputを設定
        id: set_output
        run: echo "value=Hello, GitHub Actions!" >> $GITHUB_OUTPUT
  job2:
    needs: job1
    runs-on: ubuntu-latest
    steps:
      - name: job1からの出力を使用
        run: echo "job1からの出力: ${{ needs.job1.outputs.myVariable }}
```

### 4. まとめ
GitHub Actionsのジョブ間で変数を共有する機能は、複雑な自動化タスクを柔軟にかつ効率的に管理するための強力なツールです。上記の手順を用いることで、簡単にジョブ間での変数共有を実現し、より高度なCI/CDパイプラインを構築することが可能となります。

https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-output-parameter


### 注

2023年7月から、GitHub Actionsではsave-stateやset-outputのコマンドの使用が廃止されました。

旧：

```
- name: Save state
run: echo "::save-state name={name}::{value}"

- name: Set output
run: echo "::set-output name={name}::{value}"
```

新：

```
- name: Save state
run: echo "{name}={value}" >> $GITHUB_STATE

- name: Set output
run: echo "{name}={value}" >> $GITHUB_OUTPUT
```

https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
初めてのチーム開発

##  はじめに
私はエンジニア未経験の、現在APPRENTICE（未経験から企業内定を勝ち取れる
内定直結型のエンジニア実習）に参加しております23歳です。
そのカリキュラムの一つ、チーム開発についてまとめてみました。

##  チーム開発の概要
・　テーマ『自分たちの役に立つものを開発せよ』
・　ベースとなる技術は HTML/CSS/JavaScript/MySQL/Ruby or PHP
・　Rails, Laravel, React などのフレームワークは使用しない（まだ学習していない範囲の為）
・　３人１組でチームとなり、１週間の実装期間と事前の準備期間がありました。

##  アイデア決め
事前の準備期間でまずはアイデア決めを行いました。
チーム開発のテーマ、『自分たちの役に立つものを開発せよ』に沿ったアイデアを話し合いました。
現在未経験のプログラミング学習中の自分たちには、やはり学習の記録を残すことやモチベーションを維持していくことが大事と考えました。


![スクリーンショット 2024-02-03 21.28.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660800/7af6a95b-cbd9-7db1-e0e4-606ed59d5a13.png)
![スクリーンショット 2024-02-03 21.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660800/91b7d735-308f-d3c1-ebac-e393759d0a6f.png)

そこで考えだしたものが、明確な学習計画を立て時間管理を行う​　『Stady Planner』です。


## 実装・反省点
フロントエンド　HTML,CSS,JavaScriptのみでタスク管理（メモ）アプリの作成となりました。

アイデア決めの時点では、複数の機能を作る予定だったのですが
予定していた機能を作ることが出来ず、反省ばかりのチーム開発となりました。
その原因は、チーム内でのタスクの管理が出来ていなかったこと、なんとかなると思っていたことがこのような結果に繋がりました。

![スクリーンショット 2024-02-03 21.25.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660800/7f27d904-8f50-92e5-e555-3e74f2bf0645.png)

こちらの画面で日付を選択し、学習内容を記録し保存します。



##  おわりに
今回このチーム開発を通じてたくさん感じたことがありました。
チーム開発の最終日に各チームの発表があり、同じ実装期間で素晴らしいアプリを作っている他のチームの発表を見て驚きました。
実際に使いたくなるようなクオリティのクイズアプリやタスク管理アプリ。
勉強不足を自覚していたものの、改めて感じる良い機会となりました。
それと同時に、自分もこんなアプリを作れるようになりたいと思いました。
今APPRENTICEを通じて、一緒に学習できる仲間がいるこの幸せな環境で、自らの力を高めて行きます。
今の目標は、次のチーム開発では今回のように悔いのないよう、全力でやりきることです。頑張ります！
React/Next.jsでのIBM Carbon Design Systemの始め方


# やりたいこと

IBMのCarbon Design SystemをReactで使いたいので、以下のようなボタンUIをまず実装してみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575388/14d5e0db-16f3-def9-69ab-cbde2ff8e579.png)


方法はこのドキュメントに従った

https://carbondesignsystem.com/developing/react-tutorial/step-1
# プロジェクト作成

Reac/Next.jsのプロジェクト作成

```npm run dev
$ npx create-next-app@latest
✔ What is your project named? … my-app
✔ Would you like to use TypeScript? … No / **Yes**
✔ Would you like to use ESLint? … No / **Yes**
✔ Would you like to use Tailwind CSS? … **No** / Yes
✔ Would you like to use `src/` directory? … No / Yes
✔ Would you like to use App Router? (recommended) … No / **Yes**
✔ Would you like to customize the default import alias (@/*)? … **No** / Yes
```


```npm run dev
cd my-app
```

# Carbon Design Systemのインストール
```
npm install @carbon/react
```



# Carbonを使えるようにファイルの編集

>We need to run a Sass build as the Carbon styles are authored in Sass, so run the following command to install sass as a dependency.

ということらしいので、以下コマンドも実行

```bash
npm install node-sass
```

>In `src` directory, rename `globals.css` as `globals.scss` and change the import in `layout.js` from `global.css` to `globals.scs`s.

加えて、/srcディレクトリ内の`global.css` を`global.scss`にリネームして、`layout.js`のimport文もそれに合わせて書き換えるようにということ。

globals.scssにはとりあえず、ファイルのtopに`@use '@carbon/react';`を追記。既存のコードは消してよい
```globals.scss
@use '@carbon/react';
```

src/app/layout.tsxも以下のように`import "./globals.scss";`とする
```typescript:layout.tsx
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.scss";

const inter = Inter({ subsets: ["latin"] });

export const metadata: Metadata = {
  title: "Create Next App",
  description: "Generated by create next app",
};

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="en">
      <body className={inter.className}>{children}</body>
    </html>
  );
}

```

src/app/page.tsxに`'use client'`と`import { Button } from '@carbon/react';`を追加
```typescript:page.tsx
'use client'
import { Button, Checkbox } from '@carbon/react';

export default function Home() {
  return <Button>Example usage</Button>;
}

```

# 実行

次は実行してみる。

```bash
npm run dev
```

http://localhost:3000/ にアクセスすると表示される。これでCarbon Design Systemが使えていることを確認。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575388/a53f6aaa-1a36-5d31-a0ab-219c6566b712.png)

## 自動でブラウザを開く設定

https://github.com/vercel/next.js/issues/12233#issuecomment-876926661


`package.json`の
```json:package.json
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
```
の `"dev": "next dev",`を `"dev": "open http://localhost:3000 && next dev",`に変更する

```json:package.json
"scripts": {
    "dev": "open http://localhost:3000 && next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
```
CausalML Bookについてまとめてみた

### 初めに
最近X(旧Twitter)で「CausalMLBook」（V. Chernozhukov, C. Hansen, N. Kallus, M. Spindler, V. Syrgkanis）<sup>1)</sup>という本が話題？になっています。そこで、この本とそれに関連するウェブサイトについて、概要の説明や、率直な感想を述べたいと思います。
Webサイトの最初にこのように書かれています。
>The book introduces ideas from classical structural equation models (SEMs) and their modern AI equivalent, directed acyclical graphs (DAGs) and structural causal models (SCMs), and presents Double/Debiased Machine Learning methods to do inference in such models using modern predictive tools.
>
翻訳すると
>本書は、古典的な構造方程式モデル（SEM）と、現代のAIに相当する有向非循環グラフ（DAG）や構造的因果モデル（SCM）のアイデアを紹介し、現代の予測ツールを用いてこのようなモデルの推論を行うための二重／偏向機械学習法を提示する。
>
とのことです。
機械学習と因果推論を組み合わせた手法について紹介されており、主に上述のモデルに加え、それらのモデルの推論に、Double/Debiased ML手法についても取り上げています。CausalMLのウェブサイトは、全書PDF、各章、実践ラボ、機械学習とAIによる因果推論を応用するためのパッケージへのリンクが含まれています。

### 本書と本サイトをみた良い点
・無料
・網羅的で難易度もそこまで？？
・実装コードが付いている
上から順に解説していきます。
まずなんといっても無料！！というのが大きいでしょう。著名な先生方の信頼性のある本であり、無料なのは非常にありがたいです。
次に、本書が網羅的である点です。第1章から第11章までで重要なコアコンセプトを解説しており、2、3ヶ月で十分に学習することができます。第12章以降はより高度な内容に触れており、基礎と応用の区別が明確になっていますので、読みやすくなっています。ただし、基本的な計量経済学と機械学習の知識が求められ、ある程度の英語力も必要です。

最後にすごく良いと感じた点は実装コードが掲載されている点です。各章についてコードが書かれたGoogleColaboratoryとRノートブックが提供されているので、理論だけでなく実際に手を動かしながら学習できます。理論を勉強する際は特に数値や問題設定を少し変えてみたときに対応できるか、理解度を示す指標だと考えています。その意味で、この教材は数値や問題設定を実際にいじりながら学習できるため有益だと言えます。

### 最後に
最後までお読みいただきありがとうございました。
本記事では、CausalMLBookについて紹介をしました。難易度も高すぎるわけでもなく、かつ実装コードを見れる点は学習に有益であり、特に学生にとっては嬉しいのではないでしょうか。余裕があれば、各章に関しての紹介や解説記事も書きますので、ぜひご覧ください。

### 参考文献

1. Chernozhukov, V., Hansen, C., Kallus, N., Spindler, M., & Syrgkanis, V. (2024). *Applied Causal Inference Powered by ML and AI*. [CausalMLBook Website](https://causalml-book.org/).
Babylon.js の Procedural Texture をさらに試してみる：Brick と Cloud の 2つ

以下の記事を書いた際に扱った、Babylon.js の Procedural Texture をさらに試して記事を書いてみます。
具体的には、公式ドキュメントに 7つ掲載されているもののうち、「Fire Procedural Texture 以外のもの」を 2つほど選んで試してみようと思います。

●Babylon.js の Procedural Texture のアニメーションする炎のテクスチャ（Fire Procedural Texture）を試す - Qiita
　https://qiita.com/youtoy/items/0ec43be190f9ebc24aa3

## 今回試す内容
前回の記事の以下の部分で、Procedural Texture は Fire Procedural Texture を含めて 7つある、ということを書いていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/62340c39-4414-d580-5979-6f240351a617.png)

Fire Procedural Texture 以外の 6つは、以下のとおりです。

- Brick Procedural Texture
- Cloud Procedural Texture
- Grass Procedural Texture
- Marble Procedural Texture
- Road Procedural Texture
- Wood Procedural Texture

今回、この中の 2つ「Brick Procedural Texture」と「Cloud Procedural Texture」を試してみます。

### Brick Procedural Texture
最初は Brick Procedural Texture です。

●Brick Procedural Texture | Babylon.js Documentation
　https://doc.babylonjs.com/toolsAndResources/assetLibraries/proceduralTexturesLibrary/brick

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d04d7c2b-915f-bb32-aa0c-264764a740f6.png)

Brick Procedural Texture について、変更可能なパラメータを見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6c8c0993-f9e1-e6cf-1e0c-998050c1fed7.png)

パラメータは「numberOfBricksHeight」「numberOfBricksWidth」「jointColor」「brickColor」の 4つがあるようです。

https://playground.babylonjs.com/#1CL0BO#18

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a9353934-e56c-36e4-76d8-7b88818e9623.png)

上記のサンプルのパラメータを変更して、見た目の変化を確認してみます。

 numberOfBricksHeight を 10、numberOfBricksWidth を 20 と、デフォルトより値を大きくしてみます。以下のように、ブロックの数が縦横方向の両方と増えたのが確認できました。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/bfe43f1e-2e3d-fd52-bfc5-04b58f596405.png)

また色の変更も試してみます。
色の選定が適当ですが、とりあえず以下を設定してみました。

- jointColor ⇒ BABYLON.Color3.Red();
- brickColor ⇒ BABYLON.Color3.Blue();

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/f0e8f449-80b8-98a1-2886-b87a485b199a.png)

### Cloud Procedural Texture
次は Cloud Procedural Texture です。

●Cloud Procedural Texture | Babylon.js Documentation
　https://doc.babylonjs.com/toolsAndResources/assetLibraries/proceduralTexturesLibrary/cloud

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/328e27d0-5e63-6b36-fc0c-d34b95d2b249.png)

設定可能なパラメータの確認と、パラメータの変更をサクッと試してみます。

設定可能なパラメータは skyColor と cloudColor の 2つがあるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/401174d0-fa6a-7bb2-e83d-6b62e3089a9b.png)

以下のサンプルで、パラメータの変更を試してみます。

https://playground.babylonjs.com/#NQDNM#0

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/602357f6-7cbe-f662-3c65-5f36feb158e2.png)

cloudColor を new BABYLON.Color3(0.2, 0.3, 0.5) とし、また skyColor を new BABYLON.Color3(0.5, 0.5, 1.0) に変更してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9c413a99-ec45-25e9-4ef0-47a376454123.png)

変更後、色が指定した色に変わっていることが確認できました。
Ubuntu22.04LTSでカーネルアップデート後GPUを認識しない

## 環境
・Ubuntu22.04LTS(desktop,non GA kernel,Linux kernel 6.5)
・Nvidia-driver-545
・CUDA12.1
・Ryzen7 5700X
・RTX4070 Ti

## 経緯
```
unattended-upgrade -v
```
をしたところ、以下のパッケージのupgradeが実行された。
```
 linux-modules-extra-6.5.0-21-generic
 headers-6.5.0-21-generic:amd64
 linux-hwe-6.5-headers-6.5.0-21
 linux-modules-6.5.0-21-generic
 linux-image-6.5.0-21-generic
```
アップグレード後、nvidia-smiでGPUを認識せず、Nvidia-driverが異常だと思われた。
```
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. 
```
（画面自体は写っているのでハードとしては動いている）
ドライバを再インストールしたら直ったとの記事があったので
https://qiita.com/mikoaisa/items/1c780819d1ef26c66aa8
```
apt reinstall nvidia-driver-545
```
しても認識しない。

## nvidia-driverを認識しなくなる原因
最初CUDA12.1はカーネルバージョン5.15系でリリースされているのでそれが悪さしているのかと思った。CUDA12.3は6系でリリースされているため、CUDAのアップグレードも検討したが、pytorchがサポートしているのがCUDA12.1までなので12.3に上げるのは躊躇われた。大抵動くがこういうのでハマると長い。
https://docs.nvidia.com/cuda/archive/12.1.0/cuda-installation-guide-linux/index.html

調べていくと結局CUDAは直接の関係はなく、カーネルアップデート後、dkmsを再度行う必要があるようだが、これが失敗していることが原因だった
https://forums.developer.nvidia.com/t/whats-the-process-for-fixing-nvidia-drivers-after-kernel-updates-in-ubuntu-20-04/208870

## 症状
dkmsに手動でインストールするために以下のコマンドを実行するが失敗してdkmsが登録できない
```
sudo dkms install -m nvidia -v <driver_version>
```

## dkmsが失敗する原因
```
/var/lib/dkms/nvidia/545.23.08/build/make.log
```
を見たところ、
```
cc: error: unrecognized command-line option ‘-ftrivial-auto-var-init=zero’
```
gccがコンパイル時に指定された引数を正しく処理できていないよう。
これは標準のgccのバージョンが古い(ver.11)ためにおこるようだ。
https://forums.linuxmint.com/viewtopic.php?t=389943


## 対策
gccのバージョンを12に変更する。
```
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12
```
そして再度
```
sudo dkms install -m nvidia -v <driver_version>
```
を実行。これでGPUを認識するようになった。
※<driver_version>は/usr/src配下のフォルダを確認して正確なバージョンを確認すること

## 参考
https://forums.developer.nvidia.com/t/help-nvidia-smi-has-failed-because-it-couldnt-communicate-with-the-nvidia-driver-make-sure-that-the-latest-nvidia-driver-is-installed-and-running/260297
一ヶ月間毎日Qiitaに投稿してみて

---
一ヶ月間毎日Qiitaに投稿してみて
---

**全然関係ないですが**

　今日、満員電車に揺られ家へ帰っていたら、椅子に座っている人が、みんな左の方に首を傾けて寝ていました。

　人間首のドミノ大会でもあったのかなと思いました。

 ......はい。すみません。本当に関係ないです。

 　では本編へ＼＼\\٩( 'ω' )و //／／

<br>

**目次**
- [1. はじまりはいつも](#1-はじまりはいつも)
- [2. 道](#2-道)
- [3. やってみての感想](#3-やってみての感想)
- [4. おわりに](#4-おわりに)

## 1. はじまりはいつも
<font color="low blue">_始まりはいつも突然　運命を連れて行く_</font>


　私は就活中で、そして行きたい会社がありました。

　その会社の求めるスキルリストに、「技術ブログ」の欄があり、「Qiita記事等」と記載されていました。
 
　折角だし、毎日投稿してみるのもいいかもしれない、と思い立ちました。

　始まりは、そんな単純な動機。

　「大丈夫だろう。小学生の頃、夏休みの宿題で日記を書いていたし。それと同じようなものだろう」と考えていました。

　しかし、その時の私には想像もつかなかったのです。

　このサトウキビよりも甘い考えが、私を予想もしない激動の日々へと導くことになるとは。
 
　ガマガエルの肝(謎比喩)よりも苦い日々が始まることになるとは......。

## 2. 道

<font color="low brown">_ひとつ曲り角　ひとつ間違えて　迷い道くねくね_</font>

　最初は良かったのです。凝った記事を書くことに挑戦し、新しい書き方や表現方法を発見することが楽しかったのです。

　しかし、開始して3日も経たずに、書くネタに困り始めました。何を書けばよいのか、どうすれば読者の興味を引けるのかという焦燥感に駆られました。

　技術的な深堀りが必要なトピックから、日々の小さな発見まで、書くべき内容を見つけることは一つの大きな課題でした。


　夜22時になっても、まだ何も書けていない。誰と約束したわけでもないから、いつでもやめられる。

　そんなサクランボのように甘い誘惑が、絶えず私の耳元でささやいていたのです。

　それは次第にいちご、ぶどう、デコポン、かき、りんご、なし、もも、パイナップル、メロン、スイカの順番で大きくなっていきました。

　スイカゲームとの誘惑とも戦う日々(31戦31敗)。

　この日々の努力が徐々に、しかし確実に私の考え方を変えていったのです。

 
　苦痛と焦燥の日々を経て、徐々に変化が訪れました。毎日何かを学び、それをまとめる習慣が身につき始めたのです。

　書くことで、自分自身の理解が深まることを実感しました。また、他の人からのフィードバックや質問が、さらなる学びにつながることもありました。

　この一ヶ月で、ただ知識を共有するだけでなく、コミュニティとの相互作用を通じて、自分自身も成長できたと感じています。


## 3. やってみての感想

<font color="HotPink">_なりたい　恋は前傾姿勢_</font>

　今日で、連続投稿の旅も最後を迎えます。

　今となっては、この先も続けてもいいかなと思っています。ただ、まだやるべきことが残っています（スイカゲームのことではありません）。そこで、ひとまず区切りをつけることにしました。

　この連日投稿を通じて身についたのは、何よりも「姿勢」です。

「今日は何を学んだのか」「それを他人と共有するほどに深められたのか」「その学びをどうやって見つけ出すのか」

　このような学びに対する姿勢を手に入れることができました。

　しかし、毎日続ける必要があったのかという疑問は残ります。もしかすると、それは無意味だったかもしれません。

　でも、その経験を意味あるものと見なし、活かすのは自分次第です。

　他ならぬ、自分自身との約束を守るためです。

　このような経験を望む方には、ぜひおすすめします。

　この、サトウキビよりも甘く、ガマガエルの肝よりも苦い旅路へ......。

## 4. おわりに

　m(_ _)m

　一度でも記事を読んでくださった方々、またコメント、感想をしてくださった方々、本当にありがとうございました。

　また、思い立ったら、書いています。


ではでは〜。
【Windows】サービスの確認・起動・停止をコマンド実行

# 目的／背景
前回、Windowsのlocal環境にインストールしたMySQLをOS起動時に立ち上がらないようにするため、サービスにて設定を行いました。
　[前回：【MySQL】Windows起動時にMySQLサーバが自動起動させないようにする方法](https://qiita.com/Shime_texas/items/03b49cf42fbdaf0e2250)

このサービスから起動・停止を行ってもよかったのですが、かっこよくコマンドから行いたいなと思います。

# 概要
PowerShellのコマンドよりサービスを起動・停止を行う。

# 手順１．サービスの確認
`Get-Service`
コンピュータ上のサービスを一覧取得します。
サービスがたくさん表示されてしまうので、下記のようにワイルドカードを用いて使用するのをおススメします。
```powershell:PowerShell　例）MySQLで始まるサービスを表示
Get-Service MySQL*
```

```powershell:PowerShell　実行例
PS C:\WINDOWS\system32> Get-Service MySQL*

Status   Name               DisplayName
------   ----               -----------
Stopped  MySQL80            MySQL80

PS C:\WINDOWS\system32> 
```

上記のStatusを確認するとサービスが停止していることを確認できると思います。
こちらを起動していきましょう。

# 手順２．サービスの起動
`Start-Service`
コンピュータ上のサービスを起動します。
今回は手順１．で表示された[Name]MySQL80を起動します。
```powershell:PowerShell　例）MySQL80を起動
Start-Service -Name MySQL80
```

```powershell:PowerShell　実行例
PS C:\WINDOWS\system32> Start-Service -Name MySQL80
PS C:\WINDOWS\system32> Get-Service "MySQL*"

Status   Name               DisplayName
------   ----               -----------
Running  MySQL80            MySQL80

PS C:\WINDOWS\system32>
```

上記の実行例ではサービス起動後、`Get-Service`を用いてStatusを確認すると、サービスが起動していることを確認できます。

# 手順３．サービスの停止
`Stop-Service`
コンピュータ上のサービスを停止します。
今回は手順１．で表示された[Name]MySQL80を停止します。
```powershell:PowerShell　例）MySQL80を停止
Stop-Service -Name MySQL80
```

```powershell:PowerShell　実行例
PS C:\WINDOWS\system32> Stop-Service -Name MySQL80
PS C:\WINDOWS\system32> Get-Service "MySQL*"

Status   Name               DisplayName
------   ----               -----------
Stopped  MySQL80            MySQL80

PS C:\WINDOWS\system32>
```

上記の実行例ではサービス停止後、`Get-Service`を用いてStatusを確認すると、サービスが停止していることを確認できます。
Proxmox WebUIからCloudflare DNS API経由でSSL証明書を取得できるようにする

# はじめに
ProxmoxのWebUIは、初期状態だと自己証明のSSL証明書を提供してきます。
この場合、ブラウザから警告されたりパスワードマネージャーの自動補完が使用できなくなってしまいます。

しかし`certbot`を導入してCUIからLet's Encryptの証明書を取得したり、発行してもらった証明書を手動で登録するのは非常にめんどくさいので、証明書取得から設定までをWebUI上で完結できるようにしたいと思います。

今回はCloudflare APIとLet's EncryptのDNSチャレンジを使用します。

# 設定
## その1
まずは、登録したいドメインをCloudflare管理下に置いてDNSレコードをいじれるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/c1768296-2a2c-294e-eb20-50eb67ce64c2.png)

## その2
次に、Proxmox WebUIの
`データセンター -> ACME -> アカウント`
から、SSL証明書の取得と更新通知に使用するメールアドレスを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/a189a101-4a90-9f21-2b18-1e12160be2fd.png)

```
アカウント名: 任意
メールアドレス: 更新通知の受信に使用したいメールアドレス
ACMEディレクトリ: Let's Encrypt V2
```
入力し終わったらTOS(利用規約)に同意した上で登録します。

## その3
`データセンター -> ACME -> Challengeプラグイン`
からCloudflare APIのDNSチャレンジ設定をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/f65d4000-7550-458c-fa2d-a49f3cd6f990.png)

```
アカウント名: cloudflare
検証の遅延: 30
DNS API: Cloudflare Managed DNS
CF_Email: cloudflareアカウントのメールアドレス
```

`CF_Account_ID`と`CF_Zone_ID`は、各ゾーン設定の右ペインにあるトークンを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/a6b72854-05a1-3dc4-5433-ba2e151340da.png)

`CF_Token`は、`Get your API token -> Create Token -> Edit zone DNS Template`
から`Zone Resources`で取得したいドメインゾーンを選択し、`Continue Summary`から`Create Token`して取得できます。

## その4
ここまでの設定が正常に完了していれば、`データセンター -> 各ノード -> システム -> 証明書 -> ACME`の追加をクリックしてChallengeタイプをDNSに設定するとプラグインにcloudflareが出現します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/f0fc4750-c358-60f4-6c4a-99316ae84b6c.png)

ここで取得したいドメインを設定し、作成をクリックしたあとに`Order Certificate Now`をクリックするとSSL証明書を取得して自動的に設定してくれます。
設定後はWeb UI Proxyが再起動するので、新規タブで開いてあげれば証明書が適用されていると思います。
fish shellをアンインストールする

# なぜ消すか

補完のためにfishを使っていたのですが、warpの登場により使う理由がなくなりました。使いやすかったよ、ありがとうfish。

https://www.warp.dev/

## 現在のシェルを確認

```sh
echo $SHELL
```
fishでなければ次の**ログインシェルをzshに変更**は不要です

## ログインシェルをzshに変更

```sh
chsh -s /bin/zsh
```

### ログインシェルからfishを削除

```sh
sudo -e /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/etc/fish # こいつを消す
```

### fishをアンインストール

```sh
brew uninstall fish
```

警告で以下が表示されるので指定された2つのファイルは手動で削除します

```sh
Warning: The following fish configuration files have not been removed!
If desired, remove them manually with `rm -rf`:
  /usr/local/etc/fish
  /usr/local/etc/fish/config.fish
```

残ったゴミファイルを削除

```sh
rm -rf  /usr/local/etc/fish /usr/local/etc/fish/config.fish
```

設定ファイルも手動で消します

```sh
rm -rf  ~/.config/fish
```

## fishが消えていることを確認

```sh
which fish
fish not found
```

消えていることが確認できました。使いやすかったよ、ありがとうfish。
「主流」から外れた道を進んできて感じたこと

※この記事は、
**「Qiita×Findy記事投稿キャンペーン**
**『自分のエンジニアとしてのキャリアを振り返ろう！』」**
に向けて投稿しています。

# はじめに
私は電気工学で修士号を取得した後、製造業で
ソフトウェア寄りの技術者を10年近く続けています。

私が就職活動を行っていた頃は、電機メーカーは業績不振に苦しむ企業が多く、
IT業界は全体的に「ブラック」と言われている時代でした。
そのような状況下で、私は一般的な選択肢と異なり、「その他製造業」に分類される企業へ就職するという **「主流」から外れた道**を歩んできました。

他の方々の参考になればと思い、その中で感じた事を書いてみたいと思います。

# 忙しい人向けの結論
* 良いこと
  * 競争相手が少ない
  * 学生時代とは異なる分野の知識を身につける機会が得られる

* 悪いこと
  * 周囲に同じ専門分野の人が少ない
  * 技術的な課題に対する解決策を知っている人が周囲に少ない

* 続けていくのに必要なこと
  * 自分の専門分野に関して自ら情報を収集し、自己学習を続けること
  * 自身の技術に精通し、周囲に分かりやすく説明や相談ができること

# 良いこと
まず、就職活動においては、「主流」から外れて会社選びをすると、
**競争相手が少なくなり楽に感じます**。

大企業では専攻別に説明会や面接を分けることが一般的でしたが、自分と同じ専攻の学生が少ないことで、「これなら私でも受かりやすいかもしれない」と感じました。

さらに、就職後も優秀な同期がいても専門分野や業務内容が異なるため、
**「代わりはいくらでもいる」というプレッシャーも感じませんでした**。
これにより、比較的安心して仕事に取り組むことができました。

また、自社で主流となっている技術については、全員が習得するための研修が用意されていることがありました。そのため、**学生時代とは異なる分野の知識を身につける機会が得られました**。


# 悪いこと
「主流」から外れた技術者として仕事を続ける上で、**最も辛いのは周囲に同じ専門分野の人が少ないこと**です。どんな分野でも、学生時代の知識だけでは業務を進めるのは難しく、常にアップデートや新たな学びが必要です。しかし、**一緒に学ぶ仲間が少ないため、モチベーションを保つのが難しい**です。

また、技術的な課題に直面した際、**解決策を知っている人が周囲に少ないため、自力で問題を解決しなければならない場面が多くあります**。同じ専門分野の上司に出会えれば幸運ですが、管理職は技術的な専門知識よりもマネジメントに重点を置かれる傾向があります。そのため、専門分野が異なる上司とのケースが非常に多いです。

これはまた別に議論の余地がある問題かと思いますが、この場では置いておきます。

# 続けていくのに必要なこと
一つ目は、**自分の専門分野に関して自ら情報を収集し、自分のペースで学習を進めることです**。独力で問題解決を求められる場面が増えるため、周囲に学習の仲間がいなくても、自己学習は必須です。**学生時代の友人などがいれば、ときおり技術的な話題で議論するのも有益だと思います**。

二つ目は、**自身の技術に精通し、周囲に分かりやすく説明や相談ができることです**。「主流」から外れた企業に入社すると、周囲には異なる専門知識を持つ技術者が多くいます。そうした人々に対して、自らの業務上の問題や取り組みをわかりやすく説明し、相談する機会が増えます。上司も別の分野から異動してくることが多く、自身の課題をわかりやすく説明し、スケジュールや費用などについて相談することが必要です。

**曖昧な理解では他人に説明することは難しいです**。時には学生時代の教科書を再度見直し、わかりやすく説明できるよう理解を深める必要があります。また、**説明の際には、シンプルな図を描いて示すことが効果的な方法**だと経験から学びました。

# おわりに
「主流から外れる」ことが良いか悪いか、という点について強く主張するのではなく、できるだけ公平な視点で考えをまとめたつもりですが、いかがでしょうか。

冒頭でも触れましたが、私が就職活動をした時期は電機メーカーがリストラを繰り返した後でした。そのため、大学の先生の中には「**メーカー以外を考えなさい**」という声や、「**半導体業界は避けた方が良い**」という意見もありました。最近では風向きが大きく変わったと感じています。

技術は時代とともに変化し、個人には様々な事情があります。そのため、キャリアは都度判断が必要なものだと思います。ここに書いたことが誰かの参考になれば幸いです。
【SwiftUI】ScrollViewの範囲を超えてもコンテンツを表示する

# はじめに
iOS17から`scrollClipDisabled`というものが追加されました。
ある時とない時の動きの違いを記録しておきます。

# サンプルアプリ
![Simulator Screen Recording - iPhone 15 Pro - 2024-02-23 at 23.03.08.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/68c2bd37-de19-1ef4-0714-f636c201570d.gif)

# 実装
```swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack(spacing: 0) {
            Rectangle()
                .fill(Material.regular)
                .zIndex(1) // ScrollViewより高くすることで、ScrollViewより上に表示される
            
            ScrollView {
                VStack {
                    ForEach(0..<100) { _ in
                        RoundedRectangle(cornerRadius: 10)
                            .frame(height: 60)
                            .foregroundStyle(Color(red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1)))
                    }
                }
                .padding()
            }
            .scrollClipDisabled(true) // ScrollViewの範囲を超えてもコンテンツを表示する
            .zIndex(0)
            
            Rectangle()
                .fill(Material.regular)
                .zIndex(1) // ScrollViewより高くすることで、ScrollViewより上に表示される
        }
        .ignoresSafeArea()
    }
}
```

# では、scrollClipDisabledがないとどのような動きになるのか
ScrollViewの範囲でのみ、コンテンツが表示されます。
![Simulator Screen Recording - iPhone 15 Pro - 2024-02-23 at 23.05.20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/80ad1f04-f331-3dc9-c8e1-f6e9971d60b3.gif)

# おわり
iOS17からScrollView関連のモディファイアがかなり増えました

# 公式ドキュメント
https://developer.apple.com/documentation/swiftui/view/scrollclipdisabled(_:)
Tailwind CSSで動的に色を指定できないときの解決方法

# 問題

Tailwind CSSでは，16進数のカラーコードを動的に指定できない．すなわち，次のようなことはできない．

```typescript
const colorInHex = "ffffff";
return <Hoge className=`bg-[#${colorInHex}]`>
```

これは，Tailwind CSSではビルド時にCSSのコンパイルが行われるためである．

# 解決法

styleプロパティで指定する．

```typescript
const colorInHex = "#ffffff";
return <Hoge style={{backgroundColor: colorInHex}}>
```

あとは，`styled-components`等のCSS in JSライブラリを使っても多分できる．
Visual Studio CodeのVsCodeVim/VimでCtrl+Pなど競合するキーバインドを無効化する

備忘録

File→Preferences→Keyboard Shortcutsを開き、extension.vimで検索すると拡張機能を入れたことで影響を与えるキーバインドが確認できる。

大雑把。網羅はしていない
　
<ol>
<li>Visual Studio CodeのExtensionsより、PubulisherがvscodevimのVimに対してInstallを押下する
<li>F1キー押下→「settings json」など入力し、Preferences: Open User Settings (JSON)またはPreferences: Open Default Settings (JSON)を選択する
<li>下記の内容で更新して保存する

```json:settings.json
{
    "vim.useSystemClipboard": true, // OS側とのクリップボードの共有
    // 競合するショートカットを無効化
    "vim.handleKeys": {
        "<C-[>": false,
        "<C-]>": false,
        "<C-^>": false,
        "<C-6>": false,
        "<C-a>": false,
        "<C-b>": false,
        "<C-c>": false,
        "<C-d>": false,
        "<C-e>": false,
        "<C-f>": false,
        "<C-g>": false,
        "<C-h>": false,
        "<C-i>": false,
        "<C-j>": false,
        "<C-k>": false,
        "<C-l>": false,
        "<C-m>": false,
        "<C-n>": false,
        "<C-o>": false,
        "<C-p>": false,
        "<C-q>": false,
        "<C-r>": false,
        "<C-s>": false,
        "<C-t>": false,
        "<C-u>": false,
        "<C-v>": false,
        "<C-w>": false,
        "<C-x>": false,
        "<C-y>": false,
        "<C-z>": false
      }
}
```
<li>F1キー押下→「shortcuts json」など入力し、Preferences: Open Keyboard Settings (JSON)を選択する
<li>下記の内容で更新して保存する

```json:keybindings.json
// Place your key bindings in this file to override the defaults
[
    { "key": "ctrl+up", "command": "-extension.vim_ctrl+up"},
    { "key": "ctrl+down", "command": "-extension.vim_ctrl+down"},
    { "key": "ctrl+left", "command": "-extension.vim_ctrl+left"},
    { "key": "ctrl+right", "command": "-extension.vim_ctrl+right"},
    { "key": "backspace", "command": "-extension.vim_backspace"},
    { "key": "delete", "command": "-extension.vim_delete"},
    { "key": "tab", "command": "-extension.vim_tab"}
]
```
</ol>
【初歩的ミス】docker composeでMySQLのDBにログインできない対処法

docker composeでmysqlコンテナ立ち上げただけなのに、なぜかログインできず小一時間が溶けた。

初歩的すぎて誰も引っかからないと思うけど、一応供養しておく。

## エラーログ
rootでログインしようとしたけど拒否される。

```
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
```

## 誤

めちゃくちゃ初歩的かもしれないけど、こういう事書いちゃダメ。

```
 db:
    image: mysql:5.7
～略～
    environment:
      MYSQL_DATABASE: db
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
～略～
```

## 正

```
 db:
    image: mysql:5.7
～略～
    environment:
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
      MYSQL_ROOT_PASSWORD: root
～略～
```
misskeyの自動ログボスクリプト作った

毎日ねむい六角レンチです
布団食べたい
systemdを使って自動でログインボーナスをするスクリプト作りました

# 経緯
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3594202/0646eb08-1a55-2789-6fd2-7d838217fe0f.png)
連続ログインが全然続きません
ログボ忘れは大罪って誰かが言っていた気がするのでこのままではまずいです
そんな時、一つの記事を見つけます...:eyes:

# 参考にしたもの
https://qiita.com/katsuNakajima/items/7ece6c74f992f652d732

pythonのスクリプトをdaemon化するという記事です
ログボは毎日朝5時にリセットされるので...:thinking:

# 作る
まずは普通にノートを作成するスクリプトを作る

```py
from misskey import Misskey

INSTANCE = "misskey.io"
TOKEN = "token"
mk = Misskey(INSTANCE, i=TOKEN)

TEXT = "example text"

mk.notes_create(text=TEXT)
```
TOKENには`ノートを作成・削除する`と`通知を操作する`の権限を与えたアクセストークンを、
TEXTはノートに書くテキスト
(今回はログボなので`ログボ`と`@LoginBonus@misskey.m544.net`が入ったテキスト)

次に記事を参考にmain関数を作成
ついでにノートの作成に失敗した場合、作成に失敗したことを通知するようにする
```py
from misskey import Misskey
import requests

def main():
    INSTANCE = "misskey.io"
    TOKEN = "token"
    mk = Misskey(INSTANCE, i=TOKEN)

    TEXT = "example text"

    try:
        mk.notes_create(text=TEXT)
    except:
        endpoint = f"https://{INSTANCE}/api/notifications/create"
        ICONURL = "URL"
        payload = {"i":TOKEN,
                   "body":"ヤギです",
                   "header":"&/$%_&+/%$=!$&?=*$$%/+.?%-+=*/",
                   "icon":ICONURL}
        requests.post(endpoint, json=payload)

if __name__ == "__main__":
    main()
```
ICONURLは画像のURLを入れる

except節の通知がちゃんと動くか確かめてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3594202/14136407-8933-e9a0-226d-70c538ee892a.png)
...huh? (GIF画像OKなので[動きます](https://misskey.io/notes/9ptmi3k7xvx70ci6))

サービスファイルとタイマーファイルを`/etc/systemd/system/`に作っていく
スクリプトを置く場所は`/home/(ユーザー)/daemons/logbo`にした

systemdのサービスファイル(`logbo.service`)
```
[Unit]
Description=misskey auto login bonus get script

[Service]
ExecStart=スクリプトのパス
```
タイマーファイル(`logbo.timer`)
```
[Unit]
Description=misskey auto login bonus get script

[Timer]
OnCalendar=*-*-* 5:30:00 Asia/Tokyo

[Install]
WantedBy=timers.target
```
あとは`sudo systemctl enable logbo.timer`で有効化する

:::note warn
`systemctl enable`は**起動時に有効化する**物なので`systemctl start logbo.timer`も一緒にした方がいい
:::

<details><summary>ちゃんとサービスファイルが動くか試す方法</summary>

`systemctl start logbo.service`でちゃんと動くか確かめることができる。
なぜできるのかはサービスファイルはタイマーファイルによってトリガーされているだけだからっぽい
</details>

# 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3594202/fe26a10b-5a6a-bbfc-d5bf-c7b1359878d0.png)
なんと一週間連続ログイン達成しました🤯
これは歴史に残る大偉業ですね...

# 感想
作っていて思ったのですがログインボーナスのあるSNSってなんですかね...?
misskeyに来てもう8ヶ月経つのでログインボーナスは普通の物だと思っていましたがよく考えたら変です:thinking:
リバーシやスイカゲームもどきが実装されているのもSNSとして考えると変ですね:thinking::thinking::thinking:
(さらに麻雀まで実装予定:thinking::thinking::thinking::thinking::thinking::thinking:)

systemdを初めて使ったのですが簡単に定期実行するスクリプトを書けて便利ですね
今まで定期実行するにはライブラリの[schedule](https://github.com/dbader/schedule)を使わないと難しいと考えていたので今後かなりお世話になりそう

ただ動かし続けるPCが必要なのでそこだけ注意ですかね
ラズパイZero2Wを買って大正解でした
(botの運営用に買ったけど他の用途にも使えて便利)
(但しminiHDMI端子採用は絶対に許さない)
UDM-SEで直接PPPoE接続していると一部のトラフィックが重くなる件について

## はじめに
幣宅ではUbiquitiのUDM-SE（Dream Machine Special Edition）でPPPoE接続をしていると特定のトラフィック、うちではLINEがものすごく遅くなる事象が発生していました。
フィルタリングや広告ブロックなどを無効化してもダメ、公式にチケット送ったら「UDM-SEの上位にルーター置いて、それでネット接続して」との回答。
やってみたら不思議なことにトラフィックが改善。原因はわからず、、、、

そんな中、X（旧Twitter）を見ていたところ、MSSを変えたら改善したとの投稿が・・・
実際にやってみたら問題なくなったため、備忘録として残しておきます。

## 環境
### クライアントPC
- メーカー：自作、MBはASUS製
- OS：Windows10 Pro
### UDM-SE
- バージョン：3.2.12
### UniFi Network Application
- バージョン：8.0.28

## 手順
細かい部分は割愛していきます。

1. UDM-SEにログインする
説明するまでもないと思います。
　
1. 左のバーからUniFiデバイスタブを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/432eadea-7ce9-7610-65f4-61aa33073fe1.png)
　
1. UDM-SEを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/e47dab90-ac70-ccb3-b087-82c13cb9efdd.png)
概要のウィンドウが出てきます。
　
1. 設定を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/aab764a7-f592-6fc5-3a67-934b6a1bb9e3.png)
MSSクランプの設定が自動になっていることを確認します。
　
1. MSSクランプをカスタムに変更し、TCP接続時の最大セグメントサイズを1414に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/df54d071-e1c6-f4c6-aa0d-dbaa45a141f2.png)
　
1. 変更を適用します
これで手順は完了です。

## 稼働確認
私の場合はLINEでしたが、環境が違えばトラフィックが遅くなるものも変わるかもしれませんので、各々で稼働確認をしてください。


## 今回の教訓
新しいルーターを買ったら、MTUやMSSの設定を確認しよう。
桃鉄ゲーム監督の前でガチプレゼン　大阪・枚方市小倉小学校の6年生の提案例


# 桃鉄ゲーム監督の前でガチプレゼン　大阪・枚方市小倉小学校の6年生の提案例

次の記事でガチプレゼンをしたということでした。

https://ovo.kyodo.co.jp/ch/humhum/a-1945708

小学校の頃から企業向けにこのような機会を得られることは、日本の未来にとっても素晴らしいことだと思います。

ガチプレゼンの原稿例を用意してみました。

## 桃鉄に枚方を追加してもらうことで、コナミの企業価値を高める

**はじめに**

コナミの国民的ゲームソフト「桃太郎電鉄」は、日本全国を巡りながら物件を購入して資産を増やすボードゲームです。2023年には最新作「桃太郎電鉄ワールド」が発売され、教育機関向けに無償提供される「桃太郎電鉄 教育版Lite ～日本っておもしろい！～」もリリースされました。

本資料では、大阪・枚方市立小倉小学校6年生がプレゼンテーションした「桃鉄に枚方を追加してもらおう」という提案を基に、コナミの企業価値向上に繋がる可能性について、具体的な経済効果を含めて考察します。

### 枚方を追加することによるメリット

#### 1. ゲームの魅力向上

* 枚方市は、遊園地「ひらかたパーク」やショッピングモール「くずはモール」など、子どもから大人まで楽しめる観光スポットが充実しています。
* 伝統文化や歴史、地元企業など、教育的価値の高い要素も存在します。
* これらの要素をゲームに取り入れることで、新たなプレイヤー層を獲得し、ゲームの奥深さを増すことができます。

**具体的な経済効果**

* 新規プレイヤーの獲得によるゲームソフト売上増加： 年間10億円の増加を見込む
* ゲーム内課金の増加： 年間5億円の増加を見込む

#### 2. 教育効果の向上

* 教育版桃鉄に枚方市を追加することで、地域学習や社会科の学習に役立てることができます。
* プレイヤーは、ゲームを通して枚方の魅力を楽しみながら学ぶことができます。

**具体的な経済効果**

* 教育機関向け教材の販売： 年間1億円の売上を見込む
* 教育版桃鉄の利用料収入： 年間5千万円の収入を見込む

#### 3. 地域活性化への貢献

* 枚方市がゲームに登場することで、知名度向上や観光客誘致に繋がる可能性があります。
* 地域住民のゲームへの参加を促進することで、地域活性化に貢献することができます。

**具体的な経済効果**

* 観光客増加による地域経済活性化： 年間10億円の経済効果を見込む
* 地域特産品の販売促進： 年間5千万円の売上増加を見込む

### 具体的な提案

* 枚方市を舞台としたオリジナルストーリーやイベントを追加する。
* 枚方市の特産品や観光スポットを物件として登場させる。
* 地域の歴史や文化をゲーム内で紹介する。
* 教育版桃鉄では、枚方市を題材とした学習課題やワークシートを作成する。
* 枚方市を舞台としたリアルイベントを開催する。

**具体的な経済効果**

* オリジナルストーリーやイベントの開発費： 1億円
* リアルイベントの開催費： 5千万円
* 観光客誘致による地域経済活性化： 年間10億円の経済効果を見込む

### 課題とリスク

* ゲーム開発には時間とコストがかかる。
* 枚方市以外にも、追加を希望する自治体が多い可能性がある。
* ゲームバランスの調整が難しい。

### 結論

以上の点を踏まえると、桃鉄に枚方を追加することは、コナミの企業価値向上に繋がる可能性があります。

課題やリスクを克服するためには、コナミと枚方市が連携して、慎重な検討と計画に基づいて取り組むことが重要です。



## 起業・転職・フリーランス・プログラミング研修・エンジニア採用コンサルティングのご相談


https://park.jp/service_menu/2491


- 60分の人生相談を行っております。
- 企業の方は初回限定割引はご利用できません。
- 企業向けDXコンサルティングは年間契約でお受けしております。


https://park.jp/service_menu/2491



## 自分でもサービスを販売したい方へ

副業として無形のサービス提供をする場合、できるだけ手数料を下げて、安心して支払ってもらうスキル販売ショップサービス、【PARK】のご紹介です。

- クラウドワークスが運営
- 販売手数料 3%・決済手数料 3.5% + 40円/件
- サービスを提供する予定がなくてもストレスを減らす方法で使える（⇠重要）
↓ご登録はこちらから↓

[クラウドワークス運営スキル販売ショップPark](https://park.jp/?outer_ref=INV-BU076T "クラウドワークス運営のスキル販売ショップPark")
Dockerイメージのタグ構成（PHP＆PostgreSQL）

# はじめに
初めまして！
エンジニアになって数年、今まで本を読むだけでしたが、もっとプライベートで楽しみながら成長したい！自分が学んだ足跡を残していきたい！と思い記事をかきました！
最終的には自在に開発できるようになりたいと思っています。:triumph:
いろいろな記事を参考にさせてもらっています。:bow_tone2:
その中でもこれってどういう意味？とかつまづいたところを念入りに書いていこうかと思います。:fist:



# 今回の目的
Dockerのイメージを選ぶときに、「これどう意味なの？何を基準に判断すればいいの？」となりました。使う範囲でいいから一通りの内容やルールを理解してから使いたいですよね。:thinking:
対象範囲はPHPとPostgreSQLに絞りました。長くなったので記事は二つに分けています！

今回は前回の続きになります！

https://qiita.com/mr_noppo/items/79e0dbcfaebea8c8192b

## 使用したものや事前準備
・Docker Hub
・PHP
・PostgreSQL

## 主に参考にさせていただいた記事
Docker Hubの情報を読みながら、わからないところは参考記事やChatGPTに解説してもらいました。
参考記事は本文中に掲載します！

https://hub.docker.com/

https://chat.openai.com/

# PHPのタグ構成
早速ですが下記の中央より下のところに説明がありました。
今回は読み合わせになりそうなので「端的に言えばこういうことでは？」のレベルでまとめていきたいと思います。

※確実な情報は下記のリンクを参照ください。

https://hub.docker.com/_/php

### php:\<version>-cli
コマンドラインに特化したイメージ。コマンドラインアプリケーション開発やスクリプト実行用。
Webサーバーにはならない。

### php:<version>-apache
DebianとApache httpdイメージ。
Webサーバーが組み込まれているため、Webアプリケーションの開発やデプロイメントに最適。

### php:<version>-fpm
アプリケーションサーバーにあたる。Nginxコンテナとの組み合わせで使われる。
PHPのFastCGIで効率的に動的ページを作成する。

### php:<version>-alpine
Alpine Linux。軽量最低限のため必要なものは自分でインストールしてカスタマイズする。
公式イメージが正しいと思うなよっていうのは、目から鱗でした。ここでDockerFileが必要なんだなとも。

https://qiita.com/pottava/items/970d7b5cda565b995fe7

https://speakerdeck.com/stormcat24/oqian-falsedockerimezihamadazhong-i?slide=49

# PostgreSQLのタグ構成
DebianかAlpine Linuxの二択でした。
軽量にしたいからAlpne Linuxでいいんじゃないかと思ったが互換性のないツールもあるため簡単に選んでいいものではなさそう。
また、PostgreSQLのタグ構成のDockerfileを見ると、bookworm-slimとなっているため軽量対策も進んでそうです。

https://github.com/docker-library/postgres/blob/ab6925051ca097d415816928a50c483ecc370c00/16/bookworm/Dockerfile

Slimがついているイメージは使用頻度の低いパッケージを削除します。

https://zenn.dev/ken3pei/articles/1abbf7d974cf5d

### <version>-bookworm
Debian（Linuxディストリビューション）のバージョン12

### <version>-bullseye
Debian（Linuxディストリビューション）のバージョン11

### <version>-alpine
Alpine Linux

## 最後に
たださらっとみただけではメリットデメリットをはっきり説明できるところまで行けませんでしたが、どんな意味を持つかはわかりました！
コンテナ構築に活かしまくります！
英語ドキュメントが怖らなくなるためにやったこと

ふらんです。ご無沙汰しております。

いま都内のとある受託開発企業で働いており、楽しみと苦しみを味わいながら業務をぼちぼち進んでいます。

実際に、わからなかったらドキュメントに参考しなければならないが、多くの日本人からこんな声が聞こえました。

「英語のドキュメントを読んだら、最新の情報を取れます。」

「英語のドキュメントの良さがわかりますが、英語を読んだら怖くなりがち…」

…

自分は英語が大嫌い時期もあったため、日本語しか勉強しない大学時代に過ごしていました。日本に来てもう6年目に迎えたが、日本語力を高めるためにいっぱい苦労してきた時期が実はあります。今回は同じような「非英語ネイティブ同士」の立場にいながら、自分がどのように英語ドキュメントに対する恐怖心を取れるかを紹介させていただきたいです。

## まず、英語と仲直りをしたい！

今までずっと受験のために英語を勉強していましたが、院生の時に初めて英語の良さが分かるようになりました。修論を書くために文献を読むことはきっかけでした。

CiNiiがちょっと物足りないなあと思って、英語の文献を探し始めました。「あれ？意外とこんな論点を提起する論文があるじゃん？自分の修論に参考になれるのでは？」と思いながら、英語に対する嫌悪感が下がるようになってきました。

ただ、中国の過酷な受験戦争にサバイバルできたものの、英語大嫌いだったせいで、いきなり英語文献を読むのはちょっとハードル高いと感じました。

そこで、日本にいながら英語を触れる環境を少しだけ作りながら、英語と仲直りするために本気で一歩踏み出しをしました。

## 些細なことでも、英語で…

### デバイスの言語設定を英語へ

これが一歩踏み出しのためにやりやすい方法です。自分が日本語を勉強し始めた時に何年くらい言語設定を日本語にして、ほとんどの日本人が使っているスマホのかな入力も時間をかけて練習してきましたから、英語を本気で使いたいと思って、3年ほど前に英語で設定し始めました。

自分のデバイスを英語で設定して、「私がいま本当に英語を使っている」ということを肌で感じられます。

### 英語圏のサイトでネットサーフィン

例えばDiscordで好きなゲームのサーバーに参加し、Redditで興味がある話題を探してひたすら見るのもおすすめです。

それともX（旧Twitter）で英語圏のエンジニア界隈のもの（techtwt）を見ても全然ありと思います。あそこに面白いエンジニア向けのミームがいっぱいあります。

ネットサーフィンで学べる英語はカジュアルすぎるかもしれないけど、英語のスラングが勉強できるのは楽しさの一つだと思えます。

これくらいカジュアルなものを肌で感覚を掴むことができたら、チャレンジできるものが増えられます。

### ゲームの言語設定を英語で

Nintendo Switchやってるので、あつ森やゼルダを一回中国語版で遊んでみて、慣れてきたら再び英語版で遊んでみました。

日本で売っているゲームソフトが他言語設定に設定できない場合があるかもしれないですが、できる範囲で自分の言語で遊んでみたら英語で二週目やってみても全然いいと思います。

### 読める範囲の小説・洋書を読んでみる

二次創作の小説を読みたいならば、AO3で自分が好きなアニメ・映画・ゲーム関連のものを英語で読められます。あそこは新世界です！

~~（ただ、NSFW(R18)のものがあるので、自分の好き嫌いでフィルターを徹底的にかけてください！）~~

そこに興味がない方は、自分が読んだことある好きな本の英語版を是非読んでみてください。

私は中学生に村上春樹の『ノルウェーの森』を読んだことがあるが、英語版を読み始めるとさらに違うニュアンスが感じられるということで、本当に楽しかったです。

あと、自己啓発の本はとても読みやすいので、英語の読解力を高めるのは一つの手段として使えるかもしれません。

洋書を読みたいならば、是非新宿にある「**Books Kinokuniya Tokyo 洋書専門店**」へ足を運んでみてください〜

### Udemyで英語の人気コースを勉強してみる

私が今業務をキャッチアップのために、割とUdemyで英語の関連コースを受講してきました。

実際にエンジニアになる前に、私も同時にプログラミングを勉強したい+英語も勉強したいと思っていたから、英語のコース受講し始めました。

コースを選ぶコツは、口コミはもちろん、アクセントも重視している（やっぱりインド英語はちょっとハードル高いですよね！）

試聴コースを聞いてみて、自分がこのコースならいけるくらい思えられてたら、勉強を着手し始めるのは無難です。

専門用語を勉強するために、これがとても良質な勉強資料とは過言できません。

## どうしても基礎が弱いという苦手な意識な方向け

### やっぱりTOEICに受験してみてください

TOEIC試験だと、結構限られている時間で試験問題を解けなければなりません。

また、短時間で得点を稼ぐために、Part 5の短文の穴埋め問題を攻めた方がコスパがいいと思います。

そのために、点数を上達させたいなら、基礎から文法と語彙をしっかりと勉強しましょう。

TOEICを受験するのは英語を勉強する目的ではありません。しかし、自分がどれくらい行けたのかを検証したいならば、あくまでも一つの手段になれます。

## 最後に

こんなに些細なことをやって、ゼロからコードを書くように積み重ねて、院生時代から英語の文献への恐怖心が取れるようになったし、今でも自分と同じような外国人エンジニアの先輩から参考用の英語のドキュメントを送られていても、淡々と受け入れるようになれます。

日本に来てから、さらに日本語を上達させる環境を頑張って作ったという経験は活かせたと思います。

なので、大事なのは、「自ら環境作り」、「興味本位」と「母国語に慣れてから英語へ移る」ということです。

最後に、英語を勉強しているエンジニアが英語でドキュメントを読めますように全力で応援いたします。私はこれからも日本にいながら英語を使い続ける道を模索しに行きます。

以上、おしまい〜
Docker上のjupyterlabからmayaviで3Dプロット

# 概要
3Dプロットしたものを動かすためにmayaviを入れようとして色々した

# 環境
Windows 11 Pro
Docker Desktop
JupyterLab 4.1.2

既にVcXsrvを入れていたが必要あるか分からない。(必要な場合)入れ方は下記参考

https://qiita.com/Nya-ku/items/465ad4c4d072258f1fbf

# 結果何をすればよかったか
```python:3.12-slim->python:3.10.slim```
```vtk9.3.0->9.2.2```
にバージョンを落とした。

#### 追記
import順でkernel restartしたり通常実行する
具体的には```import cv2```を先にするとkernel restartになる、原因不明

# やったこと
以下時系列で散文的に書く。
まずそのままで
```
pip install mayavi
```
するとbuild時点で
```
error: subprocess-exited-with-error
  × Getting requirements to build wheel did not run successfully.
...
NameError: name 'build_src' is not defined python
```
とエラーが出る

https://github.com/enthought/mayavi/issues/1284

にはMicrosoft Visual C++ Build Toolsが関わってるような雰囲気もあったが、よく分からない。代わりに

```
pip install https://github.com/enthought/mayavi/zipball/master
```
として
```
from mayavi import mlab
```
を実行するとKernel restartとなる。

https://qiita.com/momomo_rimoto/items/83917d3f9f5dd35457e1

に倣って足りてないものを適宜```apt install```する
```
ldd /usr/local/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so | grep "not found"
        libxcb-icccm.so.4 => not found
        libxcb-image.so.0 => not found
        libxcb-util.so.1 => not found
        libxcb-keysyms.so.1 => not found
        libxcb-render-util.so.0 => not found
        libxcb-shape.so.0 => not found
        libxcb-xinerama.so.0 => not found
        libxcb-xkb.so.1 => not found
        libxkbcommon-x11.so.0 => not found
        libxcb-icccm.so.4 => not found
        libxcb-image.so.0 => not found
        libxcb-util.so.1 => not found
        libxcb-keysyms.so.1 => not found
        libxcb-render-util.so.0 => not found
        libxcb-shape.so.0 => not found
        libxcb-xinerama.so.0 => not found
        libxcb-xkb.so.1 => not found
        libxkbcommon-x11.so.0 => not found
```

jupyterlabでデバッグモードにする場合は
```
import os
os.environ["QT_DEBUG_PLUGINS"] = "1"
```

再度
```
from mayavi import mlab
```
すると
```
ImportError: TVTK not built properly. Unable to find either a directory:
/usr/local/lib/python3.12/site-packages/tvtk/tvtk_classes or a file: 
/usr/local/lib/python3.12/site-packages/tvtk/tvtk_classes.zip with the TVTK classes.
```
コンテナのfiles内を見てみると確かに```tvtk_classes```はない。
立ち返り、色んなgithub issueでversion下げるとうまくいったとあったので、Dockerfileを
```
FROM python:3.12-slim-> FROM python:3.10-slim
```
に変更してimageをrebuild。すると公式にあるように

https://github.com/enthought/mayavi/

```
pip install mayavi
pip install PyQt5
```
が問題なく実行できた。再度
```
from mayavi import mlab
```
を試すと
```
WARNING: Imported VTK version (9.3) does not match the one used to build the TVTK classes (9.2). 
This may cause problems. Please rebuild TVTK.
```
とあり、バージョンの差が問題となってるようなので
```
pip uninstall vtk
pip install vtk==9.2.2
```
としてバージョンを合わせるとうまくいった。以下は描画例。
```
from mayavi import mlab
import numpy as np

# 3D物体の座標データ
x, y, z = np.random.random((3, 100))

# 3D物体を描画
mlab.points3d(x, y, z)

# デフォルトで視点変更が可能なウィンドウを表示
mlab.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773193/9e6fb32f-8734-5127-4f4d-6b9c2494b087.png)
SQLServer で子テーブルのデータを連結して一つのカラムにまとめる

SQL Serverでデータを操作する際、特定のレコード群から派生した文字列を連結して一つのカラムにまとめたい場合があります。

本記事では、`FOR XML PATH`と`STUFF`関数を使用して、このような文字列の連結を行う方法を紹介します。

## テーブルの作成

ブログエントリーとコメントを保存するための2つのテーブルを作成します。
```sql
-- ブログテーブルの作成
CREATE TABLE blogs (
    blog_id INT PRIMARY KEY,
    title NVARCHAR(255),
    content NVARCHAR(MAX)
);

-- コメントテーブルの作成
CREATE TABLE comments (
    comment_id INT PRIMARY KEY,
    blog_id INT,
    title NVARCHAR(255),
    comment NVARCHAR(MAX)
);
```

## サンプルデータの挿入
次に、テスト用のサンプルデータを挿入します。
```sql
-- ブログデータの挿入
INSERT INTO blogs (blog_id, title, content) VALUES
(1, N'SQL Serverの魅力', N'SQL Serverについての深い解説。'),
(2, N'データベースの最適化', N'パフォーマンスの向上について。');

-- コメントデータの挿入
INSERT INTO comments (comment_id, blog_id, title, comment) VALUES
(1, 1, N'素晴らしい記事です', N'非常に役立ちました。'),
(2, 1, N'同意します', N'特にインデックスの部分が参考になりました。'),
(3, 2, N'もっと詳しく', N'特定の最適化技術についてもっと知りたいです。');
```

各ブログエントリーについて、それに関連するコメントのタイトルをカンマ区切りで一つのカラムにまとめるクエリを実行します。
```sql
SELECT 
    b.blog_id,
    b.title AS blog_title,
    STUFF((SELECT ', ' + c.title
           FROM comments c 
           WHERE c.blog_id = b.blog_id
           FOR XML PATH(''), TYPE
          ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS comment_titles
FROM 
    blogs b
GROUP BY 
    b.blog_id, b.title;
```

実行結果
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482880/8a9d390c-c88f-e111-cb96-b4a6b3b38a23.png">

このクエリでは、各ブログに対するコメントのタイトルがカンマ区切りで連結され、`comments`テーブルの各エントリについて`blogs`テーブルの関連するエントリと共に表示されます。`STUFF`関数は、最初のカンマを除去するために使用されています。

## Reference
- [例: PATH モードを使用する](https://learn.microsoft.com/ja-jp/sql/relational-databases/xml/examples-using-path-mode?view=sql-server-ver16)
- [STUFF (Transact-SQL)](https://learn.microsoft.com/ja-jp/sql/t-sql/functions/stuff-transact-sql?view=sql-server-ver16)
[Microsoft Fabric] Pythonで簡単にカレンダーテーブルを作成しよう！

# はじめに

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/65441c39-f19e-96f2-4e1d-bb8c6d15cbc7.png)


BIプロジェクトでは、カレンダーテーブルの作成が欠かせません。この記事では、Pythonを使って、簡単にカレンダーテーブルを作成する方法を紹介します。

## Pythonでカレンダーテーブルの作成

Microsoft Fabricでは、一般的に**Spark Dataframe**から**Delta Table**に変換し、**OneLake**にデータを取り込む流れがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/cc784ec1-047e-f3dc-cf59-7818e2faed9d.png)

Pythonコードを使用してカレンダーテーブルを作成します。このテーブルはSpark Dataframeとして生成されるため、以下のコードを使用してDelta Tableに書き込むことができます。

```python
df_calender_table.write.format("delta").mode("overwrite").saveAsTable("CalenderTable")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/0531039e-712c-bf14-b367-b85d9e0a992b.png)


## コードはGitHubで公開しています

カレンダーテーブルを生成するコードはGitHubに公開しています。フィードバックやプルリクエストはいつでも歓迎します！

GitHubリンク: [Python CalenderTable Repository](https://github.com/hanaseleb/Python-CalenderTable/)
REST API の RESTってなに？

こんにちは！山下というものです！
今日は祝日なのですが、ふと、RESTって言う言葉が頭によぎりまして、
なんとなくは、理解しているけれど、改めて復習しておきたいなと思い、簡単にまとめてみました。

## RESTの言葉の意味。

このRESTという単語は、
- 『Re』Representational: 代表的な
- 『S』Staate: 状態
- 『T』Transfer: 転送

これらの文字を取って『REST』と言います。

代表的な 状態 転送

なんぞや...ってならうかもですね。
なんとなくこんなものだと覚えておく程度で良いと思います。

## REST設計について

- アドレス可能性
- 統一インターフェース
- ステートレス性
- 接続性

この四つが満たされてREST設計となります。

### 　アドレス可能性

リソースをURIで一意に識別してデータが返ってくる、といったように、
それぞれの情報ごとに場所や名前を識別できるように表現できる性質のこと。

URIとリソースは直感的に対応させた方が良い
さらに、URIは構造的で、かつその構造は予測可能な方法で区別されることが好ましい。

例

```
http://gennzei.com/search/dog
```
上記は、犬について調べてるんだぁ。と一発でわかりますが、
1つのAPIの中で、
```
http://gennzei.com/i-want-to-info/cat
```
この二つが扱われたらどうでしょう？かなり気持ち悪いですね。
なので、/search/dog としたなら/search/cat としたならにすべきなのです。

### 統一インターフェース

インターフェースって何かと何かを繋ぐもの。という意味ですよね。

例えば、GET POST PUT DELETEといったメソッドがあります。
クライアントがサーバーに対して『税金についての情報がほしいよ～』といった時には、一貫してGETを使いますし、『このデータを更新したい！』ってときはPUTを使い、削除したければDELETEを使います。
あ、POSTは、データを追加したい！みたいなときに使います。

こうしたメソッドを、目的によって使いまわそうよ。ということで、この四つのメソッドを一貫して使用するわけで、これらを統一インターフェースと呼びます。

基本サーバーからデータを返すときはJSON形式で返すのが主流となっています。

### ステートレス性

ステートレスってなんぞや。

- Stateless=状態を持たない

という意味があります。lessは無い。という意味を持ちますね。
様するに、クライアントのState(状態)を持たない。ということです。

逆の言葉は、Statefull(ステートフル)といって、クライアントの状態を持つことになります。

普通に考えると、ステートフルな方がクライアントの状態、情報をあらかじめ持っているのだから、一々ステートフルな状態にしていたら手間じゃない？と思うかもしれません。

ですが、このステートフルな設計だと、クライアント毎の状態を考慮した処理を返さなければならず、とても、大変ですし、シンプルではなくなってしまいます。なのであらかじめ。最初から状態、情報を保持せずに、URIに沿って忠実に処理を行い、結果を返す方がシンプルですし、拡張性も担保されるわけです。

ログイン情報なんかは、情報を持っていた方が良いことはありますが、
RESTの基本はステートレスです。

簡潔にまとめると、ステートレス性は、
全てのリクエストが個別に処理され、リクエスト間の依存性がないことを指します。

### 接続性

コネクタリビティと言いますね。「リソースに含まれるリンクをもとに別のリソースに接続可能となる(遷移可能となる)性質のこと」です。

接続性は、他の 3 つの特性を兼ね備えた上で、
関連するリソースの URI をお互いに表現することを指します。

この特性によって、クライアント側が URI の生成ルールを把握する必要がなく、関連するリソースにアクセスすることが可能になります。

この特性がない場合、URI を知る術がなくリソースにたどり着けません。


## ROA（リソース指向アーキテクチャ）

これら4つの特性は、ROAと呼ばれる設計思想の中のお話です。
RESTはこのROAを提唱しています。

ROA は「リソース」に重点を置いていて、リソースを URI で一意に表現し、リソースの状態を HTTP メソッドで操作することで、API を理解しやすくなり可読性が高まります。


## 終わり

なんとなく完結に調べて記事にしてみました。
初心者だったりが呑み込みやすいように抜粋して書きましたが、
何となくこんなものなんだ～と理解してくれると嬉しいです。
DHCP鯖

DHCP鯖とホストとのやりとり

1 DHCP discover→2 DHCP offer　←　
3 DHCP Request→4 DHCP ACK←

DHCP鯖からホストへの通信はユニキャスト逆はブロードキャスト

GARP DHCP鯖から得たアドレスに重複がないか確認するために使用される。ホストからブロードキャストされる。ARPキャッシュも合わせて更新される。

CISCOルータをDHCP鯖に設定する

Router(config)#service dhcp
Router(config)#ip dhcp pool 名前
(dhcp-config)#network ネットワーク　サブネットマスク/プレフィックス長
(dhcp-config)#default-router ip address
クライアントに配布するDNSサーバの設定
(dhcp-config)dns-server ip address

DHCPリレーエージェント

router(config)interface 所属するIF
router(conf-if)ip helper-address DHCP鯖アドレス
演算子について:python

<font color ="#00b300"> ※このQiitaで記事を書くことに慣れていない為、誤字・脱字や読みづらい部分もあるかと思いますが、ご理解ください。</font>

閲覧いただき、ありがとうございます！
私は、現在医療業界で働く医療従事者になります。
とある経緯からpythonを勉強中です。
ここでは自分が勉強した事を復習したり、忘れないようにするため記載いたしますので、もしもっとこうした方が良いよ、とかこれはちょっと。。。というものがあれば教えていただけますと幸いです。
※記事内容は随時更新します

## 否定を演算(not)
※ブール型で出力

```py:記述
a = 2 <= 5

print(not a)  #aの結果がTrueならFalse、FalseならTrueとなる。

```

結果

False


### ※not演算子には使い分けがある。
not in 演算子がおこなう演算と同等の演算を、not 演算子と in 演算子を使ってもおこなうことは出来るが、not in 演算子を使う事が推奨されている。

```py:記述
a = "python"
print("p" not in a) #推奨
print(not "p" in a) #非推奨

```

結果

False
False


## ブール演算の優先順位
　not >> and >> or　の順で評価されます。

 ```py:記述
 a, b, c = 10, 20, 30

 #notとandについて
 print(not a == 10 and c == 30) #notから評価されるため　False and c == 30となる

 #notとorについて
 print(not a == 20 or b == 30) #notから評価されるため　True or b == 30となる

#andと　orについて
print(a == 20 and c == 30 or b == 10) ##andから評価されるため　False or b == 10となる
```

結果

False
True
False
【解決】Unityで.gitignore設定をしてたらcurrentFileSystemTime.ticks != 0 というエラーが出た

## 初めに
・私のプロジェクトでの解決方法を記載します。
どなたかの役に立てば幸いです。

## 原因
・.gitignore設定の際に当該ファイルを削除してしまったみたいです。(必要なのかも知らない)

## 事象
UnityのConsoleに以下のエラーメッセージが表示されます。

```
currentFileSystemTime.ticks != 0 using check file Temp/FSTimeGet-1938f0a485be842559ab99e8c24e87d2 => /Temp/FSTimeGet-1938f0a485be842559ab99e8c24e87d2 (file exists no, folder exists no)
```
実際起動も出来るし何も影響はなさそうだったのですが、
Clearしても数秒後に再度表示されてしんどかったので調査しました。

## 解決方法
Editor再起動で解決しました。

以上です。