OmniAICreator/Qiita-1.07M huggingface dataset:
【Excel Addin】Adding a button for recalculation

Adding a button and bind it with a Sharperlight formula to stop automatic recalculation on filter value changes.
Recalculation is kicked in, only when the button is clicked.
It assumes that the Sharperlight table formula is already defined.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9ebd6709-3bf4-57c7-659c-3ddc83331996.png)
## Adding a button
Select the cell $\color{Blue}{\rm E2}$ and select "Buttons"->"Default Button" from the Sharperlight ribbon.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/f769bd00-cd2c-e8d3-37a8-9cebe552d023.png)
A button is added starting at cell $\color{Blue}{\rm E2}$.
Let's name the button $\color{Red}{\rm TableRefresh}$.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/1a5f9dfb-adff-3998-859f-56676c06835e.png)
## Sharperlight formula and button binding
Right-click on any cell and select "Sharperlight XL"->"Edit Button/Table Bindings".
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/741b3211-0161-4f8e-ea24-6aadc16dfd68.png)
The “Button Table Binding” dialog will appear.

+ Button Name $\color{Red}{\rm TableRefresh}$
+ Query Name $\color{Red}{\rm Transactions}$
+ Default Location $\color{Red}{\rm $C$5}$
+ Table Name $\color{Red}{\rm Transactions}$　
+ Parameter 01 $\color{Red}{\rm =$C$2}$
+ Parameter 02 $\color{Red}{\rm =$D$2}$

Enter like this and click OK.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0283095a-fbbb-7caa-a51d-bc58a8ecbd17.png)
Let's see if the button works. Delete values in the middle of the table.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8f1a13ff-1018-b6eb-c96c-7062daec2f27.png)
Press the button. The table is recalculated and the values are redisplayed.
You have now completed the button and formula bindings and verified that they work.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/f483a492-7197-5201-5eaa-a778ca39b409.png)
You can also change the caption of the button.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/fe491cb2-c5a5-7842-53f9-38298b336567.png)
Delete the formula in the anchor cell because once the binding is complete the formula in the anchor cell is no longer needed.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/83f18138-f0db-fa4c-b21b-213521894b5d.png)
After deletion,
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/6a4cadbb-cc18-56bd-936b-7d71ea64c24e.png)
Formulas are saved in the workbook even if they are deleted from the cell.
They can be viewed and edited at any time via the "Manager" in the "Query" group of the Sharperlight Ribbon.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ab50a456-8798-11a5-6025-764a7ffd915e.png)

Thank you for reading this article.
Elementorで更新しようとしたらサーバーエラー(500 error)が出て更新できなくなる問題

半年前、この問題で原因解明に休暇が1日つぶれ、
最近も、同じ問題を解決したので、解決策を。

その時はメモリを増設してなんとかしようとしたけれど、
しばらくすると、同じエラーが出た。
原因と解決策としては、

## リビジョンが溜まっている...なのでリビジョンを消すと解決！

> WordPressには、リビジョンという
記事のバックアップ機能がついているのだけれど、
それが溜まりすぎると、サイトも重くなるし、
このように更新もできなくなるという問題が生じる。
特に、Elementorは、製作工程や修正で
リビジョンが増えることが多く、要注意です。

手順は
https://new-ladder.com/wordpress-revision-delet/
こんな感じでプラグイン等を使って、一括削除をするとラクラク〜。

リビジョンが溜まらないためには、
wp-config.phpに
```
define('WP_POST_REVISIONS', 5);
```
と追記すれば、5つ以上溜まらなくなります。

参考記事
https://kinsta.com/jp/blog/wordpress-revisions/#wordpress-10
脆弱性スキャナの機能評価について考える

## 目的

全てのケースに完全に対応したソリューションが無いことを前提として各スキャナの性能を調査し、比較検討に利用可能な情報をまとめてみる。

## 背景

プロフェッショナルの人たちが長期間の検討を経た結果、壊滅的なクオリティしかないぽんこつを選定してしまう悲劇を見たため。

