OmniAICreator/Qiita-1.07M huggingface dataset:
PetoiBittleをrasPI-3Aで動す(ROS編)

■犬型ロボット(PetoiBittle)にRaspbery Pi-3A で動かいしてみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/233e0c5a-edd9-4a15-c7c8-f3579094f8ed.png)
-
■Petoi Bittle 4足ロボットとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/737b5a39-5a8d-211c-28a2-fdfe36090bf4.png)
-
■追加部品
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/b5725666-1aef-ed43-5398-8e866e3e3fa1.png)
-
■取り合えず・・ロボットの組み立て
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/ed56a714-2091-a6aa-0a81-6ebf6f28ab18.png)
-
■ロボットの組み立て-2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/f69b1e06-e21e-1572-092b-8dac8c9cd232.png)
-
■ロボットの組み立て-３
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/bf9372ab-4f1d-bbb3-d5d3-c7cbbc0ba80c.png)
-
■ロボットの組み立て-４
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/b09231f4-c6ab-eaa7-f3ea-8b30f2218ede.png)
-
■ロボットの組み立て-５
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/b9219b61-43c0-50d5-25ab-025c1553060a.png)
-
■ロボットの組み立て-6
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/6fc18432-5216-66d8-8449-5ecb84d6e416.png)
-
■動かしてみた(付属の赤外線リモコン) 
赤外線操作-1

https://twitter.com/i/status/1599015357418999809

赤外線操作-2

https://twitter.com/i/status/1599017972479459328

-
■動かしてみた(rasPI-3A 制御) 
rasPI側から操作-1

https://twitter.com/i/status/1599018746932523008

rasPI側から操作-2

https://twitter.com/i/status/1599018451783540737

-
■動かしてみた(ジョイスティック操作) 

https://twitter.com/i/status/1599019346449559557

-
■LiDAR LD06をROS-rvizで確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/7449d89a-6a65-dd76-cd91-de789dd841c3.png)
LiDARで地図データを別UbuntuPCに表示

https://twitter.com/i/status/1599019163309158400

-
■最後に・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551517/54c89a99-045b-4cda-34f3-ebd85ff0c761.png)
人は、指でさすとき、どうやって正確な位置を決めているか？（その１）

・表示されたターゲットを指でさす
・ターゲットと指の位置にずれがあると、次にやるときに補正しようとする

---------------------------------------

![prism adaptation (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333980/796c7d88-230e-33ed-dcc4-33753ce6eba5.jpeg)
暗闇の中で光源を見ていると、あたかも光源が動いているように見えることがあります

---------------------------------------

![thanksgif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333980/992560d7-9707-bee3-1d60-9d476e8e39f3.gif)
どれくらい頭が動いているかを実測したものです。横幅が約1cm、スロー再生しました。

---------------------------------------

実は、見ている自分自身が動いているのにも関わらず、光源のほうが動いていると錯覚するのです

---------------------------------------

ただし、いったん光源が止まっているとわかると、もう錯覚は起こりません。

光源は止まって見えます。

---------------------------------------

![tmp.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333980/acc42760-c1c5-9a4f-ca5e-2c5e2adfd27a.gif)

光源がどこにあるか？

それは、見る人が、主観的に決めるものなのです。

---------------------------------------

さて、プルズム・メガネという、レンズのところにプリズムが入ったメガネがあります。


![スライド17.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333980/2a69320c-7581-3902-4acb-273785e12481.gif)
＋印を指さすのは、ふつう、簡単です。

---------------------------------------

![スライド5.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333980/e6757fc3-6e04-0b05-0169-9efdffd817d1.gif)
プリズム・メガネをかけると、指差しをしたときに、＋印から位置がずれます。

---------------------------------------

![tmp2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333980/bae8e2a6-7e7d-8f82-a1cf-0cf63004b1f9.gif)

ただし、プリズム・メガネをかけていても、だんだん慣れてきて、正しい場所を指せるようになります。

---------------------------------------

人は、ターゲット（＋）と自分の指を見て、ずれ（エラー）を認識すると、

次に指差しをするときに、ずれが少なくなるように、指をさす位置を修正していきます。

---------------------------------------

エラー修正の方法は、スポーツでも、日常生活でもよく使っています。

ただし、人は、エラー修正以外の方法も使うと言わています。

詳しくは、<a href = "https://qiita.com/emikosh/private/192388e80759240c5143">　12/10頃に公開（その２）へ続きます </a>

---------------------------------------

＜参考＞
https://www.researchgate.net/figure/Prism-adaptation-A-By-bending-light-prism-lenses-displace-the-visual-field-in-a_fig1_321814312

https://en.wikipedia.org/wiki/Prism_adaptation
nginx 公式リポジトリを Ubuntu 22.04 に追加

```
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xabf5bd827bd9bf62" | sudo gpg --dearmor -o /etc/apt/keyrings/nginx.gpg
$ sudo chmod  a+r /etc/apt/keyrings/nginx.gpg

cat <<EOL | sudo tee /etc/apt/sources.list.d/nginx.list
deb [signed-by=/etc/apt/keyrings/nginx.gpg] https://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx
deb-src [signed-by=/etc/apt/keyrings/nginx.gpg] https://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx
EOL

$ sudo apt-get update
```
VirtualBoxの画面が小さい

# VirtualBox上で起動しているCentOS7の画面サイズ変更したい
## 概要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154400/751b6403-d023-9df3-e5f3-a8ea95888705.png)
見てのとおり、小さいので修正したい。
### 確認
VirturalBoxマネージャーから設定→ディスプレイを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154400/8c02d391-ceda-959f-238e-a505b22d67e5.png)
灰色で触れない…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154400/45331e0f-8eb5-bba1-1a83-37fd05cb3dbb.png)
こっちも触れない…

## どうしたらいいのよ？
### 検索
以下のサイトの手順に沿って実行してみる。

https://qiita.com/tamago3keran/items/0db61bdfea2a1384b2ae

実行後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154400/63ef2681-e7b0-8647-786f-d8b786e74fd9.png)

うーん…変わったのか…？
次は画面サイズを変更してみる（vga=775の値を829に変更して取り込みなおして再起動）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154400/041b3ad1-0264-2ab0-8081-8fcb0e7191ff.png)
変わらなかった。
とりあえず画面大きく出来たらいいなーと思ってたけど、なにかが違うらしい…
## どうしたらいいのよ？２
このサイトで試してみる

https://urashita.com/archives/34216

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154400/64cb2d0e-8843-673e-372a-5da5d6ff4a39.png)
おぉ～！できた！
完
pythonのcopyについて（備忘録）

## 変数と代入文（=）

オブジェクトを格納する箱ではなく、オブジェクトを参照するための名札をイメージすると良い
pythonの代入文は、オブジェクトそのものをコピーするのではなく、オブジェクトの参照をコピーする！

## オブジェクトをコピー？参照をコピー？
~~~python
>>> your_colar = ['red', 'bule', 'black']
>>>my_colar = your_colar  
>>> your_colar
['red', 'bule', 'black']
>>> my_colar
['red', 'bule', 'black']
>>> your_colar[2] = 'green'
>>> your_colar
['red', 'bule', 'green']
>>> my_colar
['red', 'bule', 'green']
>>> id(your_colar), id(my_colar)
(1749125224128, 1749125224128)
~~~
オブジェクトそのものをコピーしているのではなく、オブジェクトの参照のみをコピーしている。

## 代入文が参照をコピーする理由
参照自体は数バイトしかサイズはないが、もしもリストにより多くの要素が入っている場合（何億とか）、リスト全体をコピーしてしまうと多くのメモリーを使用してしまうから。

## 参照を共有しないコピー(copy.copy()やcopy.deepcopy())

copy.copy()を使ってみよう！
~~~python
>>> import copy                     
>>> your_colar = ['red', 'bule', 'black']
>>> my_colar = copy.copy(your_colar) 
>>> id(your_colar), id(my_colar)
(1749125224128, 1749125306752)
>>> your_colar[2] = 'green'
>>> your_colar 
['red', 'bule', 'green']
>>> my_colar
['red', 'bule', 'black']
~~~
your_colarを変更しても、my_colarに影響を及ぼしていないことがわかる

## 入れ子のリストはどうだろうか？

~~~python
>>> import copy
>>> your_num = [[1, 2], [3, 4]]
>>> my_num = copy.copy(your_num)
>>> id(your_num), id(my_num)
(1749125307776, 1749125306112)
>>> your_num.append('APPEND_NUM')
>>> your_num
[[1, 2], [3, 4], 'APPEND_NUM']
>>> my_num
[[1, 2], [3, 4]]
>>> your_num[0][0] = 100  
>>> your_num
[[100, 2], [3, 4], 'APPEND_NUM']
>>> my_num
[[100, 2], [3, 4]]
~~~
your_numとmy_numは、違うリストオブジェクトであるが、内部にあるリストは参照先が同じことがわかる！！

## copy.deepcopy()をしよう！！

★copy.deepcopy()を使うとリスト内部にあるリストまでもコピーすることができる★

~~~python
>>> import copy
>>> your_num = [[1, 2], [3, 4]]
>>> my_num = copy.deepcopy(your_num)
>>> id(your_num), id(my_num)
(1749125308352, 1749125307776)
>>> your_num[0][0] = 100000000
>>> your_num
[[100000000, 2], [3, 4]]
>>> my_num
[[1, 2], [3, 4]]
~~~
リストの内部に他の可変型オブジェクトが含まれているかわからないときは、deepcopy()で対応しよう！

若干、速度低下を引き起こすが、常にdeepcopy()を使う癖をつけておくと、いいかも？？
望月新一　ABC予想論文を命名規則を手がかりに読む 。

望月新一　ABC予想論文を読む 。新人にお勧めの基本動作。pdftotext処理編

https://qiita.com/kaizen_nagoya/items/edc7857de19fe2d70bf6

から、ABC予想論文を読み始めた。

1. 基礎理論から読む

2. 参考文献あkら読む

3. 命名規則を手がかりに読む 

の３つの方法を検討している。



# 基礎理論から読む

# 参考文献あkら読む

# 命名規則を手がかりに読む 




ABC予想の論文のわかりにくさが、命名規則にあるおとを、数学大好きとしちゃんは、気が付いてこういう遠回りな企画をたてて、誰か他に気が付いたやつはいないかと探しているんだろうなと推測しています。ていねいに整理すれば、数学大好きとしちゃんの博士論文になるんだろうなと予想しています。
MariaDBでテーブル複製

# やり方

DDL流すより下記の方が簡単。

```sql:プライマリキーやインデックスの設定もそのままでテーブル複製SQL
CREATE TABLE 新テーブル名 LIKE 元テーブル名;
```

あくまで ```CREATE TABLE``` 。
**レコードは複製されない** ので注意。

レコードもコピーする時は追加で ↓ こう。

```sql
INSERT INTO 新テーブル名 SELECT * FROM 元テーブル名;
```

# 蛇足

テスト時の環境作成でよく使う。
全く同じデータを使って『変更前システムの出力結果』と『変更後システムの出力結果』の差分確認とか。

# 参考サイトさん

https://www.javadrive.jp/mysql/table/index15.html

# バージョン

Windows 10 Pro 21H2 OSビルド 19045.2311
10.5.4-MariaDB
テスト78

```vb
Private Sub ファイル名_Click()
'事前にAccessのテーブルにハイパーリンク型でファイル名を入れておく
'フォームで表示されたファイル名をクリックすると､そのファイルが開く...((φ(ﾟωﾟ )ﾒﾓﾒﾓ
Dim FSO As Variant
Dim Ex As Variant
Dim str_Path As String
Dim File_Path  As String

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Ex = CreateObject("Excel.Application")

'フォルダパスを取得
str_Path = DLookup("フォルダパス", "T_テスト2")

'ファイルパスを作成
File_Path = FSO.BuildPath(str_Path, ファイル名.Text)

'Excelファイルを開く
Ex.workbooks.Open (File_Path)

'Excelファイルを表示する
Ex.Visible = True

Set Ex = Nothing
Set FSO = Nothing

MsgBox ファイル名.Text & "を開きました。", vbInformation, "ファイルを開く"

End Sub

'Accessのタブコントロールでタブを変える時に発生するイベント
'Form_タブフォーム内のイベント...((φ(ﾟωﾟ )ﾒﾓﾒﾓ
Private Sub テスト1_Change()

MsgBox Me.テスト1.Pages(Me!テスト1.Value).Name

End Sub

''読み込み時にフォームの幅と高さを設定する
'Private Sub Form_Load()
'
'DoCmd.MoveSize , , 20 * 567, 10 * 567
'
'End Sub
ビル間接続に困った話 (2)

謎のアドベントカレンダー、第 2 話です。

1 日目の **[ビル間接続に困った話 (1)](https://qiita.com/hmatsu47/items/f9aaa4ab25b080bf2b26)** の続きです。

https://qiita.com/hmatsu47/items/f9aaa4ab25b080bf2b26

高層な方のビルとの接続用の赤外線通信装置を更新して、メンテナンスしなくて良くなった…と思いきや、またしても冬の寒い日に事件が発生しました。

## それは、雪が降り積もる寒い日のことでした

またしてもビル間接続が切れました。

「雪が激しくて装置の前に積もっちゃったかな？」と思いながら、情シスの先輩に付いて現地に行ってみましたが、そんなことはなく。

が、何か様子がおかしいです。

「・・・」

やたらと静かです。

雪が降る日なので静かなのかな？と思いましたが、原因はほどなく判明。

~~クソ~~寒い日にもかかわらず、エアコンの室外機が息をしていません。

誰一人（？）として。

## ブレーカーが落ちてました

そして、その道連れとなって、ビル間の赤外線通信装置も電源が切れていました。

なんと、赤外線通信装置がエアコン用の電源回路に接続されていたのでした。

…いや、 **通信設備の電源を空調設備の電源回路から取ったらアカン** やろ。

（まだ会社に LAN を引くのが珍しい時代に工事したはずなので、会社としてはそのあたりの配慮が必要なことを分かっていなかったでしょうし、業者さんも事前にアドバイスできなかったのかもしれません）

その後、電源回路を増設して分離した気がします（記憶が曖昧で間違っているかもしれません）。

## さらに、その後

ただ、赤外線通信装置はビルの屋上にあり、確認やメンテナンスには危険が伴います。

台風の日にも通信断が発生したことがあり、ずぶ濡れになりながら屋上で作業する情シスの先輩の姿を見ながら「これはまずいな」と思ったのを覚えています。

（装置の設置場所はビルの下の道路がよく見渡せる場所でした。怖いです）

また、その頃には従業員も増え、さらには文字だけではなく画像などのやり取りも増え、10Mbps 半二重の通信では社内 LAN もキツくなってきていました。

一方、サーバー室のあるビルでは、すでに Fast Ethernet 化とともにスイッチも導入され、100Mbps 全二重で通信可能になっていました。

（技術の進化、特に「普通の会社の手が届く価格で性能の上がった機器がどんどん買えるようになる」サイクルが速い時代でしたので、（会計処理は大変ですが）耐用年数の意識なくどんどん機器を更新していた気がします）

そして、

- ビルのある地域内で、ダークファイバーを利用した心線貸しサービスが始まったこと
- 安価な 1 芯 100Mbps タイプのメディアコンバータが発売されたこと

などを機に、ビル間の接続を光ファイバーに移行しました。

やったね。

---

3 日目の記事に続きます。

- **[ビル間接続に困った話 (3)](https://qiita.com/hmatsu47/items/a68a653e40c9e92b16c5)**

https://qiita.com/hmatsu47/items/a68a653e40c9e92b16c5
Orthoverse∅アプリのビルド

# スマホ用アプリのビルド

https://github.com/oho-sugu/OrthoverseZero

リポジトリの`Unity`以下がUnity用プロジェクトフォルダです。

Unity バージョンは2021.3.9f1を使っていますが、これでないと動かないということはないと思うので、
近いバージョンであればよいと思います。

# APIキーの登録

[INFURA](https://app.infura.io/)のAPIキーと、Google Cloud PlatformのGeospatialAPI用のAPIキーが必要です。
それぞれ各自で取得してください。

INFURA用APIキーは、`Scripts/PlaceManager.cs`のソースコードに書きます。

```
    void Start()
    {
        web3 = new Web3("https://goerli.infura.io/v3/");
        pns = new PNSRegistryService(web3, "0x0D03EFbaccC2f53126bc832c66082ACaf5947B98");
        dm.setPostInitDocumentDelegate(postInitDocument);

        StartCoroutine(DownloadAndInstantiate());
    }
```
ここの3行目、APIエンドポイントのURL末尾に追加してください。

GeospatialAPIのAPIキーは、メニューの`Edit`→`ProjectSettings`→`ARCore Extensions`のAPIキー入力欄に追加してください。

このようにアプリにAPIキーを直接埋め込むことはあまり推奨されませんが、あくまでプロトタイプという割り切りで進めます。
GeospatialAPIに関しては、キーレス認証などの方がよりよいでしょう。

# ビルド

手元ではAndroidビルドを確認しています。
上記のAPIキーの設定をしてあれば、そのままビルドしてインストールすることで動作すると思います。

# 動作

その1で正しくURLを空間IDに登録できていれば、その場所に行ってアプリを起動し、
GeospatialAPIの認識のために周囲を見回すとURL先のデータをARで出してくれるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30257/a5597419-e94d-df6c-2265-3214e49f02a6.png)
Ansible: dictionaryデータの一部を書き換える

# dictionaryデータの一部を書き換える



例えば、以下のようなdictionaryデータのdb2.img部分のみ書き換える。

## サンプルdictionaryデータ

```yaml:vars/main.yml
db2:
  img: v11.5.7_linuxx64_server_dec.tar.gz
  install_path: /opt/ibm/db2/V11.5
  ...
```




## 書き換えtask

combineフィルターが使用可能

```yaml
- set_fact:
    db2: "{{ db2|combine({'img': 'v11.5.8_linuxx64_server_dec.tar.gz'}, recursive=true) }}"
```

https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_filters.html#combine-filter


もしくはtask varsを使って書き直すと

```yaml
- vars:
    db2_img:
      img: v11.5.8_linuxx64_server_dec.tar.gz
  set_fact:
    db2: "{{ db2|combine(db2_img, recursive=true) }}"
```


# 蛇足: set_fact使用上の注意
set_factでは、変数などが解釈されてしまうので注意。

たとえば、以下の様な属性の場合を考える。



```yaml:vars/main.yml
db2:
  img: v11.5.7_linuxx64_server_dec.tar.gz
  install_path: "{{ shared_filesystem|default('') }}/opt/ibm/db2/V11.5"
  ...