参考 :
- [第734回　UbuntuでSBOM（ソフトウェア部品表）を作る方法 \| gihyo\.jp](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0734)
-  [2019年6月14日号　Ubuntuにおける「バージョンによる脆弱性判定」の正しいアプローチ、WSL2のプレビュー開始 \| gihyo\.jp](https://gihyo.jp/admin/clip/01/ubuntu-topics/201906/14)

### 方法

同一環境でのスキャンを実施し、結果を確認

### 想定される結果

#### OK

- 該当ソフトウェアを正しく検出できる
- 該当バージョンで未解決の脆弱性を正しく検出できる

#### 準OK

- 個別のフォローを行えばOKと同じ結果を示せる

#### NG

- 該当ソフトウェアを検出できない
- 該当バージョンで未解決の脆弱性を検出できない (偽陰性)
- 該当バージョンで解決済みの脆弱性を検出してしまう (偽陽性)

### 想定される起因

- 対象環境に対応していない
- 対象ソフトウェアの導入手法に対応していない
- 脆弱性DBが提供するデータとのマッチング方法の違い
- 脆弱性DBが提供するデータの問題
- Upstream以外のバックポート情報に対応していない
- 未解決の脆弱性に対する処理方針の違い

## 評価項目

### 1. PHPの脆弱性検出能力

0. Docker Official Image (Debian系)
0. Docker Official Image (Alpine系)
0. CentOS7 にphpenvでインストールしたバイナリ
0. CentOS7 にインストールしたRemi's RPM repositoryパッケージ
0. CentOS7 にインストールしたOS標準パッケージ
0. CentOS7 にインストールしたSoftware Collectionsパッケージ
0. Alma Linux8 にインストールしたAppStreamパッケージ
0. Alma Linux9 にインストールしたAppStreamパッケージ
0. Ubuntu 22.04 にインストールしたOS標準パッケージ
0. Alpine 3.16 にインストールしたOS標準パッケージ

:ok: : 適切な検出
:warning: : 個別のフォローをすれば適切な検出
:x: : 偽陽性または偽陰性の検出

|結果|ツールA|ツールB|
|:------------:|:------------:|:------------:|
|1|||
|2|||
|3|||
|4|||
|5|||
|6|||
|7|||
|8|||
|9|||
|10|||


### 2. Pythonの脆弱性検出能力

0. Docker Official Image (Debian系)
0. Docker Official Image (Alpine系)
0. CentOS7 にpyenvでインストールしたバイナリ
0. CentOS7 にインストールしたOS標準パッケージ
0. CentOS7 にインストールしたSoftware Collectionsパッケージ
0. Alma Linux8 にインストールしたOS標準パッケージ
0. Alma Linux8 にインストールしたAppStreamパッケージ
0. Alma Linux9 にインストールしたOS標準パッケージ
0. Alma Linux9 にインストールしたAppStreamパッケージ
0. Ubuntu 22.04 にインストールしたOS標準パッケージ
0. Ubuntu 22.04 にインストールしたUniverseパッケージ
0. Alpine 3.16 にインストールしたOS標準パッケージ

### 3. JAVA/OpenJDKの脆弱性検出能力

0. Docker Official Image - Temurin (Debian系)
0. Docker Official Image - Temurin (Alpine系)
0. Docker Official Image - Temurin (Debian系)
0. Docker Official Image - Temurin (Alpine系)
0. CentOS7 にインストールしたOS標準パッケージ
0. Alma Linux8 にインストールしたAppStreamパッケージ
0. Alma Linux9 にインストールしたAppStreamパッケージ
0. Alma Linux9 にインストールしたOracleJDKバイナリ
0. Alma Linux9 にインストールしたTemurinパッケージ
0. Alma Linux9 にインストールしたCorrettoパッケージ
0. Ubuntu 22.04 にインストールしたOS標準パッケージ
0. Ubuntu 22.04 にインストールしたOracleJDKバイナリ
0. Ubuntu 22.04 にインストールしたTemurinパッケージ
0. Ubuntu 22.04 にインストールしたCorrettoパッケージ
0. Alpine 3.16 にインストールしたOS標準パッケージ

### 4. Kernelの脆弱性検出能力

0. CentOS7 にインストールしたELRepoパッケージ
0. CentOS7 にインストールしたOS標準パッケージ
0. Alma Linux8 にインストールしたOS標準パッケージ
0. Alma Linux9 にインストールしたOS標準パッケージ
0. Ubuntu 22.04 にインストールしたOS標準パッケージ
0. Ubuntu 22.04 にインストールしたHWEパッケージ
0. Ubuntu 22.04 にインストールしたMainlineBuilds

### 5. XXXX
wallコマンド とは

## 勉強前イメージ

知らないコマンド・・・

## 調査

### wallコマンド とは

ログインしているすべてのユーザのターミナルにメッセージを送信するコマンドになります。

```text:rootユーザ
[root@localhost ~]# wall
test messages [ctrl+Dで送信]
```

```text:adminユーザ
[admin@localhost ~]$ 
Broadcast message from root@localhost.localdomain (pts/0) (Wed Nov 23 16:43:44 2022):

test messages
```

## 勉強後イメージ

シャットダウンするときとかに知らせるために使うとかありそうね？

## 参考

- [wallコマンドの使い方まとめ【Linuxコマンド集】](https://eng-entrance.com/linux-command-wall)
- [【 wall 】コマンド――ログインしている端末に一斉メッセージを送る](https://atmarkit.itmedia.co.jp/ait/articles/1701/20/news010.html)
Unicodeの世界 ~異体字セレクタ編~

# 概要

---

文字をコンピューターの画面に表示する為の仕組みは中々に複雑です。
この記事ではその中でも文字を表示する時のバリエーション指定の仕組みを調べて解説します。

---

# 解説

---

# 異体字セレクタとは
- 異体字セレクタとはUnicodeで定められた文字の表示のちょっとした違いを指定するための仕組みである
  - これ対応した文字の後に異体字セレクタと呼ばれる特殊な見えない文字を付与すると見た目が変わる

---

## テキストでは
- 鬼滅の刃の禰󠄀豆子の禰󠄀の例
  - 異体字セレクタ無し
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413932/bf9a119c-9300-2460-dc3f-3da011e20e94.png)
  - 異体字セレクタ有り
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413932/d374014e-3ed9-3626-0989-8c849eec517f.png)

---

## 絵文字では

---

### テキストっぽい絵文字とイラストっぽい絵文字
- Unicodeでは全ての文字に対して「絵文字かどうか」と「イラストっぽく表示すべきか否か」が定義されている
  - [Unicodeの絵文字一覧](http://unicode.org/Public/emoji/5.0/emoji-data.txt)を見ると各文字の区分が分かる
    - 「絵文字かどうか」は`Emoji`プロパティと呼ばれている
    - 「イラストっぽく表示すべきか否か」は`Emoji_Presentation`プロパティと呼ばれている
      - 「イラストっぽく表示すべきでない」と定義されている文字はだいたいモノクロなのでなんとなく分かる

|文字|絵文字か|イラストっぽく表示すべきか|
|:-:|:-:|:-:|
|a|×|×|
|♨️|◯|×|
|⛄|◯|◯|

---

### 絵文字用の異体字セレクタ
- 絵文字用の異体字セレクタは2種類ある
  - VS-15(U+FE0E)
    - テキストっぽくモノクロで表示してくれやという意味
    - 「イラストっぽく表示すべき」絵文字に付与するとテキストっぽく表示される
      - テキストっぽいバージョンが表示環境にない場合はイラストっぽく表示される
  - VS-16(U+FE0F)
    - イラストっぽくカラフルに表示してくれやという指定
    - 「イラストっぽく表示すべきでない」絵文字に付与するとイラストっぽく表示される可能性がある
      - イラストっぽいバージョンが表示環境にない場合はテキストっぽく表示される

|異体字セレクタ無し|VS-15付与(テキストっぽく)|VS-16付与(イラストっぽく)|
|:-:|:-:|:-:|
|♨|♨︎|♨️(WindowsのChromeではイラストっぽいバージョンがない)|
|🀄|🀄︎(WindowsのChromeではテキストっぽいバージョンがない)|🀄️|
|⛄|⛄︎|⛄️|

---

# まとめ
Unicodeは奥が深くて面白いです。異体字セレクタは文字の柔軟な表示を可能にする仕様なので多様性配慮素晴らしいなーと思いました。

---

# 参考ページ
https://qiita.com/ykami/items/d45ec72f8a5ea8b3288d

http://unicode.org/Public/emoji/5.0/emoji-data.txt

https://ja.wikipedia.org/wiki/%E7%95%B0%E4%BD%93%E5%AD%97%E3%82%BB%E3%83%AC%E3%82%AF%E3%82%BF

https://moji-memo.hatenablog.jp/entry/20120802/1343876603

http://www.unicode.org/reports/tr51/tr51-10.html

https://qiita.com/_sobataro/items/47989ee4b573e0c2adfc#%E6%96%87%E5%AD%97%E3%81%AE%E5%BE%8C%E3%82%8D%E3%81%AB%E3%81%A4%E3%81%91%E3%82%8B-variation-selector
仕事ハック：登録したのを忘れた予定ってありますね。

スケジュール管理は何を使ってますか？
私は、googleカレンダー一択です。色々と便利です。
ただ、時にこの予定なんだっけ？ありませんか？
僕はよくあります。
登録した時は、何か意図あって登録してますが、時間が立つとその裏を忘れて全く思い出せない。
ちゃんとタイトルや情報を付けとけばよかったと反省します。
そんな時にApps Scriptで、登録日時を取得します。

登録日時がわかれば、そこからメールやslackを見直せば、その時のやり取りが探せます。日付だけでなく時間も分かるのがポイントです。

# Apps Script
```java
////////////calendar
function chkCalendar() {
  yy = 2022
  m = 11
  d = 20
  var e = getEvents(yy,m,d);
  for(var i = 0; i < e.length; i++){
    var text = e[i].getTitle() + " : " + e[i].getDateCreated();
    Logger.log(text);
  }

  function getEvents(y,m,d){
    var cal = getCalendar(); // カレンダーの取得
    var date = new Date(y,m-1,d,0,0); // 指定日の取得
    return cal.getEventsForDay(date);
  }
  function getCalendar(){
    return CalendarApp.getCalendarById('メアド@gmail.com')
  }
}
```
paizaラーニング 例外処理のタブーサーチ 【備忘録】

自分用メモです。
問題：例外処理のタブーサーチ (paizaランク B 相当)
https://paiza.jp/works/mondai/steinsgate/restore_command_boss

最初に書いたコード
```python:firsttry.py
n, m, l = map(int, input().split())
d = [[int(x) for x in input().split()] for y in range(n)]
p = [[int(x) for x in input().split()] for y in range(l)]

dif = []
for i in range(l-1):
    difl = []
    for j in range(m):
        difl.append(p[i+1][j]-p[i][j])
    dif.append(difl)
    
for difi in dif:
    for i, di in enumerate(d):
        if difi == di:
            print(i+1)
```

difl配列を作らずに差分を求められそう

修正版
```python:secondtry.py
n, m, l = map(int, input().split())
d = [[int(x) for x in input().split()] for y in range(n)]
p = [[int(x) for x in input().split()] for y in range(l)]

dif = [[p[i+1][j] - p[i][j] for j in range(m)] for i in range(l-1)]
  
for difi in dif:
    for i, di in enumerate(d):
        if difi == di:
            print(i+1)
```

リスト内方表記をうまく利用することで一行で同じ処理ができたっぽい
初心者から見たuseEffectがわからなさすぎたので、絵に描いてみた。

## 初心者から見たuseEffect
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638403/a441084a-904b-7ef2-4019-5dca95546837.png)

## 今日わかったuseEffectの生態（エラい人に教えてもらった）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638403/2f4e1e2c-c3a1-d293-4bda-ac87072ace61.png)

```
useEffect(() => {
        実行する関数
    return () => {
       コンポーネントが消える時に実行 
    };
},[])
```

なぜ、リターンがあるかというと、コンポーネントが消えても関数が後ろでずっと実行され続けるというのを防ぐため、掃除できるようになっているんだそうな。

## 今晩わかったuseEffectの生態（またエラい人に教えてもらった）
![Group 18 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638403/8acde9a1-9ed0-934b-3a0b-1517b5a3fcd7.png)
```
useEffect(() => {
        エサがある（またはエサが更新されるたび）実行する関数
    return () => {
       新しいエサを食べる前に実行 
    };
},[エサ])
```
## あとがき
エラいエンジニアでも、
useEffectで他人が書いたのも読みにくいし、
（コメントつけて書いてほしいと言っていた）
初心者には理解しづらいと思うよ〜〜と言われた。

ちなみにuseSstateさんとは関係ないが、全く関係がないとは言い切れない仲らしい。
（初心者から見ると、よく中でsetしているように見える）

useStateさんの良記事はこちら
https://qiita.com/daishiman/items/298750c188544980b863
コンポーネント名まとめ

# はじめに
こんにちは。
CSS設計の本をよんでいたところ、コンポーネントの設計にも役立ちそうだったのでアウトプット用でまとめます。

最近のフロントエンドはReactやVueをはじめとしたJavaScriptライブラリの登場により従来のCSS設計(BEM, FLOCSSなど)を使う機会が減ってきています。

ただしこれらのCSS設計が目指したものはいずれも「抽象化」や「コンテキスト」との分離であり、UIをいかに「再利用可能にするか」という点で最新のコンポーネント設計にもこの考え方は役立ちそうです。

逆に最新の技術を用いてもクラスないしはコンポーネントの設計からは逃れられないということですね。。。泣

## 命名の重要なところ
具体と抽象の中間の汎用性が最も高い部分を狙うのが良いです。
具体的すぎると再利用性が失われますし、抽象的すぎると意味が伝わりません。

と言っても「汎用性が高い命名」を自分で考えるのは大変です。
そこで有名なCSSフレームワークであるbootstrapやMaterialUIなどでよく使われるコンポーネントを指針とし、「汎用性」の理解を深めます。

# コンポーネント(粒度はバラバラ)
## Accordion
コンテンツを折りたたむことができるUI
ユーザーがより詳しく欲しいと思う情報を取捨選択できる

![スクリーンショット 2022-11-23 16.10.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/beccd9b1-6b80-3889-21cc-e005ffdd9d16.png)

>https://getbootstrap.jp/docs/5.0/components/accordion

## Card
画像と内容(タイトル、要約)がトランプのカードのように表示されるUI
スナップ写真により注目を集め、内容を見てもらう効果がある。

 ![スクリーンショット 2022-11-23 16.09.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/51b5a671-ef6c-5725-30a2-2d6beb119faf.png)

> https://getbootstrap.jp/docs/5.0/components/card/

## Media
画像と内容がが横並びに表示されるUI

![スクリーンショット 2022-11-23 16.22.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/ee087698-591c-7317-0837-d95967b17dfe.png)

> https://blog.gini.co.jp/


## Paper
紙の上に浮いてるかのように見えるUI

![スクリーンショット 2022-11-23 16.18.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/750daa55-5911-770b-321b-13d361cba257.png)

> https://mui.com/material-ui/react-paper/


## Carousel
画像やテキストをスライドで表示させるUI
固定範囲の中で複数の情報を表示できる

![スクリーンショット 2022-11-23 16.15.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/5f09fc0a-c3e6-3ec7-a454-1e2379f5e877.png)


> https://getbootstrap.jp/docs/5.0/components/carousel/

## Menu(Dropdown)
複数のメニュー項目を表示させるUI

![スクリーンショット 2022-11-23 16.26.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/6b65932b-4703-71aa-1152-cdff378921c0.png)

> https://headlessui.com/react/menu

## Jumbotron
キャッチコピーと背景画像を表示するUI

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/3080e197-cb73-44b7-18ab-b509e7f63070.png)

> https://dribbble.com/shots/17117651-Hero-section

## Toast
ユーザーの操作を妨害しない通知表示UI

![スクリーンショット 2022-11-23 16.36.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/4974a2dc-711d-6c26-8480-fb085fc129f2.png)

> https://getbootstrap.jp/docs/5.0/components/toasts/

## WIP
加筆予定

## コンポーネント内で頻出のクラス名
- wrapper
- inner
- header
- body
- footer 

# Tips
### スタイルガイド(storybookなど)を使う
コンポーネントを管理するツールです。
スタイルガイドを導入することにより、コンポーネントの再開発防止や把握が容易になります。
また、デザイナーとのコミュニケーションも円滑化できる

### bodyの背景色をベースルールで設定する
ユーザーがブラウザの機能を使って背景色を独自設定した場合にWebサイトがバグることを防げる

### ボタンにはborderを設定する
ホバー時のborderとの差分を防止する

### フォントはrem指定
px表示だと、ブラウザのフォントサイズ変更機能を使っても変更されない

# 参考

https://www.amazon.co.jp/CSS%E8%A8%AD%E8%A8%88%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-%EF%BD%9E%E8%A9%B3%E7%B4%B0%E8%A7%A3%E8%AA%AC%EF%BC%8B%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E9%9B%86-%E5%8D%8A%E7%94%B0-%E6%83%87%E5%BF%97/dp/B0856YMH7L
ビジネス戦略と経営管理システム

# ビジネス戦略
### BSC(Balanced Score Card: バランススコアカード）
企業のビジネス戦略の```立案及び業績評価を行う```ための一連の手法。
企業戦略の目標値として、従来から用いられた収益などの```財務の視点```だけでなく、```顧客の視点```、```内部ビジネスプロセスの視点```、```組織や従業員の学習と成長の視点```も加える。
BSCではCSF（次項）により施作の選択を行い、スコアカードを作って評価指標と目標値、具体的なプランをまとめる。これにより、個々の社員にとって取り組みやすい、具体的な行動目標が可視化され、```全体が一丸となって目標達成に取り組める```ようになる。

### CSF（Critical Success Factors: 重要成功要因)
```目標を達成するために必須となる重要な要因```。それぞれの要因に優先順位をつけて、優先度の高い要因を選び、選ばれた要因を適切に管理するための施作に経営資源（資金や人材)を集中させることで、目標達成をより確実にする。

### KGI(Key Goal Indicator: 重要目標達成指標)
```戦略目標の達成度```を評価する指標。
```達成すべき目標```を示す指標。
### KPI(Key Performance Indicator: 重要業績評価指標)
```戦略目標の達成度```を評価する指標。
```目標に向けた中間時点での進捗度合い```を図る指標。

### ファブレス
自社では生産設備を持たず、```製品の設計開発や販売のみを行う企業```

### EMS(Electronics Manufacturing Service)
他のメーカの委託を受け、```指定された仕様、設計に基づいて製品を製作する受託企業```のこと。
これらの企業の連携によって新たな事業が生まれている。