```

- set_factを用いたdb2.imgの再設定を行なわない場合、
    - db2.install_pathの先頭は、
        - db2.install_path使用時点のshared_filesystemの値となる。

しかし、
- set_factを用いたdb2.imgの再設定を行う場合、
    - db2.install_pathの先頭は、
        - set_fact使用時点のshared_filesystemの値となり、
        - db2.install_path使用時点のshared_filesystemの値には影響されない。

といった差異が生じることなり、個人的にはこれに引っかかったので、注意。

なお、当然、combineした値をtask varsで使用するケースでは、問題とならない。
block varsならどうだろう？
「const {変数} = () => {」がわからない人へ

## はじめに
JavaScriptのコードを眺めているとよく現れる「**const {変数} = () => {**」
なんとなく何かの処理が始まるまじないかなと思ってたので、今回かみ砕いてみました。
## const
constは、変数を定義するために使用される修飾子です。
定義した変数は、その後のプログラム中で値を変更することはできなくなります。
同様の定数を定義する修飾子に「**let**」がありますが、こちらはプログラム中に変数の値を変更することができます。

## =
=は、代入演算子です。
左辺にある変数に、右辺の値を代入するために使用されます。

## () => {}
() => {　は、JavaScriptのアロー関数を使用した定義方法です。
アロー関数とは、要するに簡潔に表現できる関数記述となり、JavaScriptで関数表記によく用いられるfunctionを使用した定義と同じ意味を持ちます。

※その他の特徴は以下参照
https://typescriptbook.jp/reference/functions/function-expression-vs-arrow-functions

## 最後に
簡潔に「const {変数} = () => {」をまとめてみました。
パッとみ暗号ですが、ひとつづ紐解いていくと何となく理解できるものですね。
この記事が誰かの学習の足掛かりになれば幸いです。
Amazon S3

## S3とは
耐久性と可用性に非常に高くデータの中長期保存に最適なオブジェクトストレージサービスです。
バケット単位で保存スペースを区分して、オブジェクトでデータを格納する。

https://aws.amazon.com/jp/s3/

### オブジェクトストレージの特徴
- 安価かつ高い耐久性をもつオンラインストレージ
- オブジェクト形式でデータを保存
- デフォルトで複数AZに冗長化されるためデータの耐久性へ可用性が非常に高いものになっている

### 耐久性(Durability)
- データ持続性
- データを失わない確率

### 可用性(Availability)
- 稼働率（稼働時間）
- 「システムやサービスが利用できる時間の割合」
- 使いたい時に使える確率

### 冗長性(Redundancy)
- コンピューターやシステムに障害が発生した場合に備えて、冗長な(=無駄な)予備装置を普段から配置、運用すること
- 複数あれば、それは冗長性があると言える
- 単にバックアップと言った場合は、自動的に短時間で復旧する(切り替わる)場合のみ、冗長性があると言える

### バケット
- バケットは一つのストレージの単位
- オブジェクトを格納する場所のこと
- バケット名は一意の名前でなければならない（世界で1つの名前でなければならない）
- バケットはリージョンに設定してするため、AZやVPCの範囲外

### オブジェクト
- オブジェクトという名前だがファイルのようなもの
- htmlやmp3などのさまざまなファイル形式のデータをオブジェクト単一出なければならない


## バージョン管理
ユーザーが間違ってデータを削除してしまってもバージョン管理していれば復元することができる。
- デフォルトでは無効化されているため設定する必要がある
- ライフサイクルルールによってバージョンが保存される期間が設定できる
- オブジェクトのバージョンIDでバージョン管理ができる

## ストレージクラス
S3には複数のストレージクラスがあるため用途に応じて変える必要がある
|タイプ|特徴|性能|料金|
|---|---|---|---|
|STANDARD|・複数のAZにデータを複製するため耐久性が高い。頻繁に使用するデータを大量に保存するのに向いている。|・耐久性<br>99.999999999%<br>・可用性<br>99.99%|・最低利用料金 なし<br>・データ取得料 なし|
|STANDARD-IA|・低頻度アクセスデータストレージ。ONEZONE-IAより重要なマスターデータ向けでデータの取得は早い<br>・STANDARDとONEZONE-IAの間のもの|・耐久性<br>99.999999999%<br>・可用性<br>99.9%|・最低利用料金 30日<br>・データ取得料 なし|
|ONEZONE-IA|・低頻度アクセスデータストレージですがマルチAZでないため可用性が低く、重要ではないデータ向け|・耐久性<br>99.999999999%<br>・可用性<br>99.5% = 1AZ|・最低利用料金 30日分<br>・データ取得料 GB当たりの所得料|
|S3 Intelligent Tiering|・高頻度にアクセスするデータと低頻度のデータを自動で移動してくれる<br>アクセスパターンがわからない時に使用する|・耐久性<br>99.999999999%<br>・可用性<br>99.9%|・最低利用料金 30日<br>・データ取得料 なし|

## Glacier
|タイプ|特徴|性能|料金|
|---|---|---|---|
|S3 Glacier<br> Flexible Retrievel|・1年に1,2回アクセスされるアーカイブデータ向け。<br>・複数のデータ検索がある<br>  1. 標準取り出し 3~5時間<br>  2. 迅速取り出し 2~5分<br>  3.一括取り出し 5~12時間<br>ボールトロック機能でデータを保持|・耐久性<br>99.999999999%<br>・可用性<br>99.99%|・最低利用料金 90日<br>・データ取得料 GB当たりの所得料|
|S3 Glacier<br> Instant Retrievel|・アクセスされることがほとんどなく、ミリ秒単位の取り出しが必要な長期間有効なデータ向け（医療画像やニュースメディアなど）<br>|・耐久性<br>99.999999999%<br>・可用性<br>99.9%|・最低利用料金 90日<br>・データ取得料 GB当たりの所得料|
|S3 Glacier Deep Archive|・最安のアーカイブ用ストレージ<br>・7~10年間保持しなくてはいけないが滅多にアクセスしないデータ向け|・耐久性<br>99.999999999%<br>・可用性<br>99.99%|・最低利用料金 180日<br>・データ取得料 GB当たりの所得料|

## S3の暗号化
S3へのデータ保管時の暗号化形式には下記の4種類ある
|暗号化方式|特徴|
|---|---|
|SSE-S3|・S3の標準暗号化方式<br>・作成、管理をS3側で自動で実施してくれる|
|SSE-KMS|・AWS KMSに設定したキーを利用した暗号化<br>・ユーザー側でAWS KMSを利用して暗号化マネージドキーを作成、管理する|
|SSE-C|・ユーザーが指定した暗号化用のマネージドキーをデータとともに送付して、サーバーサイド暗号化を実施する<br>・管理はユーザーでやるので少しめんどくさい|
|CSE|・S3に送信する前にデータを暗号化する方式<br>・アプリケーションに保存したマスターキーを使用|

## オブジェクトロック
アップロードされたデータを更新、削除をできないするようにする機能でデータが変更されないことを保証する。



## まとめ
S3について簡単にですがまとめてみました。
間違った記述をしている場合もあるかと思いますが指摘していただけると幸いです。
簡単なtelescope.nvim拡張を作った

1. はじめに
    telescope.nvimはそれ自体に既に多くのものをFuzzyFindする機能が備わっています。拡張も作られており私が愛用しているCLIツールにも既に拡張が作られています。
    どうにかして、オリジナルの拡張を作れないか...。fuzzy finderは一覧表示してそれを絞り込む機能です。一覧表示するもの...。

    AWS
    
    という動機で作りました。(一個人でやるにはあまりにも巨大な壁なので、自分に必要なEC2へのAWS Session Managerによる接続だけとなっています。)

2. 拡張の作り方
[公式に拡張の作り方](https://github.com/nvim-telescope/telescope.nvim/blob/master/developers.md)が記載されています。
また、helpにはtelescope.nvimの構成図記載されています。簡単な拡張を作るだけなら全て理解する必要はないため、比較的簡単に動作するところまで作れると思います。
最低でも以下のことを実現したい、という大まかな流れの理解が必要です。
    1. Pickerを作成する(FuzzyFindのUIを作ります)
        1. FinderでFuzzyFind対象を抽出 
        1. EntryMakerでUIに表示するデータを整形する
        1. Attach Mappingで選択した行に対するアクションを決める

    PreviewerやSorterはtelescope.nvim全体の設定を流用することも出来ます。なので肝になるのはFinder、特にEntryMakerとEntryManagerです。(builtin.commandsが結構凝った表示をしているので興味があれば参考までに。)

    ```
    ┌───────────────────────────────────────────────────────────┐
    │      ┌────────┐                                           │
    │      │ Multi  │                                ┌───────+  │
    │      │ Select │    ┌───────┐                   │ Entry │  │
    │      └─────┬──*    │ Entry │    ┌────────+     │ Maker │  │
    │            │   ┌───│Manager│────│ Sorter │┐    └───┬───*  │
    │            ▼   ▼   └───────*    └────────┘│        │      │
    │            1────────┐                 2───┴──┐     │      │
    │      ┌─────│ Picker │                 │Finder│◄────┘      │
    │      ▼     └───┬────┘                 └──────*            │
    │ ┌────────┐     │       3────────+         ▲               │
    │ │Selected│     └───────│ Prompt │─────────┘               │
    │ │ Entry  │             └───┬────┘                         │
    │ └────────*             ┌───┴────┐  ┌────────┐  ┌────────┐ │
    │     │  ▲    4─────────┐│ Prompt │  │(Attach)│  │Actions │ │
    │     ▼  └──► │ Results ││ Buffer │◄─┤Mappings│◄─┤User Fn │ │
    │5─────────┐  └─────────┘└────────┘  └────────┘  └────────┘ │
    ││Previewer│                                                │
    │└─────────┘                   telescope.nvim architecture  │
    └───────────────────────────────────────────────────────────┘
    ```
    出典: [GitHub: nvim-telescope/telescope.nvim/docs/telescope.txt](https://github.com/nvim-telescope/telescope.nvim/blob/master/doc/telescope.txt)


3. telescope.nvimからEC2へAWS Session Managerで接続するプラグインを作りました。
    [GitHub lunarxlark/telescope-aws.nvim](https://github.com/lunarxlark/telescope-aws.nvim)
    正直、他の方が使うことを想定して作っていません。こういうことも出来るんだよってことをお伝えしたかったです。    仰々しい名前の割に掲題のことしか出来ませんし、aws credentialsもnvim起動時のdefaultのみです。ECSへの接続をやりたいのですが、一覧表示 -> 選択を何度か繰り返さないといけないことに躓いて頓挫しています。

4. Funmnv
ubagbhun RagelZnxrejb ubevfntrgnxnggnaqrfhxrqb znavnvznfraaqrfuvgn.
fbabhgv PbqrCvcryvarab wvxxbhgbxnjb lnevgnvgbbzbggrznfhabqr, fbabgbxvav nengnzrgr oybtavqrzb
xnvgrvxhlbgrvqrfh.gnoha.xvggb.

zbgbargn : uggcf://tvguho.pbz/aivz-gryrfpbcr/gryrfpbcr.aivz/oybo/znfgre/qbp/frperg.gkg
Salesforceメール周りの設定あれこれ

# これは何？
この記事は「[24日後に立派なSalesforceエンジニアになるWEBエンジニア Advent Calendar 2022](https://qiita.com/advent-calendar/2022/kakakaori)」の6日目の記事です。１９日後に立派なSalesforceエンジニアになるために今日はメール周りの設定からついでにメールtoケースのあたりについて学びます。

# 今日実現したいこと
- 私はカスタマーサポートの担当者
- お客様とのメールのやり取りはメーリングリスト（support@）で行う
    - メールの内容によっては別のメーリングリスト（info@やcs@）から送りたいこともある
- support@やinfo@に来たメールはケースに自動で登録されてほしい
- メールを書くときはセールスフォースのメールコンポーザを使いたい
    - 右下からピヨんて出てくるやつ
    - ![スクリーンショット 2022-12-02 15.27.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/70d1902f-6fa4-9a5e-2726-7d5d96cbbc7f.png)

# 設定内容
## Salesforceメールコンポーザを利用できるようにする
設定箇所：右上のアイコンをクリック > 設定 > メール > 私のメール設定

![スクリーンショット 2022-12-02 15.35.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/65cca594-27cc-eed0-c431-06f9a1b4b040.png)
ここからSlaesforceメールコンポーザを選ぶだけでOK。
このコンポーザ設定が出てこない場合は「右上歯車 > 設定 > メール > 送信」から送信設定画面を開いて「メールを送信するためのアクセス権」のところでアクセス権を「すべてのメール」にする必要がある。
![スクリーンショット 2022-12-02 15.38.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/cb23a154-66b4-55f6-a870-596fcab1e6c9.png)
これはSandboxを作ると常にデフォルトは「システムメールのみ」になっているので変更を忘れないように注意。（これ気づかなくて「Salesforceコンポーザの設定が出ない！！」とハマった・・・）

## 送信者の情報を設定する
また先ほどのメール設定画面内で署名や差出人の名前、メールアドレスなどを設定できる。メールアドレスについては設定した初回はSalesforceから確認のメールが飛ぶのでそれを承認する必要がある。今回の場合ここにsupport@のメアドを登録しておく。

## 送信者で選べるメーリスを複数登録する
今回の例で言うとcs@やinfo@からも送信できる必要があるのでそれを登録していく。
設定箇所：右上歯車 > 設定 > メール配信設定 > 組織のアドレス
![スクリーンショット 2022-12-02 15.56.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/3e29bdcf-e5c7-7eb4-9e92-3594ee55f9e4.png)
ここにアドレスを登録するとSalesforceからメールが送られるので承認をしてあげればOK。
これで登録したアドレスが送信者として表示されるようになる。
メールアドレスは誰が選択できるかをプロファイル単位で選ぶことができるが、それ以外（例えばロールとか）では設定できない。プロファイル「CS担当者」にしてロールでA店舗、B店舗と作っていて店舗ごとにメールアドレス選択できるものを変えたかったけど無理でした。

## メール-to-ケースの設定
設定箇所：右上歯車 > 設定 > 機能設定 > サービス > メール-to-ケース

これを登録しておくと任意のメールアドレスで受信したメールを自動的にケースとして起票することができる。またそのケースに関してお客様へメールを送って、返信を受信すると、それは新規ケースではなくて前の対応中のケースに紐づけることができる。
![スクリーンショット 2022-12-02 16.50.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/d2adb530-e6b7-4b4b-886b-88c138bb414a.png)

これで登録すると下記のように何やら長いメールアドレスが吐き出される。
![スクリーンショット 2022-12-03 21.13.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/9aa1d83d-d004-48ed-7744-762932f29463.png)

このアドレス宛に受信したメールがケースとして自動で起票されることになるので、自社のメーリングリストの転送先にこのSalesforceから吐き出されたメールアドレスを登録して完了。

## 小ネタ

### 文字コードの指定
設定箇所：右上アイコン > 設定 > 私の個人情報 > 言語とタイムゾーン
からメールの文字コードの指定が行える。これはユーザごとに設定しなければならない。
デフォルトはSJISになっているので必要に応じて変更を。

### 添付メールを送信させない
今回できれば添付メールを送信できないようにしておきたかったのだが、Salesforceのメールコンポーザで添付メールのアイコンを非表示にすることはできなかった。その代わりにメールメッセージの入力規則を作ることで、ファイルが添付されている場合、エラーが表示され、メールメッセージの作成を防ぐ = メール送信不可とすることにした。

設定箇所：右上歯車 > 設定 > オブジェクトマネージャ > メールメッセージ > 入力規則
エラー条件に`HasAttachment = True`を記入し、エラー文言を入れて保存。
ただしこの設定だとメールう送受信両方に伴うメールメッセージの作成を制御するものになるから、メール-to-ケースでの受信時にも処理が行われて相手から添付メールを送られたときにエラーになってしまう。
そのため、エラー条件式でメール-to-ケースの [自動ケース更新ユーザ] を除外する or
[自動ケース更新ユーザ] に指定されていないユーザのプロファイルのみを指定するなどの対応が必要になる。

# 最後に
メール周りは簡単そうなんですが意外と思ったように動作しなかったりハマったりしたので、実際行った設定ベースでまとめてみました。
明日はいよいよコード書きたいからLightning Web Componentについて学んでいきたいと思います！
AZ-305学習の手引き

# 🫣TL;DR
私がAZ-305を受験するにあたって、学習を始めるときに公式のラーニングパス集を見ました。しかし、数も分野も多いので「評価されるスキル」から全体の構成を捉えることで、学習計画のプランニングやスムーズな内容の理解につながるのではと考えたため、この記事を書きました。

（執筆時点では受験前なので、これがどこまで有効かはわかりません。参考程度に見てください。）

# 全体の構成
こちらの公式ページに、評価されるスキルやラーニングパス、受験までの流れ等まとまっています。

https://learn.microsoft.com/ja-jp/certifications/exams/az-305

## ラーニングパス
公式ページのラーニングパスはさらにモジュールという学習ページで構成されているので、それらをツリー構造で書き出してみると以下のようになります。お、多すぎる。。。
```
AZ-305
└── ラーニングパス
    └── モジュール