# 経営管理システム
ビジネスプロセスで用いられる経営管理システム(業務システム）は、全社共通で、各業務プロセスを統合する期間業務システム、営業活動を支援する営業管理業務システム、生産計画や品質管理を行う生産管理業務システム、商品管理や資材搬入を管理する物流管理業務システムなどに分類される。

### ERP(Enterprise Resource Planning: 企業資源計画）
生産・物流・財務会計といった、企業内の各基幹業務の情報を統合して、```全社業務の効率化を目指し、経営資源の有効活用を促進```する考え方。基幹業務の統合をサポートするパッケージソフトを```ERPパッケージ```と呼ぶ。

### SFA(Sales Force Automation : 業務支援システム）
顧客情報、資料作成のノウハウ、営業担当者の行動予定など、営業活動全般に関する情報を管理し、```営業活動を支援するシステム```。情報やノウハウを共通化・標準化し、```営業活動を効率化して、営業活動の質を向上```を目指す。

### CRM(Customer Relationship Management: 顧客関係管理)
電話対応やWebからの問い合わせといった、顧客との接点にあたる部分で得られる情報を統合し、活用するための手法。顧客情報を一元的に管理することで、新たなニーズの開拓やアフターサービスの充実にもつなげられる。また、顧客ごとに異なる嗜好に合わせた商品情報を個別つに送るなど、```ワンツーワンマーケティングの実現も可能```になる。

### SCM(Supply Chain Management: 供給連鎖管理)
取引先を含めた関連企業全体で、原材料や製品などのモノの流れと、```取引先との受発注業務の管理``するための手法。モノの供給に関連する情報を一元的に管理することで、納期短縮を図り、在庫コストや流通コストの削減を行うことができる。

### KM(ナレッジマネジメント）
企業内に散財する```個々の知識（ナレッジ）を情報化として共有化し、経営に生かす```考え方。
意思決定や改善策の検討、業務の合理化などの問題解決力の向上に役立たせる。

# 出典
https://gihyo.jp/book/2022/978-4-297-12375-8
[Rider]Undo回数を変更する

# 概要
JetBrains RiderのUndo回数はデフォルトで100回までです。戻りたいところまで戻れないことがこれまで何回かありました:angry:
ということでUndo回数を増やそうと思います。
# 本文
メニュー > Help > Find Action
![スクリーンショット 2022-11-23 16.06.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/891fefea-81a0-dbe5-7eee-3fd9de4da7e7.png)

検索欄にregistryと入力してRegistryを選択します。
![スクリーンショット 2022-11-23 16.00.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/644d7b3b-a0e9-f983-d61a-abc2749ac96a.png)

Registryポップアップで「undo.documentUndoLimit」の回数設定を変更します。
![スクリーンショット 2022-11-23 16.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/4b9ca6b5-e305-b7b9-8321-880d01897b40.png)

:::note warn
赤文字で警告が書かれていますが、本当に必要な時にしか変更はしない方が良いようです。変更する時はご自身で判断して行なってください。
:::
レガシーな社内メソッドをカイゼンしていく

[「レガシー」を保守したり、刷新したりするにあたり得られた知見・ノウハウ・苦労話 by Works Human Intelligence](https://qiita.com/advent-calendar/2022/works-hi-3) カレンダー、3日目の記事になります。

## はじめに

プロダクトや開発環境に限らず、どんな会社にも多かれ少なかれレガシーなメソッドがレガシーなまま残っているものです。

だれも見ていない予定表に記入するルール、冗長な二重の申請手続き、印刷した紙ベースでのコードレビューetc.

何をレガシーとするかは主観による部分も大きいですが、誰もが「これ意味あるの？」「もっといい方法ないの？」と思いつつ、なんとなく続けられている規則もあるでしょう。

そういったレガシーをどうやってカイゼンしていくか、という話になります。

## どんなレガシーがあるか

イメージをもっていただきやすいように、実際に過去に遭遇し、自分または周囲の人がカイゼンを試みたレガシーな社内メソッドを挙げてみます。

* 社内のコミュニケーションツールがDMのみのメッセンジャーしかなく、雑談や、地理的に離れたオフィス間でコミュニケーションが生まれない
    * ⇒slackを導入し、雑談のためのチャンネルを設けた
* プロジェクトで得られた知見、開発のノウハウを共有できるツールがなく、社内のメーリングリストに時々放流されるが、すぐに流れてしまってリファレンス性がない
    * ⇒社内Wiki・ブログを導入し、更新がチャットに通知されるようにした
* 勤務表を手書きで管理しており、冗長の承認も目視での確認とハンコ
    * ⇒スプレッドシートとGASベースで入力・時間計算を自動化した
* メール添付しか社外とファイル共有する手段がなく、パスワードのメールを別送していた
    * ⇒ファイル共有ストレージを採用

## カイゼンのためのいくつかのやり方

具体的にどういう方法でカイゼンしていくことができるか、思いつくものを過去の経験まじえいくつか挙げてみます。

### ただ始める

組織に残るレガシーなメソッドの多くは、ただ「誰も変える人がいないから」というだけの理由で残っていることが多々あります。

そういったものは、変えたいと思った人がただ「変えます」と言って変えてしまえば、案外誰の反対もなく変えることができてしまうものです。

心配なら「うまくいくかわからないですが、とりあえずやってみたい」くらいの表現で承認を得ましょう。
ダメだったやめるだけで、何も失うものがありません。

### メリット・制約を整理し、承認を得る

導入に経費やコンプライアンス上の許可が必要なものについては、気軽に「変えます」で始めることができないものもあるでしょう。

その場合の王道は、以下を整理して提示し、承認を得ることです。

* 従来のやり方の不便・問題点
* 新しいやり方で何が解決されるか
* 今までできていて、できなくなることはあるか
* 新しい方法の効果を検証できるか（どうやって検証するか）

しかし、なかなかここまで準備して取り組もうとすると腰が重くなるもので、それこそがレガシーの残っている理由だったりするものです。

特にメリット・デメリットの調査や検証に時間がかかりそうなものの場合、仕事の隙間時間をつかって奉仕精神でやろうとすると精神衛生上もよくないので、まずは「効果が見込めるかも？」という時点で、その調査・検証自体を仕事として取り組む時間をもらうという手もあります。

### 勝手にはじめる

一定期間内・プロジェクト内など、小さい単位で導入できるものについては、新しい期間・プロジェクトがスタートするタイミングで、勝手に導入してしまう、という手もあります。

特に自分や自分のチームだけで始められるような性質のものであれば、まず小さい範囲で勝手に導入し、これまでと全く同じ（または改良された）アウトプットを出してみせてから、実は今回はこういう方法をとりました、という形で共有すると、受け入れられやすかったりします。

### 並行して始める

今までのやり方を続けたまま、それと並行して始めてしまう、という方法がとれる場合もあります。

これまでのやり方を捨てたわけでないので、誰にも文句は言われないはずです。
他の人も巻き込むとなると、手間に抵抗を感じる人がいると思いますが、まずは希望者のみ使ってみてください、という形でも良いと思います。

しばらくは二重に手間が生じることになりますが、ある程度運用の実績ができたタイミングで、レガシーの廃止を提案します。

## 注意点とTips

### レガシーに敬意を払うこと

レガシーコードに対する姿勢と同じことだと思いますが、一番やってはいけないことは「なんでこんな無駄なことをやってるですか」のように、**レガシーなメソッドを全否定すること** です。

たいていは、歴史的経緯があってそうなっているものです。
今はレガシーでも、当時は多くの問題を解決した手法かもしれません。

先人に敬意を払う姿勢を忘れないことが、導入の受け入れられやすさにもつながります。

### 機が熟したことを理由にする

前項と繋がる話ですが、「もっといい方法がある」と言われると、もともと従来の方法を導入した人にとっては気分のいいものではありません。
それが権限のある人だと、承認をしぶる気持ちも生まれるものです。

新しい方法を導入する「機が熟した」ことを理由にすると、誰も傷つけることなく生産的な話につなげることができます。

「以前はクラウドサービスの信頼性が高くありませんでしたが、今では十分な実績があるので…」
「これまでは人が少なかったので大丈夫でしたが、社員も増えてきたので…」
といった言い方を使えると良いと思います。

### 最初はなにがなんでも成功させる

これまでより良い方法ですと提案して導入して、最初の成果がいまいちだと、期待したわりには……という感じで、新しい方法の評価が下がります。

特に現状維持バイアスにより、人は方法が変わること自体を嫌うため、これまでと変わらないくらいの成果だと「今までのほうがよかった」という印象になりかねません。

導入したら、特に最初の1回は、なにがなんでも成功させる気合いで運用するのが良いと思います。

### 一度始めたら、目につくようにする

新しい方法を導入して満足してしまうと、業務上必須な類のものでないかぎり、定着せずにすぐ捨てられてしまうことが往々にしてあります。

導入したあとは、忘れられてしまわないよう、人の目につくところにそれを配置しましょう。
自分が率先して利用するのはもちろんのことです。

## 以上

レガシーなメソッドは、それが解決できなかった課題も含めて、新たな方法に価値付けしてくれる「資産」であるといえます。

故きを温ねつつ、カイゼンを続けていきましょう。
【Windows】Pythonで「findfont: Font family 'IPAexGothic' not found.」が表示された際の対処法

# 事象
pythonで`matplotlib`を使用してグラフを表示しようとしたら以下のメッセージが出力された
```
findfont: Font family 'IPAexGothic' not found.
```

# 環境

| 項目 | 情報 |
| ---- | ---- |
| OS | Windows 10 |
| Python | 3.9.13 |
| matplotlib | 3.6.2 |

# 原因
IPAexゴシックがインストールされていない

# 対処方法
以下3つの手順を実施
## 1. フォントのダウンロード
フォントを以下サイトからダウンロード

https://moji.or.jp/ipafont/ipaex00401/

IPAexゴシックが入っているzipファイルをダウンロードしてください。

## 2. フォントのインストール
ダウンロードしたzipファイルを解凍して、「ipaexg.ttf」ファイルをダブルクリックして、インストールボタンをクリック

↓こんな画面が表示されるはず
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479797/1deb6f11-9ce2-456c-d296-60e702ae7168.png)

## 3. キャッシュファイルの削除
ユーザフォルダ配下の「.matplotlib」フォルダを空にします。
これをやらないと、新しくインストールしたフォントが読み込まれません。
hash(基礎)keysとvalues

![スクリーンショット 2022-11-23 15.51.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/2a4b04b6-c333-4395-7c2e-b79cf26bdad4.png)
hashとは、複数のデータを管理する事ができ、
データをバリュー。名前をキーと呼ぶ。

ハッシュの宣言
![スクリーンショット 2022-11-23 15.46.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/42a0492f-e946-321d-0b54-5667be8a0b9c.png)

問題
以下のように出力したい時はどのようにハッシュを設定すれが良いか。
![スクリーンショット 2022-11-23 15.49.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/9df8ccea-8a1d-eef0-515a-4fc7103e21b4.png)![スクリーンショット 2022-11-23 15.50.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/9af3cc2d-39d0-b7c1-cb52-e099078eeac5.png)

解答↓




![スクリーンショット 2022-11-23 15.51.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/2be574ae-c2a6-a07d-0e5b-3cd978d1c509.png)
docker実行コマンドメモ

## 実行環境
sw_vers: 
ProductName:		macOS
ProductVersion:		13.0.1
BuildVersion:		22A400

docker --version: 
Docker version 20.10.21, build baeda1f
##
```bash
#　dockerをインストールする
brew install --cask docker

#　imageを探す
docker search centos

#　プールする
docker pull centos

#　imageを確認する
docker image ls

#　imageから起動する（imageID）
#　control + P + Q で containerから退出
docker run -it e6a0117ec169 bash

#　全ての　container を確認
docker container ls -a

#　container を停止する(containerID)
docker stop 61b3063ed1c7

# 既存　container を再開する(containerID)
docker start 61b3063ed1c7

#　container の中に入る(containerID)
docker exec -it 61b3063ed1c7 bash 

#　container　削除する(containerID)
docker container rm 61b3063ed1c7

#　image 削除する(imageID)
docker image rm e6a0117ec169 
```
#### 参考記事
https://dev.to/andre347/how-to-easily-create-a-postgres-database-in-docker-4moj
【環境構築】DockerでNode.js環境を構築する

# はじめに
DockerでNode.js環境を構築します。

Node.JSが動くのみで、パッケージなど何もインストールしていないまっさらな状態を構築します。

## 前提
ローカルPCにDockerがインストールされていることを前提とします。

まだインストールしていない方は[こちら](https://www.docker.com/products/docker-desktop/)からインストールしてください。

ちなみに筆者のDockerバージョンは20.10です。

## 手順

まずは作業ディレクトリと`Dockerfile`と`docker-compose.yml`の作成です。

``` bash
mkdir docker-node
cd docker-node
touch Dockerfile
touch docker-compose.yml
```

次にDockerfileは下記のようの記述してください。

``` Dockerfile
FROM node:18.7-alpine
WORKDIR /app
```

違うNodeバージョンにしたい場合は[DockerHub](https://hub.docker.com/_/node/tags)からサポートされているバージョンを指定してください。

docker-compose.ymlは下記のように記述してください。

``` docker-compose.yml
version: '3.8'
services:
  app:
    container_name: app
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    tty: true
    volumes:
      - type: bind
        source: .
        target: /app
```

コンテナ名は`app`とし、ルートディレクトリをマウントします。

記述したらコンテナを立ち上げましょう。

``` bash
docker compose up --build
```

ターミナルを占有したくない場合は下記のコマンドでコンテナを立ち上げてください。

``` bash
docker compose up -d --build
```

コンテナが立ち上がったら下記のコマンドでコンテナの中に入れます。

``` bash
docker exec -it app /bin/sh
```

`app`はdocker-compose.ymlで設定したサービス名です。

コンテナの中に入れたらNodeが使えるので、`npx`コマンドを使ってNextJSやNestJSなどのアプリケーションを作成できます。

以上です。
ImageJでマルチポイント周辺の画像を保存したい

# プラグイン名
Collect_Multi_Images

# 仕様
* ImageJで開いた画像スタックの各フレームにマルチポイントを追加すると、マルチポイント周辺の画像（入力で指定された大きさ）を指定されたパスのディレクトリに保存する。

# 入力
* ディレクトリパス
* 画像サイズ

# 出力
* TIF画像ファイル

# コード
```Collect_Multi_Images.java
import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.*;
import ij.plugin.frame.*;


public class Collect_Multi_Images implements PlugIn {

	public void run(String arg) {

        GenericDialog gd = new GenericDialog("Input");
        gd.addDirectoryField("Output Directory: ", arg);
        gd.addNumericField("Size: ", 9);
        gd.showDialog();
        String dir = gd.getNextString();
        int size = (int)gd.getNextNumber();

        ImagePlus imp = IJ.getImage();
        Roi roi = imp.getRoi();
        FloatPolygon p = roi.getFloatPolygon();
        PointRoi pointRoi = (PointRoi)roi;
        for (int i = 0; i < p.npoints; i++) {
            int position = 0;
            position = pointRoi.getPointPosition(i);
            int xc = (int)Math.round(p.xpoints[i]);
            int yc = (int)Math.round(p.ypoints[i]);

            imp.setSlice(position);

            int x0 = xc - (int)(size / 2);
            int y0 = yc - (int)(size / 2);

            Roi rectangleRoi = new Roi(x0, y0, size, size);
            Roi[] rois = {rectangleRoi};
            imp.cropAndSave(rois, dir, "tif");
        }
	}
}
```

# ポイント
## Dialogの表示方法と値の取得方法
下記のように記述する。GenericDialogクラスの仕様は[こちら](https://imagej.nih.gov/ij/developer/api/ij/ij/gui/GenericDialog.html)。
```java
GenericDialog gd = new GenericDialog("Input");
gd.addDirectoryField("Output directory", arg);
gd.showDialog();
gd.getNextString();
```

## Multi-pointで選択した地点のスライス番号（position）とX, Y座標（x, y）の取得方法
下記のように記述する。
```java
ImagePlus imp = IJ.getImage();
Roi roi = imp.getRoi();
FloatPolygon p = roi.getFloatPolygon();
PointRoi pointRoi = (PointRoi)roi;
for (int i = 0; i < p.npoints; i++) {
    int position = 0;
    position = pointRoi.getPointPosition(i);
    int x = (int)Math.round(p.xpoints[i]);
    int y = (int)Math.round(p.ypoints[i]);
    IJ.log("Position, X, Y: " + position + ", " + x + ", " + y);
}
```

## ROIの画像を保存する方法
```java
Roi rectangleRoi = new Roi(x0, y0, size, size);
Roi[] rois = {rectangleRoi};
imp.cropAndSave(rois, dir, "tif");
```
結局プログラミング上達しないって人に向けた記事（勉強法｜初心者向け）

初投稿。

現在Javascriptを中心に勉強中の学生です。

学習から少々時が経ち、だんだん勉強の進め方が分かってきたので共有していこうと思います。

## 初心者が引っかかるトラップ

1か月前、さっそく「Javascript　おすすめ勉強法」と調べると、いろんな方が勉強法の発信をしているわけですが、どれも似たようなものばかり。「おすすめ本5選！」、「progateから始めるべき理由」、「フロントエンドエンジニア学習ロードマップ」などなど・・・。
アフィリエイト収入を得るためなのか、「とりあえず紹介しまくっとけ！」みたいなものも沢山ありました。

色々紹介されており困ったものの、とりあえず自分の性分に合った勉強法から始めようと思い、本での学習を選びました。するとビックリ。

とんでもなく分かりにくい。というか、そもそもサンプルコードが動かん・・・。ネットで調べながら読み解いていくも、そもそもバージョンが古いと分かりました・・・。ネットで紹介されていたクソ高い技術書を買ったはいいものの、内容も初学者向きではなく、結局無駄に(笑)

いやはや困りました。
理論などの深い知識を学ぶ分には本が最適な気がしますが、コーディングを学ぶ上では本はダメだなと感じました。

## おすすめの学習教材
### ドットインストール
次に試したのはドットインストール。
これは基礎をザっと勉強するのに役立ちました。
Progateではなくこちらを選んだ理由は、vscodeでコードを書きながら勉強する実践的な方式だったからです。

### Udemy
同時並行でUdemyの**Web Developer Bootcamp2021**という講座に取り組みました。
こちらの講座はフロントエンド～バックエンドまで、基礎的な技術を一貫して学習するというかなりハードもので、WEBについて幅広く知識をつけることができそうなので始めました。（現在進行形で学習中）

### アプリ
そして、隙間時間にちょこちょこ見てるのが**JavaScript暗記カード**というiphoneアプリ。
JavaScriptでよく使われるメソッドが暗記カード形式で勉強できるというものです。ただ、細かいメソッドを覚える気はないので、こんなものもあるんだな～程度に見ている感じです。ざっくりとした説明すぎるのが難点ですが、逆に調べたくなるので、そこで知識が深まるのでおすすめです。

### ネット記事、YouTube
ここまで教材について色々共有してきましたが、正直、学習に一番役立っているのはネットの記事やYouTubeですね。
もちろん上記の３つを主軸に勉強しているわけですが、たびたび理解に苦しむときがあります。
例えば、「オブジェクト指向って何？」、「引数と戻り値って何？」、「関数とメソッドの違いは？」、「クラス、インスタンス、オブジェクトの違いは何なんだ～！！」などなど、次々と分からんことがでてくるわけですが、そこで役立ったのはQiitaの記事はもちろん、ネットコンテンツの数々です・・・。本当に助かる。これがないと生きていけません。


**まとめると、自分は以下の４つで勉強するのがベストだと感じています。
・ドットインストール
・Udemy
・アプリ（隙間時間用）
・記事やYouTube（調べもの用）**

インプットするだけでは一向にコーディングできるようにならないと感じたため、学んだことを活かしアウトプットしまくるのが一番だと思います。あくまで上記の４つはインプットをするためのもので、アウトプットの時間は別に取らなければ上達しないと思います。
自分の場合はポートフォリオ作成が目標なので、講座で学んだものを自分の成果物に落とし込んでいくにはどうしたらいいかを考えながら進めています。

## リアルに結果が出た学習方法

よくプログラミングは暗記じゃないとか言われますが、個人的には基礎的なレベルの文法は死ぬほど書いて体で覚えてしまうくらいがちょうどいいと思います。最初の方は暗記せずにやっていたのですが、基礎的なことを理解していないと、分からないことすら分からずに調べることもできないのでかなり困ります。

では具体的に何を覚えればいいのか？ってなりますよね。
自分もビギナーなので、この方法で正しいのかまだ確信は持てませんが・・・
まずは講座で学ぶレベルの文法やメソッドなどを、自分なりにいじりながら体で覚える。特にループ処理や関数など、頭では理解していても実際に書きたい処理が書けないといった問題が発生する箇所を中心に練習するべきだと思います。
ゲームのチュートリアルみたいなもので、基本的なルールが身についていないとゲームをプレイができないのと同じです。
ただ、メソッドなどの細かい知識は暗記せず、実現したい処理があったらその都度調べていくのがベストだと考えます。

ここから先はまだ少ししか手をつけていないところなのですが・・・
基礎学習の次に、WEBアプリやポートフォリオサイトなどの成果物を１つでも作ってみて、そこに色々と機能を追加していくと実践的な勉強になるんじゃないでしょうか。自分はこの流れで進めるつもりです。巷ではたくさん成果物を作る主義の方がいるそうですが、全て理解して作れるのならいいものの、初心者のうちにそこまで手が回るでしょうか・・・？自分は多くて３つだと思います。その分、中身を濃くし、深く理解するイメージです。

## 必ずぶち当たる壁の乗り越え方

最後に、プログラミング学習のコツについて共有します。
正確には、どういった心構えで学習するといいのかについてです。

基礎的な学習を終え、実際に自分で１からものを作ろうとすると、まじで意味わからんすぎて混乱します。
これまでの人生でここまで理解に苦しむ未知のものに出会ったことがなかったのでビックリしました（現在進行形で苦戦中）
何ならエラーしか出ないし、ググっても理解できないという地獄が待ってます。
「いままで学んできたことって意味あったんか？おれセンス無いなー」と感じます。
ただ、そんな地獄のようなゴールが見えない中でも、もがきながら少しずつ前に進んでいくことで、段々分かることが増えていきます。たくさんエラーに対処する過程で色々なことを調べ、学ぶので、徐々にプログラミングの世界のルールが見えてくる感覚があります。
要するに、諦めずに１歩１歩成長していきましょうということです。

プログラミング学習を始めてから、ベテランエンジニアの方々に対するリスペクトが芽生えました。
彼らは言語も文化もわからない異国の刑務所にぶちこまれ（プログラミングの世界）、日々いじめられながらも（エラーの数々）、徐々に刑務所のルールを覚え、言葉を覚え、生き残る術を身につけた猛者たちなのだと感じました(笑)

今回は自分に向けた記事でもあったのですが、自分と同じ初心者さんが少しでも参考になれば嬉しいです。
今後も学習の中で得た気づきを言語化していく予定です。
Gitの基礎知識４

## Conflict
branch間の相容れない変更によってconflictが生じます。
↓ Githubだとこんな感じです。
![スクリーンショット 2022-11-23 14.07.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849988/53a233ae-6f38-9e60-4a56-117bfa9ecbfd.png)

#### 解消法(ローカルリポジトリで修正する)
※masterブランチとconflictを起こしているものとして進めます。

1. まずは落ち着きましょう。初めて遭遇した時はちょっとびっくりして汗をかくと思うので、汗を拭きましょう。

1. masterブランチに移動して、masterブランチを最新の状態にします。```git pull origin master```
   ↑ conflictが起きているリモートブランチと同じ状態を作るため
1. 作業ブランチに移動して、```git rebase master```
   => ローカルリポジトリで同様のコンフリクトが起こります。
1. conflictを解消できる状況になるので、解消します(いらないところは消して、必要なところは残す)。
1. 解消したら```git add .```して```git rebase --continue```します。
   https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---continue


1. 完了したら、pushします。(この場合、force pushする必要があります。)

## rebase後のpush
コミットをまとめた後など、rebase後にpushをする際にはforce pushをする必要があります。
普通にpushをしようとすると下記のようなエラーがでます。
```terminal
     ! [rejected]        develop -> develop (non-fast-forward)
    error: failed to push some refs to 'https://github.com/url'
    hint: Updates were rejected because the tip of your current branch is behind
    hint: its remote counterpart. Integrate the remote changes (e.g.
    hint: 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```
エラー文に書いてあるように、原因は```non-fast-forward```だからです。

pushは```fast forward```を前提としています。
つまり、プルリクエストの最後のコミットハッシュが親コミットになるようなコミットハッシュしかpushすることができないということです。

ただ、force pushは割と危険なので気をつけて使いましょう。

## 参考にしたサイト
https://qiita.com/vsanna/items/451b42f886c599a16a55

https://qiita.com/hitochan777/items/ea08df354b42be57e5fc

## 終わりに
gitは「習うより慣れよ」だと思います。
練習用のリポジトリを作って、繰り返し練習しましょう！！
[macOS]Mathmaticaを手軽に利用する

<p>Mathmaticaを手軽に無料で利用する方法は、2つあるようだ。一つは、Wolfram Cloudの無料アクセス。もう一つは、Wolfram Engine。それぞれの利用方法を説明する。</p>

### Wolfram Cloud
<p>Wolfram Cloudの利用を開始する。</p>
<ol>
<li>Wolfram Cloudの登録ページを開く。<br />
<a href="https://www.wolframcloud.com/?=undefined">Wolfram Cloud</a></li>
<li>"Sign up for free"を選ぶ。</li>
<li>Wolfram IDを作成する。</li>
<li>Wolfram Cloudのトップ・ページで"New Notebook"を選ぶ。</li>
<li>登録したメールアドレス宛に確認メールが届くので、承認する。</li>
</ol>

<p>ノートブックで、命令を入力して、Shift+Enterで実行する。</p>

<pre><code>In[1]:= 5 + 7
Out[1]= 12
</code></pre>

![mathmatica.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12540/b5f1bbde-af24-68a0-641b-62bcefb5a5a1.png)

### Wolfram Engine
<p>Wolfram Engineの利用を開始する。</p>
<ol>
<li>Wolfram Engineのダウンロード・ページを開く。<br />
<a href="https://www.wolfram.com/engine/">Wolfram Engine</a></li>
<li>ダウンロードしてインストールする。</li>
</ol>

<p>Wolfram ScriptアイコンをダブルクリックするとTerminal.appが開くので、命令を入力してEnterで実行する。</p>

<pre><code>Wolfram Language 13.1.0 Engine for Mac OS X x86 (64-bit)
Copyright 1988-2022 Wolfram Research, Inc.
 
In[1]:= 5 + 7
 
Out[1]= 12
 
In[2]:=
</code></pre>

<p>Wolfram Scriptは、ターミナルでwolframscriptコマンドを実行しても利用できる。</p>

<p>また、スクリプト・ファイルを作成して実行することもできる。</p>

<pre><code>$ cat demo.wls 
#!/usr/bin/env wolframscript
Print[5 + 7]
$ chmod +x demo.wls
$ ./demo.wls
12
</code></pre>

<p>ただし、ターミナルでWolfram Scriptを実行する方法では、グラフ表示はできない。</p>

ソースコード
GitHubからどうぞ。<br />
<a href="https://github.com/murakami/workbook/blob/master/mathematica/demo.wls">https://github.com/murakami/workbook/blob/master/mathematica/demo.wls</a> - GitHub<br />

### 【関連情報】
<a href="https://www.wolframcloud.com/?=undefined">Wolfram Cloud</a>
<a href="https://www.wolfram.com/engine/">Wolfram Engine</a>
<a href="https://reference.wolfram.com/language/ref/program/wolframscript.html">WolframScript</a>
<a href="https://cocoa-kanto.connpass.com/">Cocoa.swift</a>
<a href="https://www.facebook.com/groups/cocoa.kanto/">Cocoa勉強会 関東</a><
<a href="http://www.bitz.co.jp/weblog/">Cocoa練習帳</a>
Django+Flower+Celeryを導入する / Djangoの外側からCeleryを呼び出す

## Celeryとは
- 非同期のタスクキューです。Rubyだと`ActiveJob`、`Sidekiq`、`Delayed_job`に相当します。ざっくり言うと非同期でアプリケーションを動かすためのフレームワークです。

## DjangoにCeleryを導入する

#### パッケージを追加
```
celery
flower                 # Celeryのダッシュボード
django-celery-results  # タスクの状況を見れる
django-redis           # タスクのキューをredisにする場合
cached-property 
```

#### `/config/celery.py`
```py
import os
from celery import Celery


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xxxxxx') # Django側の設定と同じにする

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY') # Celeryの設定ファイルの場所
app.autodiscover_tasks()
``` 

#### `config/__init__.py`
- このファイルはceleryを起動するときに利用します。
```py
from .celery import app as celery_app

__all__ = ('celery_app',)
```

#### `config/settings.py`
```py
DJANGO_APPS = [
    # 〜〜〜
    'django_celery_results',
]
CELERY_BROKER_URL = 'redis://redis:6379/0'
CELERY_TIMEZONE = 'Asia/Tokyo'
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_TASK_TRACK_STARTED = True
CELERY_IMPORTS = ['worker.sample_task']  # タスクの場所
```

#### `worker/sample_task.py`
```py
from celery import shared_task


@shared_task(name='sample_task_execute')   # 外部から呼び出ししたい場合は、nameをつける
def execute(something: str):
    print(f'============= something={something} =============')
```

#### app/views/sample_view.py タスク呼び出しもと
```py
from worker.sample_task import execute

execute.delay('hogefuga') # メソッド名にdelayをつけて呼び出す
```

## Celeryを起動する。
- CeleryはDjangoとは別に起動する必要があります。

```bash
# config/__init__.pyで定義したので、 -A config.celeryではなく、-A configと出来る
celery -A config worker -l INFO 
```

### Flowerを起動したい場合

```bash
celery -A config flower --address=0.0.0.0 --port=5555
```

## Djangoの外側からCeleryを呼び出したい場合
- `send_task`を使うことにより外部から呼び出せる

```py
from celery import Celery

celery = Celery('webapi')
celery.conf.broker_url = 'redis://redis:6379/0'
celery.send_task('sample_task_execute', kwargs={'something': 'Hallo World'})
```

※ DBと接続できるなら、`celery.conf.result_backend`を利用して結果をDBに保存できる
Leetcode 279. Perfect Squares

# 279. Perfect Squares

https://leetcode.com/problems/perfect-squares/

## アプローチ 1
### DP

```java
package com.leetcode.midium;

import java.util.Arrays;

public class PerfectSquares279 {
    public static void main(String[] args) {

    }

    public static int numSquares(int n) {
        int[] dp = new int[n + 1];
        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[0] = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j * j <= i; j++) {
                dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
            }
        }
        return dp[n];
    }
}

```


## アプローチ 2
### BFS

```java
class Solution {
    public int numSquares(int n) {
        Queue<Integer> queue = new LinkedList<Integer>();
        Set<Integer> alreadyAddedSquareNumbers = new HashSet<Integer>();
        int level = 0;
        queue.add(0);
        
        while(!queue.isEmpty()){
            level++;
            int previousLevel = queue.size();
            for(int index = 0; index < previousLevel; index++){
                int base = queue.poll();
                
                for(int square = 1; square * square <= n - base; square++){
                    int sumOfSquares = base + square * square;
                    if(alreadyAddedSquareNumbers.contains(base + square * square) || sumOfSquares > n){
                        continue;
                    }
                    if(sumOfSquares == n) {
                        return level;
                    } else {
                        queue.add(sumOfSquares);
                        alreadyAddedSquareNumbers.add(sumOfSquares);
                    }
                }
            }
        }
        return -1;
    }
}
```
MetPyの単位変換　その２

# はじめに
[前回](https://qiita.com/kasugab3621/items/69c66fae3623d7f081ba)，MetPyでは計算中の単位変換を”よろしく”やってくれる，と説明したが，正しくは，
「足し算」はよろしくやってくれるみたいだが
「掛け算」は注意が必要
なようなので，簡単にまとめる

# metpy.constants
気体定数をデモ的に利用する．ありがたいことに，MetPyには気象にまつわる定数が用意されている．


```python3
from metpy.units import units
import metpy.constants as mC  # mCは個人的なネーミングです