---
AZ-305
├── ID、ガバナンス、および監視ソリューションを設計する (25-30%)
│   └── AZ-305: ID、ガバナンス、および監視ソリューションの設計（上級）
│       ├── 設計のガバナンス
│       ├── 認証と認可のソリューションを設計する
│       └── Azure リソースをログに記録して監視するソリューションを設計する
├── データ ストレージ ソリューションを設計する (25-30%)
│   └── AZ-305: Design data storage ソリューション（上級）
│       ├── 非リレーショナルデータ用にデータ ストレージ ソリューションを設計する
│       ├── リレーショナル データ用にデータ ストレージ ソリューションを設計する
│       └── データ統合を設計する
├── ビジネス継続性ソリューションを設計する (10-15%)
│   └── AZ-305: ビジネス継続性ソリューションを設計する（上級）
│       ├── 高可用性向けの設計
│       └── バックアップとディザスター リカバリーのソリューションを設計する
└── インフラストラクチャ ソリューションを設計する (25-30%)
    ├── Microsoft Azure Well-Architected Framework を使用して優れたソリューションを構築する（初級）
    │   ├── Microsoft Azure Well-Architected Framework の概要
    │   ├── Microsoft Azure Well-Architected Framework - コストの最適化
    │   ├── Microsoft Azure Well-Architected Framework - オペレーショナル エクセレンス
    │   ├── Microsoft Azure Well-Architected Framework - パフォーマンス効率
    │   ├── Microsoft Azure Well-Architected Framework - 信頼性
    │   └── Microsoft Azure Well-Architected Framework - セキュリティ
    ├── Azure 向けの Microsoft クラウド導入フレームワークでクラウド導入を加速する（初級）
    │   ├── Azure 用の Microsoft クラウド導入フレームワークの概要
    │   ├── 明確に定義された戦略でクラウド導入を成功させるための準備
    │   ├── データドリブン計画を使用してクラウドの導入を準備する
    │   ├── クラウド運用の要件をサポートするための最適な Azure ランディング ゾーンを選択する
    │   ├── 反復可能なプロセスと一般的なツールを使用して Azure に移行する
    │   ├── Azure 向けクラウド導入フレームワークのガバナンス手法によって明確なリスクに対処する
    │   ├── クラウドにデプロイされているすべてのサポート対象ワークロードに対する安定した運用と最適化の確保
    │   ├── Azure のクラウド テクノロジを使用してアプリケーションのイノベーションを行う
    │   └── Azure 向けの Microsoft クラウド導入フレームワークを使用してクラウド セキュリティを準備する
    ├── AZ-305: Microsoft Azure Architect Design の前提条件（中級）
    │   ├── Azure アーキテクチャのコア コンポーネントを説明する
    │   ├── Azure でのクラウド ガバナンス戦略を構築する
    │   ├── Azure 向けの Microsoft Cloud 導入フレームワーク
    │   ├── Microsoft Azure Well-Architected Framework の概要
    │   ├── Azure ID サービスを使用してアプリケーションへのアクセスをセキュリティで保護する
    │   ├── Azure Compute サービスについて
    │   ├── Azure メッセージ キューを検出する
    │   ├── Azure ネットワーク サービスの詳細
    │   ├── Azure ストレージ サービスについて
    │   └── Azure のデータベースおよび分析サービスについて調べる
    └── AZ-305: インフラストラクチャ ソリューションを設計する（上級）
        ├── Azure コンピューティング ソリューションを設計する
        ├── アプリケーション アーキテクチャを設計する
        ├── ネットワーク ソリューションを設計する
        └── 移行を設計する
```

## 単元別に整理
上のツリーを見ただけでは恐らくやる気をそいでしまうだけなので、モジュールの内容を踏まえてこの資格で問われている内容を大/中/小単元レベルでまとめてみました。
```
ゴール
└── 大単元
    └── 中単元
        └── 小単元