Rd = mC.dry_air_gas_constant  # 乾燥空気の気体定数
Rv = mC.water_gas_constant  # 水蒸気の気体定数
```

Rd,Rvどちらも同じ単位と思いきや，
```python3
Rd
287.04749097718457 <Unit('joule / kelvin / kilogram')>

Rv
0.46152311572606086 <Unit('joule / gram / kelvin')>
```

kilogramとgram，微妙に単位が異なる（！）
ひとまずkilogramに揃えたRvを用意する(`Rv_kg`)

```python3
Rv_g = Rv  # gramのRvも残しておく
Rv_kg = Rv.to('joule / kelvin / kilogram')

Rv_kg
461.52311572606084 <Unit('joule / kelvin / kilogram')>
```

# 足し算
```python3
#
Rd + Rv_g
748.5706067032454 <Unit('joule / kelvin / kilogram')>

Rd + Rv_kg
748.5706067032454 <Unit('joule / kelvin / kilogram')>

Rv_g + Rd
0.7485706067032454 <Unit('joule / gram / kelvin')>
```


足し算の場合，先に書いた変数の単位に揃えられる．（気温の場合，[引き算がややこしくなる](https://unidata.github.io/MetPy/latest/tutorials/unit_tutorial.html#temperature)が，割愛）

# 掛け算，割り算

```python3
Rd * Rv_kg
132479.05239713856 <Unit('joule ** 2 / kelvin ** 2 / kilogram ** 2')>

Rd * Rv_g
132.47905239713856 <Unit('joule ** 2 / gram / kelvin ** 2 / kilogram')>
```

一方，掛け算の際は単位の変換は行われず，kilogramとgramが共存した状態で返ってくる．勝手にやってくれるものと思っていたので少し残念．多分何か理由があるのだと思うが．  
Tutorialにある，[.to_base_units()](https://unidata.github.io/MetPy/latest/tutorials/unit_tutorial.html#converting-units)を使ってみる．

```python3
(Rd * Rv_g).to_base_units()
132479.05239713856 <Unit('meter ** 4 / kelvin ** 2 / second ** 4')>

(Rd * Rv_kg).to_base_units()
132479.05239713856 <Unit('meter ** 4 / kelvin ** 2 / second ** 4')>
```

めでたく同じ単位へ辿り着いた．掛け算や割り算の多い数式を組むときに重宝しそう
[OutSystems]CSRF Tokenの動作を確認してみる

CSRF防止トークンを原因とした謎の挙動に悩まされるので、OutSystemsのCSRF防止トークンについて整理し、動作を確認してみる。

# 環境
Personal Environment(Version 11.17.0 (Build 36291))
Service Studio(Version 11.53.25)

# ドキュメント
[認証Cookieを検証する](https://success.outsystems.com/ja-jp/Documentation/11/Managing_the_Applications_Lifecycle/Secure_the_Applications/Configure_App_Authentication#cookie-1)

を参照すると、以下の流れで自動でチェックが行われる。

nr2\<User Provider名\>というCookieからCSRF Tokenを抽出して、サーバーへのリクエストのヘッダに「x-csrftoken」として設定する。
サーバー側ではこのx-csrftokenを検証し、問題があると未認証として扱う。

# nr2\<User Provider名\> Cookieについて
上記ドキュメントによると、このCookieは以下の通り、ログインユーザーに紐づく情報を持つ。

> ビルトイン関数であるGetUserIdを使用し、ユーザー識別子についての情報をアプリケーションコードに提供します。

## Cookieの値を確認してみる
Chromeの開発者ツールを使って値を確認してみると、nr2<UserProvider> Cookieには、以下の値をURLエンコードしたものが入っているようだ。なお、Chromeの開発者ツールでは、CookieはApplicationタブ > (左側のメニュー)Storage > Cookies を開くと確認できる。

crf=CSRF防止トークン;uid=User Identifier;unm=Username

なお、nr2<UserProvider> Cookieはログアウトしても存在し、uid=0、unm=空文字列になる。

## 変更タイミング
動作確認してみると、ログアウト・ログインしたとき、つまりドキュメントの通りUser Identifierが変わったときに同時に変わっている。

（ログアウト・ログインのリクエストのレスポンスでSet Cookieが返ってきている）

# どのリクエストのヘッダにx-csrftokenが渡されるのか
確認は、同じくChromeの開発者ツールを使った。Networkタブを開き、該当のリクエストを選択すると、Headersタブの最下部に表示される。また、対象アプリケーションはReactive Web App。

結果を見ると、POSTで行われるリクエストにはx-csrftokenが付与されるように見える（ただし、WS_ECT.asmxへのリクエストには付与されなかった）。

| リクエストの種類 | x-csrftokenは渡される？ |
|:-:|:-:|
| Server Action[^1] | ○  |
| Data Action  | ○  |
| Screen Aggregate | ○  |
| Screen[^2]  | ×  |
| CSSやJavaScriptなどのリソース  | ×  |

[^1]:Screen Actionから呼んだ場合
[^2]:画面遷移等でScreenを開いた場合の画面自体へのリクエスト

# x-csrftokenが正しくないと何がおきるのか？
## テスト方法
1. ログインを必要とする画面を開いておく
1. Chromeの開発者ツールでnr2\<User Provider名\> CookieのCSRF防止トークン部分を書き換え
1. Server Actionを呼び出すButtonをクリック

## 結果
Server Actionのレスポンスでnr2\<User Provider名\> CookieのSet Cookieが戻ってきて（User Identifier=0、つまり未ログイン）未ログイン状態になる。
LabVIEWからPythonへ

### LabVIEWからPythonへ

LabVIEWが買取型からサブスクリプション型へ変更されるようです。この変更は今の時世の流れですが、その利用費用が問題のようです。

[LabVIEWライセンスのサブスク化に反対します](https://forums.ni.com/t5/NI%E8%A3%BD%E5%93%81%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3/LabVIEW%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E5%8C%96%E3%81%AB%E5%8F%8D%E5%AF%BE%E3%81%97%E3%81%BE%E3%81%99/td-p/4221468)


### Pythonで計測制御

これまで作ったPythonプログラムや参考にしているサイトを記載します。


### 機器とのやり取り

| 通信方式  | モジュール | 参考                                                         |
| --------- | ---------- | ------------------------------------------------------------ |
| Serial    | pyserial   | [PyserialでのBinary送受信](https://qiita.com/Gyutan/items/150c9fac57f7380a1763)、 [TWE-Lite シリアル通信アプリ Byteモードの設定（Pythonで送信）](https://qiita.com/Gyutan/items/78b85917d8d13c2461e7) |
| GPIB      | pyVISA     | [GPIB、PyVISAで完全自動測定](https://qiita.com/go_yu_/items/2c03b7c2570628059b18)、[Pythonを用いた計測器制御 pyvisa](https://qiita.com/Yuziii/items/8e0437b33555647b0fc4)、[pythonで計測器を制御する方法 (pyvisa)](https://www.useful-python.com/env-pyvisa-anaconda/) |
| NI-DAQ    | NI-DAQmx   | [PythonでNI-DAQの利用](https://qiita.com/Gyutan/items/1d0caa638c01a52c289d) |
| USBカメラ | OpenCV     | [複数カメラのカメラポート番号の確認](https://qiita.com/Gyutan/items/79b26bc8e97ee365c6c8) |


Pyserialはバイト型を扱うので、送受信の文字列のエンコード・デコードが必要です。


#### その他（例えば）

[ThorlabsのラボジャッキMLJ150/MをPythonで制御](https://github.com/SGyutan/Thorlabs_ML150M)

[Princeton Instruments SP-2150i Serial Control](https://github.com/SGyutan/Princeton_SP-2150i)

[Python module for Ocean Optics spectrometersのインストール方法](https://qiita.com/Gyutan/items/d792bb36f5a862836d63)

[ARGOの産業用UVCカメラ（Imaging Source Camera）のインストールと動作テスト](https://github.com/SGyutan/ImagingSourceCamera)

  

### GUI

pysimplegui（TKやQTなどよりも学習コストが低い）を利用
	
- [OceanOptics分光器のWindows用反射測定GUI](https://github.com/SGyutan/OceanGUI)

- [PySimpleGUIでの時刻表示（timeoutの使い方）](https://qiita.com/Gyutan/items/2c61159a19073b19012b)

-  [PySimpleGUIとmultithreadを使った例](https://qiita.com/Gyutan/items/f41f39bc3df7d788ffc5)
	
-  [PysimpleGUIで3つの方法でmatplotlibのグラフ表示](https://qiita.com/Gyutan/items/e753700011439057156f)
Unity×hololensでGameAssembly.lib nothingのエラーが出てしまう

# Hololensでビルドしようと思ったが
GameAssembly.lib nothingというエラーが出る
# 解決策
実行していた環境が
- VisualStudio2022 17.4.1
- unity 2021.3.14f1 LTS版
であった。

→unityを2022.2.0b15 ベータ版をインストールすれば通った

なお、visualstudioの方を2019にするのでは解決できなかった
【jQuery】複数のプルダウンで自動計算処理

複数のプルダウンがあり、そのプルダウンで得点を選択すると合計得点を動的に表示する実装になります。

HTML
```html
<select class="score">
    <option value="0">0</option>
    <option value="10">10</option>
    <option value="20">20</option>