---
インフラストラクチャの設計
├── 設計思想、概念
│   ├── Well-Architected Framework
│   │   ├── コストの最適化
│   │   ├── オペレーショナル エクセレンス
│   │   ├── パフォーマンス効率
│   │   ├── 信頼性
│   │   └── セキュリティ
│   ├── クラウドの導入、移行
│   └── ビジネス継続性
└── 具体的なコアコンポーネントの設計
    ├── ID、ガバナンス
    ├── Compute
    ├── ネットワーク
    ├── データ、ストレージ
    └── メッセージ

```

# まとめ
これで頭を整理しながら学習頑張りましょう。
エンジニアのためのマネジメントキャリアパスに学ぶ、エンジニアのキャリアパスとは（連載第14回/25回）

# 前回の記事
https://qiita.com/rf_p/items/0e1f4554236d9405ba88

# 連載の構成
- この記事は、[マネジメントについて一人で考える Advent Calendar 2022](https://qiita.com/advent-calendar/2022/management-solo)の連載記事です
    - 1記事目から読んでいただいても良いですし、気になる記事から読んでいただいても問題ありません
- 全25回分の構成は、次の通りです
    - 第1〜6回：ドラッカーの『マネジメント』を中心に解説します
    - 第7〜13回：『図解人材マネジメント入門』を中心に解説します
    - 第14〜22回：『エンジニアのためのマネジメントキャリアパス』を中心に解説します
    - 第23〜25回：私の経験談を中心に、まとめに入ります

# 連載後半の構成
- これまで前半の連載(第1回〜第13回)では、主に"マネジメント"と"マネージャー"を取り扱ってきました
- **後半(第14回〜第25回)の連載では、エンジニア領域に焦点を絞って深堀り**していきます
- 参考図書は主に以下2冊です
    - [エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド](https://www.amazon.co.jp/dp/4873118484)
    - [ITエンジニア採用とマネジメントのすべて 「採用・定着・活躍」のポイントと内製化への道筋が1冊でわかる](https://www.amazon.co.jp/dp/4761276215)

# エンジニアのキャリアパスとは
- まず、ITエンジニアにおけるキャリアパスを考えてみます
- 一番粗い切り口の方向性として、2方向あります
    - **マネジメント**
        - エンジニアリングマネージャー(EM)、VPoE(Vice President of Engineering)等
    - **スペシャリスト**
        - テックリード、リードエンジニア、CTO(Chief Technical/Technology Officer)等
- CTOやVPoEは会社によって役割が大きく異なるので、どちらに分類するか難しいですが、概ねこの分類に近くなるはずです

# マネジメント
- マネジメントの役割を担う人は、引っくるめてマネージャーと呼ばれます
    - 以下記事をご参照ください
    - マネジメントとは何か？は[連載第1回](https://qiita.com/rf_p/items/fc17e922f4551a114d69)
    - マネージャーとは何か？は[連載第3回](https://qiita.com/rf_p/items/7d6a1433aa2e8e2f61e9)
    - マネージャーの仕事は何か？は[連載第5回](https://qiita.com/rf_p/items/8ac5df53da5bc53b5ca2)
- [連載第5回](https://qiita.com/rf_p/items/8ac5df53da5bc53b5ca2)から引用すると、以下役割を担っている人たちのことです

> あらゆるマネジャーに共通の仕事は五つである。①目標を設定する。②組織する。③動機づけとコミュニケーションを図る。④評価測定する。⑤人材を開発する。  
> 引用：[マネジメント[エッセンシャル版] - 基本と原則](https://www.amazon.co.jp/dp/4478410232)

- プレイングマネージャーの場合はここにコーディング業務が入ることもありますが、原則として上記5つは欠かせません
- そういう意味では、エンジニアリングマネージャー(EM)だけでなく、プロダクトマネージャー(PdM)もここに入るでしょう
    - そもそもプロダクト**マネージャー**と、マネージャーが入っている役割です

# 広義のスペシャリストと狭義のスペシャリスト
- 対してスペシャリストとは何でしょうか？
- ITエンジニアのキャリアパスを指してスペシャリストと言った場合、2つの使われ方をすることがあります
- **広義のスペシャリスト**
    - 対義語はマネジメント
    - ヒト・モノ・カネを主に扱うマネジメントに対し、技術に特化した役割を担う人材
- **狭義のスペシャリスト**
    - 対義語はゼネラリスト
    - 広義のスペシャリストのうち、
        - 広い技術領域への知識をもつ人材をゼネラリスト
        - 特定分野に特化した知識やスキルをもつ人材をスペシャリスト
- 今回の連載では、スペシャリストと書いた場合は原則として広義で扱います

# 広義のスペシャリスト、テックリード、リードエンジニアの違い
- 広義のスペシャリスト、テックリード、リードエンジニアといった言葉に違いはあるのでしょうか
- これは正直組織や文脈によって定義が異なるので、一概に言い切れません
- ただし明らかに大きく異なる性質のものではないので、共通部分が多い区分と言えるでしょう

# テックリードの定義
- あくまでも一例ではありますが、書籍『エンジニアのためのマネジメントキャリアパス』におけるテックリードの定義を引用します

> テックリードはエンジニアの階層におけるランクのひとつではなく、シニアのレベルに達したエンジニアが担うことのできる責務群である。  
> （中略）  
> ［テックリードとは］（ソフトウェアの）開発チームに対する責任をにない、最低でも自分の職務時間の3割はチームと共にコードを描く作業に充てているリーダーのこと。  
> 引用：[エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド](https://www.amazon.co.jp/dp/4873118484)

- 書籍やWeb、実体験も含めてではありますが、テックリードやスペシャリストについて概ね共通して言えるのは**チームに貢献する技術リーダー**ではないでしょうか
    - 例えば
        - チーム全体に関わる技術基盤の構築
        - チームメンバーとの定期的な1on1
        - チームメンバーのコードレビューやペアプロ・モブプロ
    - こういったチームに貢献する役割を担う存在であることが多いです

# 終わりに
- 今回から後半戦ということで、よりエンジニアリングに絞った内容となりましたがいかがでしょうか
- 重要なのは、前半パートでご説明した"マネジメント"の知識をベースに、知識を合わせることではないでしょうか
- 次回はキャリアパスの選び方について解説します

# 次の記事
https://qiita.com/rf_p/items/9b0f41490af66984163d

- 連載記事一覧
    - [マネジメントについて一人で考える Advent Calendar 2022](https://qiita.com/advent-calendar/2022/management-solo)
SecHack365とは？どんな雰囲気？参加してみました！

この記事は [SecHack365 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/sechack365) の3日目の記事です。

こんばんは、nyaarch64 です。SecHack365 に参加しています。調べてまとめてみてはいませんが、実際参加してみた上での紹介をしてみようと思います。

## SecHack365 とは？

Sec (urity を意識した) Hack (athon を ) 365 (日くらいするイベント) です。
詳しくは [公式サイト](https://sechack365.nict.go.jp/) を見てください。最近更新されたそうです。

## せっくはっくさんろくご とは？

セキュリティを意識したハッカソンで、開催期間はおよそ1年です。
25歳以下であれば応募できて、40名の枠を応募課題で争います。

早速アイデンティティの 1/3 くらいを否定するようですが、365日きっちりあるわけではありません。だいたい1年という意味です。
そして、よく SecHack356 などの typo を見ます。これはもう SecHack約365 とかにした方がいいかもしれません。

そしてまたアイデンティティの 1/3 くらいを揺らがせることなのですが、応募時点ではセキュリティについてあまり意識していなくても大丈夫です。
ハッカソンをしていく中でセキュリティ要素を見つけて、最終的に何らかセキュリティを意識した作品作りができれば、『技術創出とサイバーセキュリティを両立できる「セキュリティイノベーター」人材育成』[^1] という目的も達成されるわけですし、問題ないでしょう。

## コースについて

SecHack365 には5つのコースがあります。

- 表現駆動コース
- 学習駆動コース
- 開発駆動コース
- 思索駆動コース
- 研究駆動コース

私はコース選択でかなり悩んだので、それぞれのコースの特徴を簡単に書いてみようと思います。
以下では「駆動コース」を省略して表記します。

### チームを作って進める表現

表現以外の4つのコースでは、基本的に一人で制作を進めますが、表現ではチームを作って制作を進めます。
1年間のハッカソン期間をいくつかのフェーズに分割して、それぞれでチームメンバーを入れ替えながら毎回作品を作ります。
そして、最後のフェーズに一番長い期間が割り当てられ、今までの制作を踏まえつつ最終的な成果物を制作します。

### じっくり考えてから進める思索

思索は、5つのコースの中で、制作開始が一番遅いコースです。たぶん。
思索では、指定された様々な概念や事柄について調べて、自分なりに発表し合うゼミを繰り返しながら、自分の考えや作りたいものと向き合います。知らんけど。

### 研究

研究は、名前の通り研究をします。
他のコースに比べて新規性などを重視したり、論文発表を目標とする人が多いのが研究の特徴と言えるかもしれません。

### 残り

学習と開発は、それぞれのゼミごとの特徴が強いかもしれません。
なんか、合うトレーナーの所に行けば幸せになれると思います。

## 応募について

さて、この不十分な説明で応募したくなってきたでしょうか？応募したくなくても先に進みます。私の周りには応募した人しかいないので。
応募の際には応募課題に取り組む必要があります。

セキュリティキャンプを知っている人ならば、ここで先人達の応募課題晒しを見たくなるでしょう。私も見たくなりました。
しかし、そんなものは存在しません。公開が禁止されているからです！
まあ、頑張ってください。SecHack365 に対する思いの丈を書き連ねれば、あとは祈るのみです。

## さいごに

6月に始まった SecHack365 も、12月に入って終わりが見えてきました。
参加しているトレーニーにとっては気が気ではない時期ではありますが、終わるということが次が始まるということです。多分。
そんなわけで、来年こそは！と思っている方は、募集開始に気付けるようにアンテナを張っておいてくださいね！

次回の [SecHack365 説明会](https://sechack365.nict.go.jp/orientation/) は 12/16 (金) のようです。
分からないことがあれば質問もできるので、興味があれば是非参加してみてください！

[^1]: https://sechack365.nict.go.jp/document/#p01:~:text=%E6%8A%80%E8%A1%93%E5%89%B5%E5%87%BA%E3%81%A8%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%92%E4%B8%A1%E7%AB%8B%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%8C%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%BF%E3%83%BC%E3%80%8D%E4%BA%BA%E6%9D%90%E8%82%B2%E6%88%90
Vyatta のインストール

## 前提
DNS サーバのインストールが終わって、ふとルータもあった方がよいことに気づいた。（そして、今日は土曜日なのであまり難しいことはしたくない。）というわけで、Vyatta をインストールしよう。
## 環境
VyOS 1.4.0
(vyos-1.4-rolling-202212030318-amd64.iso)
## 設定
https://vyos.io/ にアクセスして`Rolling Release`をクリックします。
※LTS Release は有償版です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/a41f125b-11a7-94b8-d62c-5cc0a604fc93.png)
とりあえず、いっちゃん上にあるやつをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/2d1ab15e-d13b-ec97-408c-1ecda9428197.png)
### 1. 作成タイプの選択
仮想マシンを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/59d5553d-1523-a9c2-9001-e43c0bbef907.png)
### 2. 名前とゲストOS の選択
ゲスト OS ファミリは`Linux`、ゲスト OS のバージョンは`Debian GNU/Linux 9 (64 ビット)`にした。VyOS は Debian GNU/Linux で動くらしいんだけど、どのバージョンにすればいいかわからなかったので、とりあえず、最新で。

参考）一度は目を通した方がいいやつ。
https://docs.vyos.io/en/latest/installation/install.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/d3353bd2-f7a6-2651-caa9-5b592c874dba.png)
### 3. ストレージの選択
空き容量が大きい方を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/de5db84f-5449-280c-e41f-6d63edaf815f.png)
### 設定のカスタマイズ
ここで少しだけカスタマイズをした。メモリ`1024 MB`、ハードディスク 1 `4 GB`に。
ちょっと節約。
`CD/DVD ドライブ 1でデータストア`に保存している Vyatta の ISO ファイルをマウントする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/363f02c6-3aee-fd11-d027-c769a8997cab.png)
### 5. 設定の確認
`完了`をドンと押す！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/7a64d95a-1e4c-9ef1-050e-0545a51e0368.png)
## Vyatta にアクセス
ログイン画面登場。初期は`vyos/vyos`でログインできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/6df6cfa3-e1f1-dbb3-5143-f4455948f6ed.png)
アクセス完了！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/83947cc8-7264-f1df-0fc7-f04b5dbc16a0.png)
## Permanent installation とやら
これをやらないと次に起動すると設定が消えてしまうらしいので、設定しておく。
https://docs.vyos.io/en/latest/installation/install.html#permanent-installation

```
$ install image
```
`Y`からのエンター！エンター！からの、Yes！（No のままエンターしちゃだめｗ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/7271e201-2bd1-4437-840f-03cf65678fbe.png)
あとは、だいたいエンターで、vyos のパスワードを 2 回入力して、エンターで完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/66f40e7a-9e50-2b64-7355-113cb0187b43.png)
最後にリブートしておく。(コマンドは`$ reboot`)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263451/7cc88301-7256-84e7-a224-52de5c30ccd1.png)
ついでにバージョンの確認をする。
```
$ show version
```
CCIE 保持者としてはこのコマンドは地味にうれしいｗ
今日はここまで。
Macを使わずWindowsだけでiOSアプリをデバッグする方法(.NET MAUI)

# はじめに
VisualStudioと.NET MAUIを使うとMac無しでiOSアプリをデバッグすることが簡単にできるようになりました。
今回はその方法についてご紹介します。

# WindowsだけでiOSアプリがデバッグできるようになる利点
1.デバッグの際わざわざMacを引っ張り出してこなくてもよくなる
2.Macを買わなくても済む
3.Windowsの便利ツールを生かした環境でそのままアプリの開発からデバッグまでできる。PowerToysはいいぞおじさん「PowerToysはいいぞ～」

# 必要なもの
1.AppleDeveloperProgramに登録・・・AppleDeveloperProgramに登録しないとiOSデバイスのデバッグはできません。(どうせアプリをストアに出すのにAppleDeveloperProgramは必要だからこの機会にでも登録しなさい。(年額13000円程度))
2.iPhoneやiPadなどのiOSデバイス・・・これがないと始まりませんね。VisualStudio内のiOSエミュレーターでのデバッグはMacを別途必要とします。
3.iCloudアカウント・・・AppleDeveloperProgramに登録したり、PCとiOSデバイスをつなげるために必要になります。
4.WindowsPCとVisualStudio、そして.NET MAUI・・・MAUIでクロスプラットフォーム開発をしたいならVisualStudioは必須です。(無料版でもiOSデバッグはできます。)

# 手順
### 1.AppleDeveloperProgramに登録する
以下のサイトを参考にAppleDeveloperProgramに登録しましょう。
https://developer.apple.com/jp/support/enrollment/
MacやiOSデバイスのアプリ、Webサイトから登録できます。
年間$99(約¥13000程度)の登録料が必要になります。
本名で登録しないと審査に落ちる場合があるようなので注意。
2日程度待てばAppleからメールが届き審査・登録完了となります。

### 2..NET MAUIでアプリを作る
テスト用のアプリを作成しましょう。
.NET MAUIのテンプレートのサンプルアプリでもよいです。

### 3.デバッグ選択メニューからiOSローカルデバイスを選択しデバッグ
iPhoneやiOSデバイスをPCにつなぎ、デバッグのデバイス選択メニューから「iOSローカルデバイス」、自分のデバイスを選択
![iOSLocalDevice.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3007605/c9bfacd6-aea5-2b03-97de-a191e11dcef3.png)
そのままデバッグボタンを押すとダイアログがでるので、そのダイアログの指示通りにiTunesをインストールしたり、iOSデバイスを認識させたりする。
開発者アカウントの追加は作成したアカウントの種類を選ぶこと。
たぶん大多数は個人アカウントを選択するのかな
![個人アカウントでサインイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3007605/d727d5bd-654d-3feb-095c-d2911c219481.png)
AppleStoreConnect APIキーの情報を入力するダイアログが出てくるので、ここを放置し以下のサイトからAppleStoreConnectにログインする
https://appstoreconnect.apple.com/login
ログイン後「ユーザーとアクセス」に入り「キー」タブに移動して「APIを生成」ボタンをクリックします。
ダイアログでは名前はわかりやすい名前(ユーザー名など)でよいです。アクセスはとりあえず「Admin」を選択しておけば間違いないです。
キーが生成されたらその生成されたものを放置していたダイアログに入力します。
下の写真の番号の通りに入力していきます。
![AppleStoreKey.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3007605/1440849c-4fc0-c6eb-a4a0-c4fb935c2539.jpeg)
![AppleConect.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3007605/3a619007-c2f6-abdb-87d1-afd6eaa89ba9.jpeg)
④の秘密キーのパスについては、「APIキーをダウンロード」ボタンからダウンロードされたファイルのパスを指定します。
私はダウンロードしたファイルをわかりやすい場所に移動させ、その移動先のパスを指定しました。
追加を押し、チームの選択では自分のAppleDeveloperProgramのIDを指定して完了ボタンを押すとiOSデバイスでデバッグが実行され、iOSデバイスにアプリがインストールされます。
そのアプリを開き動作の確認をしましょう。

### 4.間違えて登録してしまった時の修正
間違えて登録してしまったとき、再度先ほどのダイアログの設定を変更したい場合があると思います。
その時は、VisualStudioの機能だけでは修正ができないので、「ツール」→「オプション」→「Xamarin」→「iOSの設定」→「アーカイブの場所」で指定されているパスの上層フォルダに「Provisioning」フォルダがあり、そのフォルダの「accounts.pass」ファイル、「CookieStorage」の「Cookie.jar」ファイル、「DeveloperStorage」の「DeveloperStorage.json」ファイルをすべて削除することで、再度VisualStudioを開きデバッグを行うともう一度設定できるようになります。
図解人材マネジメント入門に学ぶ、人材開発とは（連載第12回/25回）

# 前回の記事
https://qiita.com/rf_p/items/0400d124fb367fa64cdc

# 連載の構成
- この記事は、[マネジメントについて一人で考える Advent Calendar 2022](https://qiita.com/advent-calendar/2022/management-solo)の連載記事です
    - 1記事目から読んでいただいても良いですし、気になる記事から読んでいただいても問題ありません
- 全25回分の構成は、次の通りです
    - 第1〜6回：ドラッカーの『マネジメント』を中心に解説します
    - 第7〜13回：『図解人材マネジメント入門』を中心に解説します
    - 第14〜22回：『エンジニアのためのマネジメントキャリアパス』を中心に解説します
    - 第23〜25回：私の経験談を中心に、まとめに入ります

# 人材開発
- 人材マネジメント6項目のうち5番目は、人材開発です
- 会社はOJT・Off-JT・自己啓発の支援によって、人に投資し、人材開発をする必要があります
    - 疎かにすることによって、人に対し投資してくれる会社へ転職が増えたり、成長意欲の低い入社候補者の割合が増加しかねません
- ただしITエンジニアに当てはめて考えてみると、やや特殊な事情もあります
    - なぜなら他職種に比べ、『業務時間外で自己学習をすることは当たり前』と感じる方が多いためです
        - 仕事と趣味の境界が曖昧で「好きでやっているから」
        - 業務外で学び続けないと、自身のスキルが陳腐化するから
        - 等の理由が挙げられます
- と言えど、人材開発を会社がしなくていい、というわけでは当然ありません
- 例えば家庭の都合により、若い頃のように業務外で学び続けるのが難しくなるケースも多いでしょう
- 法的な観点や会社のモラルとしても、業務時間外で学ぶことを強制したり、当たり前にするのは問題が出てきます

## 自己啓発の支援
- OJTやOff-JTの仕組みを整えるのはもちろん、自己啓発も会社から支援することが大切です
- 例えば
    - 社外勉強会を業務時間内で参加できたり、出張費の補助をする
    - 技術書は高額なので、購入費補助をする
    - OSS活動を業務時間で行えるようにする
    - 社内LT会等、学ぶ場を積極的に提供する
    - 等です
- 「エンジニアなら、自ら学ぶのが当然でしょ」という考えも理解はできるのですが、会社組織はどれだけ支援しているか？は重要です
- 会社から時間やお金は捻出しないのに、自らは時間やお金を捻出しろと言うのは都合が良すぎる考えではないでしょうか
- むしろその状況に違和感を覚えない人たちしか残らない環境を、会社が作ってしまっているとも言えるのではないでしょうか

# 幹部育成
- 異動の目的、最後の1つは幹部育成です
    - 人材開発に含まれる要素ではありますが、敢えて分離されているようです
- 例えば同じチームの中で次期マネージャー候補が2人いるとしたら、どうしますか？
    - より見込みのある方に、次期マネージャーを任せるのは1つの手です
    - チームを2つに分けて、それぞれに次期マネージャーを任せるのも手です
    - さらに別の手として、違うチームに異動させるのもありでしょう
- 人それぞれ適正は異なるので
    - 大人数チームより、少人数チームで才能を開花させたり
    - 保守運用がメインのチームより、泥臭く0から作り上げるチームで才能を開花させる
    - といった可能性も大いにあります
- こういったことを考えるのも、マネージャーの役割です

# 自己啓発をどれくらい重視するか
- では、OJT・Off-JT・自己啓発といった手法は、どれも同じぐらい必要なのでしょうか？
- 1個参考になる考えとしては、ロミンガーの法則（7・2・1の法則、70:20:10の法則）というものがあります

> 米国の人事コンサルタント会社であるロミンガー社は、経営幹部などリーダーシップを発揮するために有効であった要素の調査・分析を行いました。その結果、7割が業務経験、2割が薫陶、1割は研修であることが判明し、これをロミンガーの法則と名付けたのです。「70：20：10の法則」とも呼ばれる業務経験・薫陶・研修は、すべてのバランスがとれてこそ、効果を発揮します。  
> 引用：[ロミンガーの法則とは？「70：20：10」の法則の内容を徹底解説](https://schoo.jp/biz/column/1234)

- 要素として
    - 7割が仕事を通じての経験
    - 2割が先輩や同僚からのアドバイス
    - 1割が研修や自己研鑽
- といったものです

- 前提として、盲信すべき絶対的な法則ではないことは押さえておく必要があります
    - リーダーシップを発揮するために有効であった要素
        - つまり"成長"に関する全ての事柄に適用されるかは不明
    - 学術的に導かれた黄金比というわけではない
        - あくまでも経営幹部等にヒアリングした結果であり、大いに主観が混じる
- ただしこの3要素は常に必要な要素です
- また、これらが三位一体となり、どれかが大きく欠けていると成長が鈍化するのは、経験則として大きくズレてはいないです
- ITエンジニアに当てはめると、"1割"である研修や自己研鑽は、実際もっと大きいのでは？と感じています
    - 例えば仕事の中で新しい技術を導入したい時を考えてみます
        - そもそも日頃新技術のキャッチアップができていなければ、提案・検討の幅が狭くなります
        - PoCの工数を取れたとしても、座学で基礎知識を学んでいなければ、実務に活かすのは難しくなります
    - エンジニア領域以外で言えば、7割・2割（経験やアドバイス）を元に1割（読書）をして抽象化できます
    - しかしエンジニア領域で言えば、1割（読書や趣味のプログラミング、キャッチアップ）を元にして、7割・2割（経験やアドバイス）に活かす機会が多くあります
    - すると最初の"1割"は重要であり、そこを会社として支援することは、エンジニア組織全体に影響を与えるのではないでしょうか

# 終わりに
- 今回は人材開発、その中でも自己啓発を中心に解説しました
- 次回は人材マネジメント最後の1つ、組織開発です

# 次の記事
https://qiita.com/rf_p/items/0e1f4554236d9405ba88

- 連載記事一覧
    - [マネジメントについて一人で考える Advent Calendar 2022](https://qiita.com/advent-calendar/2022/management-solo)
PS5(とM5Atomで)でtoio core cubeを動かす

# はじめに
　そういえばtoioもPlayStation5と同じSIEの製品なのに連携動作することがないのはなぜなんだーということで、どうにかして動かんかなとやってみました。

# 直接は無理なのでブラウザからUIFlowを使って動かしてみる

　SIEの開発者登録してUnityとかでPS5/PS4ビルドしたゲームとして実装したらできそうな気がしますが、それはさすがにめんどくさそうなので、webブラウザからUIFlowとM5 Atomを使って動かしてみます。
　toio Doも試してみたのですが、Web BLEは流石に動かないようでだめでした。

## PS5のWebブラウザを使う方法
　公式にはPS5にはブラウザアプリがないことになっていますが、Googleで検索するとブラウザを使う方法がいくつか出てきます。
 - twitter連携を行って自分のツイートにURLを埋めてつぶやき、それをブラウザで表示させてリンクをたどる方法
     - [PS5のブラウザ利用方法](https://xn--nuro-ec4c955q3ibyw2bgf2b038c.jp/ps5-browser/)
 - Youtube連携の設定のところで、プライバシーポリシーのページからgoogle検索ページに飛ぶ方法
     - [PS5でgoogle検索しよう。](https://youtu.be/oVPzuKh_Pn4)

　今回は後者のyoutube連携の設定からgoogle検索ページに飛び、UIFlowのページを開く方法で試してみます。

## 事前準備
　[M5 Atom matrix](https://www.switch-science.com/products/6260?gclid=CjwKCAiAhKycBhAQEiwAgf19ehDYcgEj5feV_GODwuwRqyzmfcGrK-GpGFMM_tuuKSLmxSIMyijAOhoCLUUQAvD_BwE)または[M5 Atom Lite](https://www.switch-science.com/products/6262)を用意します。
　(2022.12.3 現在、M5 Atom以外のM5製品でUIFlowを使った場合、toio core cubeは使えません)
　Windows x64、MacOS x64、Linux x64のPCで、[M5 Burner](https://docs.m5stack.com/en/download)を使ってM5 AtomにUIFlow用のファームを書き込みます。(今回試したのはM5Burner-v3-beta-win-x64.zip)
　M5 AtomのWiFiネットワーク接続の設定を行い、UIFlowから接続するためのAPIキーを調べておきます。
　UIFlow Configで、APIキーを確認し、Start Mode:は 「Internet Mode」にしておきます。

## さあやってみよう
　PS5のYoutube連携の設定からGoogle検索ページに飛び、UIFlowを検索します。
<img alt="[184ce09fbda20-screenshotUrl.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/13f52e71-dba9-2754-1de3-69da1381fcdd.jpeg" width=50% />
<img alt="[184ce09fbda85-screenshotUrl.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/eaf2e548-bb41-3583-8b76-e4843a0f837a.jpeg" width=50% />
<img alt="[184ce09fbda72-screenshotUrl.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/699a10d4-c20c-e58a-ea43-8d5ef6bc8327.jpeg" width=50% />

　M5 Atomに給電して起動し、WiFiに繋がったことを確認します。(つながるとLEDが緑色になります)
<img alt="[PXL_20221201_074135875.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/c6bfbb93-f923-f752-0b41-b9f4dfb3a4df.jpeg" width=50% />

　UIFlowの編集画面の設定からAPIキーを入れてconnectします。
<img alt="[184ce0ac66512-screenshotUrl~2.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/eff7641e-4b50-29eb-1ad2-934d2207b382.jpeg" />

　M5 atomのLEDを変化させつつ、toio core cubeとつないでtoio core cubeの左右の車輪を動かすプログラムを書いてみます。操作はマウスもキーボードも使えず、DualSense(ゲームパッド)しか使えません。
<img alt="[184ce0bab8c44-screenshotUrl.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/935064e8-b1aa-c405-d54d-0d8a25dc55ec.jpeg" width=%50 />

　動くかな

　動いた！
<img alt="[PXL_20221201_075550563.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/b9882c6a-0f03-34a0-7a26-303fb735646b.jpeg" width=50% /><img alt="[PXL_20221201_075551807.jpg]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/60dc5d24-36fd-2f96-c066-f67fc7ac9ba6.jpeg" width=50% />

https://youtu.be/tX0D1c2oxQs

# おわりに

　PS5から(M5 Atomを通して)toio core cubeを動かすことができました。
　PS4についてはスクリーンショットなどを後日追記しますが、PS4ではブラウザアプリが表に出ているのでそのままUIFlowを動かせばあとは同じです。
HTMLも触れたことのない私が、STUDIOでwebサイトを公開してみた


■STUDIOとは？
https://studio.design/ja
・ブラウザ上で利用可能
・基本無料（もちろん私は無料の範囲内で作成）
・コーディング不要のため、コードを書くという経験がなくても挑戦しやすい
・とにかくいろんな人・企業が使ってるイメージある（STUDIOのHPにも事例たくさん）
・もちろん、レベルの高いwebサイトを作るためにはwebサイト制作に必要な専門的知識は必要だろう

■webサイト公開のきっかけ
:star:DMM WEBCAMP卒業生向けの学習イベントにて、STUDIOを紹介。運営で携わっていた自分も学べた
:star:レンタルサーバーの用意がなくてもOK
:star:自分の紹介ページを作ってTwitterに貼り付けたかった
:star:webサイト作ってみたことがあるって言ってみたかった（笑）

■出来上がったwebサイトについて(webサイトはhttps://twitter.com/miki___n からご確認ください！)

:hatched_chick:ページ上部![スクリーンショット 2022-12-03 21.01.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2098779/67485feb-b8fb-146b-9477-20a65e292f33.png)
:hatched_chick:miki_SNSのところに使用している画像が、食パン→チーズ→チーズサンドになってていちばんの推しww
![img_miki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2098779/19a44222-87a9-6980-cd70-4343062277c5.png)
:hatched_chick:レスポンシブ対応まで合わせて制作7時間!
:hatched_chick:お問い合わせから送られてきたメッセージは紐づけた先の私のGmailboxに届くから感動した
![スクリーンショット 2022-12-03 21.05.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2098779/241ed17f-7797-8d72-d020-981899b2fb8c.png)



■webサイト制作未経験が感じるSTUDIOの難しさ
:sunny:レスポンシブの対応
PCで作成していたが、スマホやタブレットで表示される時の違和感を無くすために相当な時間を要した・・・・
もしかしたらまだ違和感ありありかも・・・
:sunny:CSSの要素を全然盛り込めなかった
文字の動きも見た目ももっと工夫できたらなぁと心残り

■まとめ
webサイトを作ってみるという目標で走り出したが、作り始めてからは時間を忘れ没頭していた。（めっちゃ楽しかった）
"食べ物"という見た目のテーマをブラさずに私らしさを出し、このwebサイトを見た方が
みきと一緒にご飯食べたい！みきと一緒に働きたい！と幅広く思ってくれたらいいなぁと願っている。
【Swift】戻り値を使用しない場合の警告を出さないようにする

# はじめに
コードレビューをしている時に見たことないアノテーションがあったので調べてみました。
どうやら、`@discardableResult`これは戻り値を使用していない場合に警告を出さないようにするものらしいです。

# 通常
通常は戻り値がある場合に戻り値を使用しないと警告が表示されます。
![スクリーンショット 2022-12-03 20.59.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7e89217f-8f80-14fb-798f-3567ff97ee6f.png)

# @ discardableResultを使用
警告が消えました。
![スクリーンショット 2022-12-03 21.00.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8f9e7171-e753-235b-c939-a38976acb78c.png)

# おわり
これはあまり使い道が分かりませんでしたね
アノテーションマスターになりたいです
機能開発から考える「お金」と「チーム」の話

## 前置き
メタップスアドベントカレンダー 4日目
今年はメタップスに入社して、10年の節目となりました。

これまでメタップスで関わってきたプロダクトも10を超え、色々な出来事もあった中で、今回はプロダクト開発時によくありがちな「顧客要望から機能開発に至るまで」のビジネスサイド、開発サイドの意識しておきたい部分などを「お金」と「チーム」の視点でまとめてみました。

## 顧客要望からの開発依頼

「お客さんがこんなもの欲しがってました！」
「この機能があれば導入が進みそうです！」
ビジネスサイドにとっては非常に嬉しい話です。
一刻も早くほしいと考えていることでしょう。

## ビジネスサイドの意識

営業の場合、目標に近づくため開発サイドが作ってくれれば契約が取れるためこういった話があると、開発してほしいと懇願してくることがあります。

一歩引いて考えてみましょう。

営業サイドが欲しがっている機能で契約が取れて、売上が上がったとします。

この売上を形成するものはこの機能があることが前提ですので、`機能開発コスト` がまず差し引かれます。

サブスクリプションモデル（月額課金モデル）の場合、LTV（顧客生涯価値）を意識すると思いますので、

`LTV = 単価 × 粗利率 × 継続月数 - 機能開発コスト`

となるイメージですね。

チャーンレート（解約率）が低ければ機能開発コストが高くてもどこかで回収できそうなイメージを持つと思いますが、ここに更に `運用コスト` が入ってきます。

そのため、粗利の部分に月次の運用コストが差し引かれるわけです。

`LTV = (単価 × 粗利率 - 運用コスト) × 継続月数 - 機能開発コスト`

つまり、イメージとしては原価率が上がる = 粗利率が下がる 状態になるわけです。

ビジネスとして、原価率が上がるということは限界利益が下がるということになるため、シビアに判断されるべき内容ですが、開発サイドに相談のないまま、機能開発が決まってしまうケースがあったりするのは非常に危険ですね。

例えば、ラーメンを一杯食べてもらうために、豪華な個室を用意してほしいというような発想の場合もあったりします。

この場合、確かにこのお客さんは求めていることなので、利用してくれるかもしれません。が、他のお客さんは全く求めていないものなので、一切利用しないものを日々運用しなければならないわけです。

要は、ターゲットとする多くの層が求めている機能なのか。
この機能をつけることにより、運用コストは上がるが、それ以上に満足度や利用率が上がり、
`運用コスト < 増加するLTV`
となるかどうかが重要になるのですが、ここが超初期フェーズだと顧客への個別対応で目先の売上を求める場合、慎重に判断したいところです。


## 開発側の意識
前述したケースを開発視点でどう配慮するか。
結論としては、前述した内容の中で、 `開発コスト` と `運用コスト` を提示してあげましょう。

いままでやってきたことで、「どのくらいで作れますか？」という問いに答えてきたと思います。

いわゆる、「見積もり」です。

本来的には「いくらで作れますか」という話になるのですが、例えば「1ヶ月ください」と答えられた場合に、この機能開発コストをざっくりと金額で換算することになります。

ただ、気をつけてほしいのは、ここでどれだけ日々の運用コストが上がるのか、というのを考慮されていない場合があるということです。

3人の開発チームで、「機能開発」「運用」「改善」をギリギリで行っていた場合、この機能は1ヶ月で作れたとして、その後の運用が膨らむと、このチームのキャパを超えることになります。

このキャパを超えると、`採用` が発生します。つまり固定費の増額です。
※正社員採用の場合

この運用コストを下げるために、日々のリファクタリングなどを行っているというわけです。

よほど突拍子もない話でない限り、ビジネスサイドで想像できる「できると思う」に対して、開発側で技術的に「できない」というものはほとんどないと思います。
ただし、事業としての「できる」「できない」の話は、今のビジネスの収益性や今後の運用面などのコストも踏まえなければ判断できない部分も多く、開発側からの情報としては`機能開発コスト`と`運用コスト`を提示し、ビジネスサイドとしっかり議論して判断したいところです。

## まとめ
自社開発において、`売れるものを作る`ことはとても重要です。
ビジネスサイドで声を集め、作るべきものを考える。
開発サイドで作るべきものに対してどう実現するかを考え、ものを作っていく。
この流れの中でちょっとした認識の差で関係性が崩れると、チームは簡単に崩壊します。
今回は考え方としてのほんの一部ですが、ビジネスサイドと開発サイド、お互いを理解し、信頼して、意識して状況報告や、相談が気軽にできる関係性を作れれば屈強なチームが作れるので、是非。

崩壊しているときには本当にプロダクトが進まなくなるのを目の当たりにしてきて、結構辛かったので、少しでも参考になれば幸いです。
ExchangeOnline NDR 5.6.0 への対処

# はじめに
この記事はOffice365管理者向けのエラーナレッジです。
ExchangeOnlineでのメール配信トラブルが発生したときは以下２つが手掛かりになります。

- 送信者に届く配信不能通知（NDR）
- ExchangeAdminCenter > 対象メッセージ追跡結果の内容

なお今回発生したNDRのエラー内容は以下です。
```
Error: ‎550 5.6.0 CAT.InvalidContent.Exception: TextConvertersException, 
Input document is too complex.; 
cannot handle content of message with InternalId 16548509019752, InternetMessageId ‎
```
発生した状況としては
半年前から一つのスレッドで相手とラリーしているメールで
急にメール送信が失敗したとのこと。

# 解消策
スレッドに返信ではなく新規にメールを作成したところ、正常に送信できました。

# 解消策までの経緯
エラー内容を見てみると「メール本文が複雑すぎる？」と読み取った。
送信者に「なにか普段と異なる編集を行ったか？」確認してみると、特段何かをやったわけではなく
文書のみの構成とのこと。
少し気がかりだったのは、半年も同じスレッドでやり取りしているので
「もしやそれが原因なのでは？」と考え上記解消策に至った。

この対応はおそらくワークアラウンドになると思われるので
真の解消策をご存じの方はコメントよろしくお願いします！🙇‍♂️🙇‍♂️
MacOSにFlaskのローカル開発環境を作る

MacOSでFlaskアプリを開発するための最小限の環境を作成するメモ。

## 各種バージョン
- Python 3.8.9
- pip 20.2.3
- Flask 2.2.2

## プロジェクトファイル「test」を作成

    mkdir test
    cd test

## 「test」ディレクトリ内に仮想環境「venv」を作成

    python3 -m venv venv
    source venv/bin/activate

ターミナルのプロンプトの先頭が(venv) $ になれば仮想環境を有効化できています。

仮想環境を無効化する場合は、

    deactivate

## flaskをインストール
仮想環境を有効化した状態で、以下を実行

    (venv) $ pip install flask

インストールされたパッケージ一覧を確認

    (venv) $ pip list

## ブラウザで「Hello, World!」と返すだけの最小限のアプリを作る
「test」ディレクトリに「app.py」ファイルを作成し、以下を記述

```Python:app.py
import sys

from flask import Flask,request

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, World"

if __name__=="__main__":
    app.run()
```

## 環境変数を設定する
Flaskアプリをローカルで起動するために、

- FLASK_APP
- FLASK_ENV

という2つの変数を設定します。

    (venv) $ export FLASK_APP=app.py
    (venv) $ export FLASK_ENV=development

### （追記）dotenvをインストールして.envファイルから環境変数を読み込む

毎回環境変数をexportするのは面倒なので、.envファイルに記述した環境変数を自動で読み込んでくる設定にします。

    (venv) $ pip install python-dotenv

.envファイルを作成して以下を記述

```.env
FLASK_APP=app.py
FLASK_ENV=development
```

## Flaskアプリを起動

    (venv) $ flask run

アプリが正常に起動すると、

    Running on http://127.0.0.1:5000

と表示されるので、ブラウザでhttp://127.0.0.1:5000
にアクセス。

![helloWorld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2781928/1b317bde-067b-cccd-9e38-40c4c66b139e.png)



と表示されていれば成功です。