</select>

<select class="score">
    <option value="0">0</option>
    <option value="10">10</option>
    <option value="20">20</option>
</select>

<ul>
    <li>合計得点</li>
    <li　id="totalScore"></li>
    <li>点</li>
</ul>
```

jQueryの処理
```javascript
    function sumSelectedScore() {
        let totalScore = 0;
    
        $('.score').each(function () {
            totalScore += $('option:selected', this).val();
        })
    
        $('#totaScore').text(totalScore);
    }

    $('.score').on('change', function () {
        sumSelectedScore();
    });

    sumSelectedScore();
```

## 解説　HTML
複数のプルダウンがある場合は、class属性に同じクラス名を設定します。（ここではscoreというクラス名を設定）
動的に合計得点を表示するために、liにid属性を設定します。（ここではtotalScoreというid名を設定）



## 解説　jQuery
html側で複数のプルダウンの同じクラス属性名を設定したので、each関数を使用することで同じクラス属性名を持つプルダウンの値を取得し、合計値を算出します。
```javascript
    function sumSelectedScore() {
        let totalScore = 0;
    
        $('.score').each(function () {
            totalScore += $('option:selected', this).val();
        })
    
        $('#totaScore').text(totalScore);
    }
```

プルダウンで何かしらが選択されたら、上記で説明した sumSelectedScore() が呼ばれます。
```javascript
    $('.score').on('change', function () {
        sumSelectedScore();
    });
```
参考
[jQueryでthis option:selectedを取得する](https://qiita.com/kaneko_tomo/items/d60b28f9abea5c7799b7)
Gitの基礎知識３

## git rebase
#### commitをまとめたい場合(git rebase -i)
これはめちゃくちゃ使います。レビューをしてもらって直すところが全くない場合は使いませんが、僕の場合は1発でLGTMをもらうことはなかなかないので、ほぼ毎回使ってます。

プルリクエストによって達成された最終的な差分が分かればいいので、コミットを1つにまとめます。
逆に1つにまとめなかった場合、取り込んだ側のコミット履歴に複数のコミット履歴が追加されて可読性が落ちます。

```
    git rebase -i まとめたいコミットの中の1番古いコミットの1つ前のコミットハッシュ
```
上記のコマンドを実行するとvimが起動します。(↑ 1つ前というのは古いの意味です。)
※1つ前を指定するのは、rebaseでは新しい親コミット(base)を指定する必要があるからです。

初めて起動した時はびびると思うのでまずは呼吸を整えましょう。

https://qiita.com/one-a/items/a4e1d5a736d8408fd089

```terminal
    pick 13f9ef9 add wip1 // 古
    pick 091a96a add wip2
    pick cba0fda add wip3　　// 新
    
    # Rebase 436709c..cba0fda onto 436709c (3 commands)
    #
    # Commands:
    # p, pick <commit> = use commit
    # r, reword <commit> = use commit, but edit the commit message
    # e, edit <commit> = use commit, but stop for amending
    # s, squash <commit> = use commit, but meld into previous commit
    # f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
    #                    commit's log message, unless -C is used, in which case
    #                    keep only this commit's message; -c is same as -C but
```
1番古いものだけを```pick```にして他のコミットはsquashかfixupにします(fixupでコミットしている場合はfixup)。
fixupの場合はこれだけで終わりですが、squashの場合は以下のようなvimの画面が起動します。
```terminal
    # This is a combination of 2 commits.
    # This is the 1st commit message:
    
    aaa
    
    # This is the commit message #2:
    
    bbb
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # Date:      Wed Nov 23 01:09:40 2022 +0900
    #
    # interactive rebase in progress; onto 2c05697
    # Last commands done (2 commands done):
```
ここでは、1まとめになったコミットのコミットメッセージを入力できます。
```#```がついていないところの文言が採用されます。

#### 分岐元を変更する場合
こっちはconflictを解消するときぐらいしか使っていません。
rebaseすることによって、分岐元を変更することができます。

↓図を見るとわかりやすいです。
https://git-scm.com/docs/git-rebase#_description

## git merge
mergeをすることによって、別ブランチでの変更分を現在のブランチに取り込むことができます。
取り込む側(**ours**)にcheckoutしてから、取り込まれる側(**theirs**)の変更分を取り込みます。
```terminal
    git checkout ours
    git merge theirs
```
mergeをするとvimが起動し下記のような画面になります。
```terminal
Merge branch 'dev'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
~
~                                 
```
mergeをすることによって、新しいコミットハッシュが作られるのでそのコミットメッセージをここで入力します。
mergeによってできたコミットハッシュは親コミットを2つ持ちます。

## git stash
業務をしていく中で、同時に複数のissueに着手することが結構あると思います。
一旦この作業は(コミットせずに)退避しといて別issueやろうかななんて時にとても便利です。

最初にstashを教えてもらった時、感動しました。

こちらの記事を読めば大体わかります。

https://qiita.com/chihiro/items/f373873d5c2dfbd03250

新しく作成されたファイルなどはuntracked(gitから追跡されていない状態)なので、```git stash```だけでは退避されません。
untrackedなファイルも一緒に退避したい場合は```git stash -u```で退避することができます。
【C#】わかったようで分かっていない変数について

# 変数を使用するのに必ずすること
変数を使用する際には必ず、__変数の宣言__ または __初期化__ を行う必要がある。

# 構文
__変数の宣言__　　　<型名> <変数名>; 
__初期化の場合__　　<型名> <変数名> = <初期値>;

例）
```
配列の宣言
int[] numbers;

配列の宣言＋初期化(パターン１)
int[] numbers = {1,2,3,4,5};

配列の宣言＋初期化(パターン２)
int[] numbers2 = new int[5(何個の要素数か)];

　void Start()
{
//０番目の配列に１を入れる
  numbers2[0] =1
}
```


__代入演算子__
変数に値を代入することも可能
 <変数名> = <値>;

例) xかける２をしてxに代入する。(2つは同じ意味)
```
    x = x * 2;
    x *= 2
```



# 宣言する場所について
変数の宣言はクラスの内側、またはメソッドの内側で行う。
クラス→メンバ変数(クラス外で使用可能)
メゾット →そのメゾット内のみで使用可能


# 最後に
ざっくりと基礎をまとめたのでまた疑問が出てきたら調べて追記していきます。
Terminalから使うPowerShellとVS CodeのPowerShell Extensionのコンソールとで同じプロファイルを使いたい

# はじめに
最近ではPowerShellでいろんなことができるようになってきたのでよく使うのですが、PowerShell Script開発のお供であるVS CodeのPowerShell Extensionを使っていると、通常のPowerShellとはなんとなく違うPowerShellが出ているんですよね。  
この画像の"pwsh"というのが通常のPowerShellなのですが、その上の"PowerShell Extension"ってやつです。

![2022-11-23_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319289/f1889046-19e9-3bc2-b7c1-95f0e5841555.png)

別に詳しく調べたわけではないので正確なことは知らないのですが、ちょっと触った感じだと"pwsh"と見ているプロファイルが違ったので、今回はこの"PowerShell Extension"でも"pwsh"と同じプロファイルを参照するようにしようというお話です。

# 前提条件
- WindowsにプリインストールされているWindows PowerShellではなく、GitHubで開発されているPowerShell Coreを使っていること([GitHub - PowerShell/PowerShell: PowerShell for every system!](https://github.com/PowerShell/PowerShell))
- PowerShellを管理者権限で実行できること
- PowerShellのプロファイルが存在していること(`%USERPROFILE%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1`)

# 環境情報
私が使用している環境の情報です。
|項目|値|
|:--|:--|
|OS|Windows 11 Pro|
|Windows バージョン|21H2|
|PowerShell バージョン|7.3.0|

# 手順
① PowerShellを管理者として実行

② プロファイルのあるフォルダへ移動

```PowerShell
cd ($PROFILE | Split-Path)
```

③ 下記のコマンドを実行してVSCode用のPowerShellプロファイルにシンボリックリンクを張る
```PowerShell
New-Item -ItemType SymbolicLink -Path Microsoft.VSCode_profile.ps1 -Target $PROFILE
```

以上で完了です。