OmniAICreator/Qiita-1.07M huggingface dataset:
[Flutter] レビュワーに配慮のあるコードを書こう

![スクリーンショット 2023-10-10 19.29.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/304fa692-ee08-ad0e-b4f4-684edc5dcc51.png)


<b>こんにちわ。いせりゅーです。</b>

9月は忙しかったですが、10月に入り、ようやく落ち着きを取り戻してきました。そのため、今後はたくさんのアウトプットを目指します！

業務中にレビューを受けた際、いくつか非常に参考になるアドバイスを得ることができました。その内容を共有し、皆さんと一緒に学んでいきたいと思います。



# 問題の背景
- 自動生成ファイル（.g.dartや.freezed.dart）はレビューする際に視界を遮ることがある。
- 生成ファイルを意識せずにレビューを行うことで、効率を上げられる。

などと考えていました。この背景を踏まえ、問題の解決策として2つの方法を紹介します。

:::note info
他にもありましたら教えていただけると幸いです。
:::

# 解決策のその１ `.gitignore`に記載を行う


こちらに記載の追加方法として
```.gitignore
*.freezed.dart
*.g.dart
```

:::note info
メリット
`gitignore`に追加することで、「Files changed」の件数が少なくなり、レビューがしやすくなります。
:::

:::note warn
デメリット
他の開発者がプロジェクトを取り扱う際、自動生成コマンドの実行が必要となるため、それに関する説明を `README.md`などに記載する配慮が必要になる場合があります。
:::



# 解決策のその２ `.gitattributes`に記載を行う

以下のディレクトリ構造で、`.gitattributes`に追記を行います。（一部省略しています🙇）

```
android
ios
lib
.gitattributes <-こちら
.gitignore
```

具体的な記述例は以下のとおりです。
今回は、`.freezed.dart`と`.g.dart `の記載を行いました。

```.gitattributes
*.freezed.dart linguist-generated=true
*.g.dart linguist-generated=true
```

:::note info
メリット
↓レビューで差分を見た時にデフォルトで閉じられている状態になります（すごい😁）
:::



![スクリーンショット 2023-10-10 19.06.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/e11e007f-e295-24d9-bac7-f255f0328035.png)

上の画像は、私が現在取り組んでいるゆめみの研修課題のスクリーンショットです。
課題はまだ途中ですが、頑張って進めています🔥

https://github.com/iseruuuuu/flutter_yumemi_training_app


# 最後に

個人的には、2つ目の方がいいと思いました。理由としては

- `.gitignore`に追加すると、リポジトリをクローンした場合、必要なファイルの生成が必要となる。
- 「Files changed」の数は多いものの、関連ファイルはデフォルトで折りたたまれているので、実質的なレビューコストはほとんど変わらない。

以上、Flutter開発でのより良いレビュー体験を目指しましょう😁
C#でMicrosoft RDLC Report DesingerのDataSetを使用する

# 1. はじめに
* C#の.NET 6で一覧を表示する帳票を出力したい
* データベースからではなくオブジェクトから帳票にデータをセットしたい

# 2. 開発環境
* C#
* .NET 6
* Visual Studio 2022 Community
* Windows 11
* Microsoft RDLC Report Desinger 2022
* ReportViewerCore.WinForms (NuGet)

# ３. データセットの作成
* 新規作成からデータセットを追加する
* データセットにDataTableを追加して、帳票に出力するプロパティを定義しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/10d5522a-e1e2-96c7-9619-9e78d0c596e7.png)

# 4. DTOファイルの作成
*　DataTaleの定義を使用したほうがよいかもしれないが、DTOファイルを作成してみる
```Csharp:Sales.cs
[Serializable]
public sealed class Sales
{
    public string Customer { get; }
    public string Price { get; }

    public Sales(string customer, string price)
    {
        Customer = customer;
        Price = price;
    }
}
```

# 5. レポートファイルの作成
* レポートファイルを追加してテーブルを配置する
* データセットを追加してテーブルにフィールド名を定義する
![image 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/6d1d94b9-cc3c-97b4-411b-85c15891633e.png)
![image 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/2ddd1c81-1f26-6414-78c2-5cebe3afbf8a.png)

# 6. Windowsフォームアプリの作成
```Csharp:Form1.cs
using Microsoft.Reporting.WinForms;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // ReportViewerコントロールを追加する
            this.Controls.Add(this.reportViewer1);

            // ReportViewerコントロールにレポートを設定する
            reportViewer1.LocalReport.ReportPath = @"..\..\..\Reports\Report1.rdlc";

            // ディスプレイモードを設定する(Normal/PrintMode)
            reportViewer1.SetDisplayMode(DisplayMode.Normal);

            // テーブルへデータソースを設定する
            var list = new List<Sales>();
            list.Add(new Sales("AAA", "1,000"));
            list.Add(new Sales("BBB", "2,000"));
            list.Add(new Sales("CCC", "3,000"));

            ReportDataSource datasource = new ReportDataSource("Sales", list);
            reportViewer1.LocalReport.DataSources.Clear();
            reportViewer1.LocalReport.DataSources.Add(datasource);

            // レポートをリフレッシュする（これをしないと表示されない）
            reportViewer1.RefreshReport();
        }
    }
}
```

# 7. 参考文献

https://www.aspsnippets.com/Articles/Bind-DataSet-to-RDLC-Report-in-Windows-Forms-Application-using-C-and-VBNet.aspx
.NET MAUI iOSのReleaseビルドで多言語化できない場合

# 現象

リソースファイルでアプリをローカライズ(多言語化)している.NET MAUIプロジェクトでiOSアプリをReleaseビルドすると多言語化できていない(Debugビルドだとできている)。

MAUIの多言語化については[こちら](https://learn.microsoft.com/ja-jp/dotnet/maui/fundamentals/localization#localize-text)を参照。

# 解決方法

.csprojファイルに下記を追記。

```
<PropertyGroup>
    <EnableAssemblyILStripping>false</EnableAssemblyILStripping>
</PropertyGroup>
```

# 参考

* https://github.com/dotnet/maui/issues/12684#issuecomment-1384092426
AWS SAA-C03対策メモ CNAMEコードとエイリアスコードの違い

- CNAMEコード：別のホスト名にマッピングするだけでなく、**そのホスト名を正式名**とみなします。そのため、CNAMEコードを設定したホスト名には、Aレコード、AAAAレコード、MXレコード、TXTレコードなどの**DNSレコードを追加できません。**

- エイリアスコード：別のホスト名にマッピングするだけで、他のDNSレコードを許可します。そのため、エイリアスコードを設定したホスト名には、Aレコード、AAAAレコード、MXレコード、TXTレコードなどの**DNSレコードを追加できます。**

-**詳しい解説**
    エイリアスコードとCNAMEコードの違いは、**別のホスト名にマッピングする**という点では同じですが、**許可されるDNSレコード**と**DNS名前解決の流れ**が異なります。
**エイリアスコード**は、別のホスト名にマッピングするだけで、他のDNSレコードを許可します。そのため、エイリアスコードを設定したホスト名には、Aレコード、AAAAレコード、MXレコード、TXTレコードなどのDNSレコードを追加できます。
            
**CNAMEコード**は、別のホスト名にマッピングするだけでなく、**そのホスト名を正式名**とみなします。そのため、CNAMEコードを設定したホスト名には、Aレコード、AAAAレコード、MXレコード、TXTレコードなどのDNSレコードを追加できません。
            
**DNS名前解決の流れ**は、以下のようになります。        
    1. クライアントがDNSサーバーに、ドメイン名のIPアドレスを問い合わせる。
    2. DNSサーバーは、ホストゾーン内のレコードを調べて、該当するレコードを返す。
    3. クライアントは、返されたレコードの値を元に、IPアドレスを取得する。
            
**エイリアスコード**の場合、ステップ2でCNAMEレコードが返された場合、クライアントはCNAMEレコードの値を元に、別のホスト名のIPアドレスを問い合わせる。
            
**CNAMEコード**の場合、ステップ2でCNAMEレコードが返された場合、クライアントはCNAMEレコードの値を元に、別のホスト名の正式名を取得する。
            
**具体例**

**エイリアスコード**の場合、以下のようになります。

- ドメイン名: example.com
- エイリアスコード: www.example.com

この場合、クライアントがexample.comにアクセスすると、DNSサーバーはwww.example.comのCNAMEレコードを返します。クライアントはwww.example.comのCNAMEレコードの値を元に、www.example.comのIPアドレスを問い合わせます。
            
**CNAMEコード**の場合、以下のようになります。

- ドメイン名: example.com
- CNAMEコード: www.example.com

この場合、クライアントがexample.comにアクセスすると、DNSサーバーはwww.example.comのCNAMEレコードを返します。クライアントはwww.example.comのCNAMEレコードの値を元に、www.example.comの正式名を取得します。

**まとめ**

エイリアスコードとCNAMEコードは、どちらも別のホスト名にマッピングする点で同じですが、許可されるDNSレコードとDNS名前解決の流れが異なります。

エイリアスコードは、他のDNSレコードを追加できるため、**WebサイトのURLを変更する**などの場合に便利です。CNAMEコードは、**正式名を変更する**などの場合に便利です。

どのコードを使用するかは、用途に合わせて選択する必要があります。
pycryptodome , XOR

<!--2023/10/11-->
[picoCTF][Cryptography][Easy Peasy]

## Writeup
* oty.pyの確認
flag xor key　のバイト列が表示されている。・・・※１
フラグは32文字なことがわかった。
keyファイルは、50000文字を超えると、折り返すようです。
<br>

* 文字を49968文字を投入し、a(0x61)とXORした値を入手・・・※２
~~~bash
python -c 'print("a"*49968);print("a"*32)' | nc mercury.picoctf.net 64260
~~~
<br>

* 方針
(flag xor key) xor (key xor "a"*32) xor "a"*32 => flag
つまり
※１ xor ※２ xor "a"*32 => flag
となる予定。
<br>


* 必要なライブラリのインストール
~~~
pip install pycryptodome
~~~
<br>

* 入手した値をバイト列としてXORをした。
出力された値を、picoCTF{}でラップし、入力したら正解でした。
~~~python:xor.py
from Crypto.Util.strxor import *

# flag xor key
c = bytearray.fromhex("51466d4e5f575538195551416e4f5300413f1b5008684d5504384157046e4959")
# key xor "a"*32
k = bytearray.fromhex("03463d190702003d195004133d190356433d1902503d1950563d1900513d1959")
# "a"*32
a = bytearray.fromhex("61"*32)

print(strxor(strxor(c, k), a))
~~~
![answer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/1fcacdd8-9d24-4dcf-8330-6db04ccbaadf.png)
<br>

* 以上です。

## 参考サイト
https://pycryptodome.readthedocs.io/en/latest/src/util/util.html
https://qiita.com/Fulltea/items/e83c838bf9979b2e8faa
CyberChef

<!--
2023/10/10
-->

[picoCTF][Cryptography][The Numbers]

## Writeup
* アルファベットの何番目か、という問題。
手作業で答えを出したけど、CyberChefで解いてみた。
![answer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/cb536f5d-a65e-7279-1392-37332fd61710.png)
<br>

* 以上です。
サイズ、シェア、成長、傾向、地域別の需要状況予測によるWiFiテスト機器市場分析2022-2027


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574463/acbda85c-3207-fa8d-0d29-d8b4455f57b7.png)
"グローバルWiFiテスト機器市場レポートは、地域、トッププレーヤー、成長傾向によるさまざまなセグメント分析をカバーする業界の概要に焦点を当てています。 WiFiテスト機器市場レポートには、成長状況、業界収益、市場シェア、規模の包括的な分析が含まれています。いくつかの変化するダイナミクス、各地域による全体的な収入、価格、および売上高のデータを含むWiFiテスト機器業界の最新の傾向もカバーされています。

WiFiテスト機器市場レポートは76.96 Million USD in 2020 and will grow with a CAGR of 7.78% from 2020 to 2027.を成長させると推定されています。

レポートのサンプルコピーを入手する- https://www.industryresearch.co/enquiry/request-sample/18769700

この調査では、需要と供給の評価、および主要な業界プレーヤーの参加と市場シェアの成長統計についても詳細に説明しています。利益率、価格設定、収益比率、粗利益のすべてが部​​分的に決定されます。世界のWiFiテスト機器市場の成長要因を示すための信頼できるデータを収集するために、当社のアナリストはさまざまなアプローチを使用してきました。

タイプ別セグメント：
- Desktop WiFiテスト装置
ハンドヘルドWiFiテスト装置

アプリケーション別セグメント：
-家庭
-商業

レポートは、主要なプレーヤーとメーカー、および新製品の発売、パートナーシップ、合弁事業、技術、地域と業界の競争の観点からの細分化、利益と損失の比率、投資のアイデアなどの最新の戦略に焦点を当てています。効果的な製造技術、広告技術、市場シェアのサイズ、成長率、サイズ、収益、売上高、およびバリューチェーン分析の正確な評価。

トッププレーヤーによるWiFiテスト機器市場分析：

-Company A
-Company B

このレポートを購入する前に、質問がある場合は問い合わせるか共有してください- https://www.industryresearch.co/enquiry/pre-order-enquiry/18769700

この調査は、世界のWiFiテスト機器市場について学び、トレンド、製品の使用法、顧客と競争の動機付け、ブランドの位置付け、および顧客の行動について学ぶための優れたリソースです。このペーパーには、会社の詳細な目論見書が含まれています。レポートは、製品タイプ、トッププロデューサー、およびエンドクライアントの関連付けの論理的な配置を使用して、主要なゾーンの市場での位置と予測のニュアンスを示します。

対象地域別のWiFiテスト機器市場規模：
• 北米
• アジア太平洋地域
•ヨーロッパ
•中南米
•その他の地域

トレンドと予測の分析：市場のトレンド、セグメントと地域別の予測と分析：
•セグメンテーション分析：製品、材料、形状、最終用途など、価値と出荷量の観点からのさまざまなアプリケーションによる市場規模。
•地域分析：北米、ヨーロッパ、アジア太平洋、およびその他の国々による市場の内訳。
•成長機会：市場のさまざまなアプリケーションおよび地域における成長機会の分析
•戦略的分析：これには、新製品の開発、および市場における競争環境が含まれます

このレポートを購入する（シングルユーザーライセンスの価格$3500 (Three Thousand Five Hundred USD)）- https://www.industryresearch.co/purchase/18769700

2021年から2027年の詳細な目次グローバルおよび地域のWiFiテスト機器業界の状況と展望プロフェッショナル市場調査レポート標準版
第1章業界の概要
1.1定義
1.2仮定
1.3調査範囲
1.4地域別の市場分析
1.52022年から2027年までのグローバルキーワード市場規模分析
1.5.32022年から2027年までのグローバルキーワード価格動向分析
1.6 COVID-19の発生：キーワード業界への影響
第2章タイプ、アプリケーション、および上位の地域と国によるグローバルWiFiテスト機器競争
2.1タイプ別のグローバルWiFiテスト機器（ボリュームと値）
2.2アプリケーション別のグローバルWiFiテスト機器（ボリュームと値）
2.3地域別のグローバルWiFiテスト機器（量と価値）
第3章生産市場分析
3.1グローバル生産市場分析
3.1.1 2016-2021グローバル容量、生産、容量使用率、工場出荷時の価格、収益、コスト、粗利益分析
3.1.22016-2021主要メーカーのパフォーマンスと市場シェア
3.2地域の生産市場分析
第4章グローバルWiFiテスト機器の販売、消費、輸出、地域別の輸入（2016-2021）
4.1地域別のグローバルWiFiテスト機器消費量（2016-2021）
4.2北米WiFiテスト機器の販売、消費、輸出、輸入（2016-2021）
4.3東アジアWiFiテスト機器の販売、消費、輸出、輸入（2016-2021）
4.4ヨーロッパWiFiテスト機器の販売、消費、輸出、輸入（2016-2021）

詳細な目次について- https://www.industryresearch.co/TOC/18769700#TOC"
久しぶりにLaTeX遊びしてしまった

# LaTeX遊びとは？

普通に`Winword`でつくってPDFに変換して提出すればいいところをわざわざ`LaTeX`を経由して、コンパイラーの吐き出すエラーと苦悶するというマゾヒズム的遊びのこと。

# 環境

mdを`pandoc`経由でPDFに変換したいと思ったときにほとんど無意識状態で[`MikTeX`](https://miktex.org)インストールしていた。ということでWindows10にインストールされていた。`MikTeX`は`TeXWorks`というIDEのようなものが同梱みたい。

# 元ネタ

だれかが`Winword`で作った`docx`ファイル。

## 閑話休題

むかし匿名掲示板がはやっていたころ、`doc`ファイルのことを「**ドキュンファイル**」と呼ぶのがバズっていたことを思い出す。

`pandoc`で変換:

```
pandoc hoge.docx -t latex -o hoge.tex
```

みたいな感じ。図面はどうせPDF化しないとならないから。変換しないようにさせた。

# LaTeXのスタイルファイルとかテンプレート

どこぞから入手した。`Winword`と[`github` site](https://github.com)をともに開いて、

- タイトル、
- 著者、
- 所属

などをひたすらコピペ。最近はそれに加えて、

- メアド、
- [orcid](https://orcid.org/)

までも。右手のアキレス腱が腱鞘炎になりそう。ツラミしかない。

# `LaTeX`ってユニコード使えるようになったの？

`MikTex`なので、日本語はダメなのはいいとしても、ギリシャ文字とかアルファベットの装飾とかは、ユニコードでいれてもいいのか？よくわからなかったので、逐一 `$\alpha$`,`\'e`,`\"u`みたいな感じで置き換え。

$\alpha$は、数式環境のなかだからQiitaでも出せますね。

`pandoc`が`$_1$`なんかを`\textsubscript{1}`みたいな感じに変換するけど、これって通るのか？よくわからないので、半マニュアルで置き換え。`textsuperscript`も同様。

## すみません。追記です。

`\textsubscript{1}`について、...通りますね。

この[twitter](https://twitter.com/zr_tex8r/status/1059885618723926016)によると、当該コマンドは2015年に追加されたみたいです。

# 温度の記号はLaTeXダメだよね？

摂氏をあらわす **℃**ってのがあるけど、なんか追加でパッケージ呼び込まない限り、これも`LaTeX`ダメだよね。回避法は、

```
$^\circ $C
```

ですね。

# Tableまわりも進化していた！？

プリアンブルに `booktabs`というパッケージがテンプレートには宣言されてたけど余計なものを宣言してエラーソースになられても困るということで削った。

その結果、`toprule`, `midrule`, `bottomrule`でエラーが発生し、そのたびに
手作業で `hline`に置き換え。これはあとで気づいたけど、まったく意味のない所業だったわけだ。

## pandocが生成する特殊な改行コマンド

`pandoc`って、表の行の改行で 円マーク2つ (`\\`)じゃなくて、なんか長いコマンド（忘れてしまった）を生成しますね。全部、円マーク2つに一括置換したっけど、消さなくてもよかったのかな？

# bibTexもがきについては今回はナシ

`Winword`に`Mendeley`のアドインを導入して、文献リスト作ってるから今回は、`bibTex`ネタもナシ。ついでにいうと、`bibliography`ネタもナシ。ちょっとさみしい。

## 閑話休題： MendeleyとWinword

[MendeleyとWinword](http://www.ortho.m.chiba-u.jp/research_tips/4754).

# コンパイル

IDEがあるので、`pdfLaTeX`選んで、アイコンをクリックするだけだけど、本当は

```
$ latex hoge
```

って叩いているはず。繰り返しになるけど今回は`BibTex`ナシなので、複数回コンパイルも免除。

## 閑話休題

むかし、「`bibliography`環境つかったときは複数回コンパイル！」ってのを、誰も教えてくれなくて、ヤケノヤンパチになった。コンパイルを繰り返したら文献リストが生成された時は、うれしかった。むかしを思い出して感傷にひたれる`LaTeX`遊び。

# 今度はmarkdownを元に遊びたい

マークダウン(`md`)でできるところまで書いて、さいごに`pandoc`で`tex`に変換。

```
pandoc -s --natbib hoge.md -o hoge.tex --bibliography hoge.bib --template hoge.template
```

この時点で`TeX`ソースコードには、`bibliography`含まれているはず。`hoge.tex`を複数回コンパイル。しかし、`BibTex`について走らせる不要。

# まとめ

「俺は`Latex`記法を知っている」とばかりに、`$_1$`, `\'e`とかに逐一おきかえたけど、そのほとんどは、やらなくてもいい所業なのかもしれない。

```
pandoc hoge.md -o hoge.tex
```

っていうコマンドを実行するときも 同じような話になると思うので、このときは
「俺は`Latex`記法を知っている」をなるべく発動せずに、パッケージ宣言で対応しつつ、`PDFLaTeX`のコンパイラーにかけてみよう！そうしよう！
DockerコンテナをAWSにデプロイするにあたり、色々と調べた件

Dockerの開発環境で構築したアプリケーションをどのようにデプロイするのかについて
色々と調べたことを共有したいと思います。


↓こちらの動画で、コンテナ開発・運用のベストプラクティス（Twelve-Factor App）が紹介されています。
[【AWS Black Belt Online Seminar】 CON142 Docker入門](https://youtu.be/CGfRsyQW1rE?si=sh_0YvWuk4m_0mdz&t=726)


### Twelve-Factor App
https://12factor.net/ja/


Twelve-Factor Appとは、Herokuプラットフォーム上で開発・運用・スケールした何百何千ものアプリケーションから得られた知見を
モダンなWebアプリケーションとしてあるべき姿として、12のベストプラクティスにまとめた方法論です。


冒頭の「はじめに」の中で次のような文言が登場します。

- セットアップ自動化のために 宣言的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコストを最小化する。
- 下層のOSへの 依存関係を明確化 し、実行環境間での 移植性を最大化 する。
- モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。
- 開発環境と本番環境の 差異を最小限 にし、アジリティを最大化する 継続的デプロイ を可能にする。
- ツール、アーキテクチャ、開発プラクティスを大幅に変更することなく スケールアップ できる。


上記の理念について、出来る限りDockerで達成できるように工夫する必要があります。（難易度は高いですが・・・:sweat_smile:）

その観点でいえば、下記の動画はTwelve-Factorの方法論をロールプレイを通じて、分かりやすく解説しており、とても参考になりました。
[そこの Dockerfile 書いてるあなたちょっと待って、そのコンテナって安全ですか？(DEV-01)](https://youtu.be/5qLUuh9mfC0?si=LMoD7NJDlEmBx8Yh)


これらのプラクティスに準じてデプロイを進める場合は、
EC2でオフィシャルのOSイメージをベースにコンテナを立ち上げる想定になります。


代表的なベースイメージOSとしては下記で紹介されています。
https://youtu.be/5qLUuh9mfC0?si=n5PSjp8IZK0tDaGn&t=1543


私はLaravelで開発したアプリケーションをDockerを使ってAWSにデプロイしたと考えていたのですが、
PHPの場合は、言語ランタイム導入済みのオフィシャルなイメージで良さげなものが見つかりませんでした・・・:cry:
なので、Amazon Linux をベースにDockerfileで必要な言語ランタイムを導入するという形になりそうです。
https://aws.amazon.com/jp/linux/amazon-linux-2023/
https://hub.docker.com/_/amazonlinux
https://goat-inc.co.jp/blog/3569/


ただし、EC2にデプロイするというのは、やや上級者向けで難易度が高いので
サーバーレスなコンテナ実行環境であるECS on Fargateを利用するという方法も考えられます。
[[AWS Black Belt Online Seminar] CON202 ECS Fargate入門](https://www.youtube.com/watch?v=5fXwkTgWrjw&t=2s)



その他、参考になりそうな文献
▼Overview of best practices for writing Dockerfiles
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
▼アプリケーションコンテナセキュリティガイド
https://www.ipa.go.jp/security/reports/oversea/nist/ug65p90000019cp4-att/000085279.pdf
[備忘録]Next.js13でLinkで飛んだときに表示されない 

# 結論
複数あるlayout.tsxでHTMLタグとBodyタグが複数あるとダメみたい
# 起きたエラー
next/linkで遷移すると画面に何も表示されない、だがリロードすると治る
# 調べたこと
ブラウザのdeveloperツールで以下のエラーがあった
```
Warning: You are mounting a new body component when a previous one has not first unmounted.
It is an error to render more than one body component at a time and attributes and children of these components will likely fail in unpredictable ways.
Please only render a single instance of <body> and if you need to mount a new one, ensure any previous ones have unmounted first.
```
英語わかんないのでそのままエラー文で調べるとSlackで[質問](https://stackoverflow.com/questions/75423463/warning-you-are-mounting-a-new-body-component-when-a-previous-one-has-not-first)を見つける
翻訳したものを引用すると
>このようなエラー メッセージが表示された場合は、2 つの異なるレイアウト ファイルで html タグを使用しています。HTML タグは 1 つのレイアウト ファイルにのみ含める必要があります。

というわけで
# 結論
複数あるlayout.tsxでHTMLタグとBodyタグが複数あるとダメみたい
(レジ直出力)ESP32、ナイトライダーで遊ぶ。

x 前回の記事

https://qiita.com/caa45040/items/db8eaa36ed8c0ee19dbf


(レジ直出力)ESP32、ナイトライダーで遊ぶ。


目的
カラー液晶を高速にドライブするため。


x なぜか変なウエートを入れないとバグる。
x ウエートが約秒単位のは、変なウエートは、いらない。


![o_cop659.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6dd7f035-ca2f-8d18-43cd-79d6ee963df9.jpeg)




GPIO_ESP32_HS_IO_8BIT_1



```c++




//GPIO_ESP32_HS_IO_8BIT_1
//ESP32用の高速I/O 8BIT


//インクルド
#include <Arduino.h>


//定義
#define GPIO_0to31SET_REG   *((volatile unsigned long *)GPIO_OUT_W1TS_REG)
#define GPIO_0to31CLR_REG   *((volatile unsigned long *)GPIO_OUT_W1TC_REG)

#define GPIO_DB7  14
#define GPIO_DB6  4
#define GPIO_DB5  27
#define GPIO_DB4  16
#define GPIO_DB3  26
#define GPIO_DB2  17
#define GPIO_DB1  25
#define GPIO_DB0  5


void HS_GPIO_8BIT_A(uint8_t s)
{
  
int work_a = 0;
//------------------------------------------------------
//7bit
work_a = work_a |( ( (s >> 7) & 1) << 14) ;
//------------------------------------------------------
//6bit
work_a = work_a |( ( (s >> 6) & 1) << 4);
//------------------------------------------------------
//5bit
work_a = work_a |( ( (s >> 5) & 1) << 27);
//------------------------------------------------------
//4bit
work_a = work_a |( ( (s >> 4) & 1) << 16);
//------------------------------------------------------
//3bit
work_a = work_a |( ( (s >> 3) & 1) << 26);
//------------------------------------------------------
//2bit
work_a = work_a |( ( (s >> 2) & 1) << 17);
//------------------------------------------------------
//1bit
work_a = work_a |( ( (s >> 1) & 1) << 25);
//------------------------------------------------------
//0bit
work_a = work_a |( ( s & 1) << 5);

  //[0-31]レジスターの書き込み
 
  //セットレジスターの設定
  GPIO_0to31SET_REG = GPIO_0to31SET_REG | work_a;

//delayMicroseconds(3);

  //リセットレジスターの設定　反転させてマスクして足しこむ
  GPIO_0to31CLR_REG = GPIO_0to31CLR_REG |

(

(  (1 << 14)|(1 << 4)|(1 << 27)|(1 << 16) | (1 << 26)|(1 << 17)|(1 << 25)|(1 << 5)  )

 & (~work_a)

);

//delayMicroseconds(3);

} //GPIO_8BIT


//初期化
void setup() {

    //ポートの初期化
    pinMode(GPIO_DB7, OUTPUT);
    pinMode(GPIO_DB6, OUTPUT);
    pinMode(GPIO_DB5, OUTPUT);
    pinMode(GPIO_DB4, OUTPUT);
    pinMode(GPIO_DB3, OUTPUT);
    pinMode(GPIO_DB2, OUTPUT);

    pinMode(GPIO_DB0, OUTPUT);
    pinMode(GPIO_DB1, OUTPUT);


    //ポートの初期化
    HS_GPIO_8BIT_A(0xff); delay(3000);
    HS_GPIO_8BIT_A(0x00); delay(1000);



    //無限ループ
    while01:


    for(int s=0;s<8;s++){

        //なぜかウェートが必要 高速時
        GPIO_0to31SET_REG = GPIO_0to31SET_REG | (1<<5); //0bit
        GPIO_0to31SET_REG = GPIO_0to31SET_REG | (1<<5);
        GPIO_0to31SET_REG = GPIO_0to31SET_REG | (1<<5);
        //HS_GPIO_8BIT_A(vg[1]); //8ビット出力 esp32
        HS_GPIO_8BIT_A(1 << s);delay(1000);

    }//for s



    goto while01;
    
}//setup


//メインループ
void loop() {}




```
[自分用メモ]DavinciResolveで困ったこと＆解決方法

DaVinci Resolve を使っていて発生したトラブルと、その解決方法を記録していきます。

# 発生画面
カラーウィンドウ

## トラブル内容
モザイクがかからない

### 現象
カラー画面で、エフェクトのブラー（モザイク）をノードに適用しているのに、モザイクがかからない現象が発生。
他のエフェクトも適用されない。

### 原因
カラーウインドウのタイムラインで、別のレイヤー（テキストなど）を選択していた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3311208/61dd1c9c-7245-a9fb-dbd8-9433caf2c4da.png)
参考：https://shimochan-chi.com/?p=4605

※「タイムライン」ボタンはカラーウインドウの右上にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3311208/ca84ae27-d7c4-2fe3-6062-1d574f4325e0.png)
AI導入で失敗するケース

## なぜ知りたいと思ったか
「AIを導入すれば何でもできる！！」と勘違いしている方が多く、それが原因でAI導入に失敗した事例を知りたいと思った


## AI導入で失敗するケースとは？
**①AI導入を「手段」ではなく「目的」になっている**
「AIを導入すれば何でもできる！！」と勘違いしてプロジェクトを進めたら、「結局、AIで何をしたいんだっけ？」と頭を抱えてしまったパターン。

・どんな業務課題があって、AIをどの範囲で適用するか
・AIを導入して、どうやってアプリを運用するか
といった戦略を立案しないと、AIを導入しても成果が得られない。


**②AIの「出来ること」と「出来ないこと」を分かっていない**
現状は特定の分野に特化したAIしか存在しないため、全ての業務をこなせる訳ではない。業務全体を把握した後、「AIで出来ること」と「人間じゃないと出来ないこと」を振り分けて、AIの適用範囲を明確にする必要がある。


**③データの準備が大変・・**
AIに学習させるデータの数や種類を考慮しないと、開発フェーズで以下の事例に陥ることになる。
準備した学習データの形式がAI学習に使えず、手作業で修正しないといけなくなった。
その結果、開発スケジュールが大幅に遅れてしまい、「AI学習で使えるデータ形式を事前に知るべきだった・・」と後悔した。


## 調べてみて分かったこと
「AIで出来ること」と「出来ないこと」を理解してから

①業務全体の把握する
②「AIで出来ること」と「人間じゃないと出来ないこと」を振り分ける
③学習データの数や種類などを明確にしておく


AI導入の失敗事例や対策は、以下のURLを参考にしました。
https://ai.nuro.jp/blog/knowledge/shikujiri.html
https://www.intellilink.co.jp/column/ai/2019/031900.aspx
xlwings 逆引き

# はじめに

Python と言えば業務自動化/効率化、業務自動化/効率化といえばターゲットは Microsoft Excel、Microsoft Excel と言えば **xlwings**。というわけで、Python で Excel をごにょごにょしようとすると必ず出てくる xlwings。

オブジェクト構造は VBA と酷似しているので、xlwings だから…ということはほぼ何もないです。困ったら [公式のAPIリファレンス](https://docs.xlwings.org/en/stable/api/index.html) にいけばなんとかなるのですが、いちいち調べてられないというせっかちな人や、ハマりポイントを（自分のために）逆引きメモとして残しておきます。

@m5knt さんが下記の記事でまとめて下さっているのでそちらもどうぞ（記事はちょっと古くなってますが、今でもだいたい使えます）

https://qiita.com/m5knt/items/a7bc555f287ac7fe761d

ニーズがありそうであれば、記事育てていきますが、Qiita 内には xlwings ネタそれほどないですね。

value で取得した値が float だったりとか None だったりとか、初見殺しいっぱいあると思うのだけど。

# ハマりポイント

## Excel が 2 つ立ちあがってしまう

単にこれのメモを残しておきたかっただけという説。``add_book=False`` がポイントです。これさえ書いておけば visible は True でも False でも大丈夫。

<details><summary>多分ですが、</summary>

アプリ非表示状態にするためには ``xw.App(visible=False)`` と書けば大丈夫と推奨している記事・ブログが多いため、思考停止してこれをコピペしてハマるのではないかと思われる。

上記フレーズを書いただけで空っぽの Excel アプリが立ち上がるので、その後に ``open`` したファイルとあわせて 2 つ立ちあがる事になってしまいます。

</details>

```main.py
import xlwings as xw

app = xw.App(visible=False, add_book=False)
wb = app.books.open("spreadsheet.xlsx"))
ws = wb.sheets[0]
rg = ws.range(1, 1)
rg.value = "TEST VALUE"
```

下記のスレッドがそのままなのでご参考まで（見ても特に何も収穫はない）。

https://stackoverflow.com/questions/74297604/how-to-open-an-existing-workbook-without-creating-an-new-book

## 基本的なオブジェクト構造教えてくれ。3行で。

オブジェクトの基本階層構造は、``App -> Book(s) -> Sheet(s) -> Range`` です。必ずこの階層構造にならってオブジェクトを生成すべし。

``xw.range("A1")`` といったどこの ``Range`` なんだか分からなくなる書き方はしない（たいせつ）

```main.py
import xlwings as xw

# app > wb > ws > rg
app = xw.App(visible=False, add_book=False)
wb = app.books.open("spreadsheet.xlsx"))
ws = wb.sheets[0]
rg = ws.range(1, 1)
rg.value = "TEST VALUE"
```
昼寝が最強のソリューションである


# 大前提として、昼寝が仕事の効率を上げることは科学的に証明されています。

[昼寝(パワーナップ)Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AF%E3%83%BC%E3%83%8A%E3%83%83%E3%83%97)

https://reskill.nikkei.com/article/DGXKZO13386060V20C17A2NZ1P01/

https://www.starbucks-kenpo.or.jp/my_wellness/mindset/list23.php


## 実際に体感できる効果

次に、実際に毎日20分～25分間の昼寝を必ず行っている私が体感している効果についてあげていきます。

余談ですが、本記事は有名な書籍 [筋トレが最強のソリューションである-マッチョ社長が教える究極の悩み解決法](https://www.amazon.co.jp/%E7%AD%8B%E3%83%88%E3%83%AC%E3%81%8C%E6%9C%80%E5%BC%B7%E3%81%AE%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%81%82%E3%82%8B-%E3%83%9E%E3%83%83%E3%83%81%E3%83%A7%E7%A4%BE%E9%95%B7%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E7%A9%B6%E6%A5%B5%E3%81%AE%E6%82%A9%E3%81%BF%E8%A7%A3%E6%B1%BA%E6%B3%95-Testosterone-%E3%83%86%E3%82%B9%E3%83%88%E3%82%B9%E3%83%86%E3%83%AD%E3%83%B3/dp/4426608376) 
の影響を受けているので、そんなノリです。

## 業務に集中できる!

昼下がり、暖かい日差しに包まれ、眠たくなる時間…
ついウトウトしてしまうこともあるかと思います。
#### 昼寝をすることで眠気スッキリ業務に取り組めます。

さらに午前中も、もう少ししたら寝られると思うことで体感楽に乗り越えられる気がします。

## 頭が冴える!

業務に集中できる　と少しかぶっているかもしれませんが、頭が冴えます。
同僚との会話や会議などでの発言、処理の実装方法など、面白いように閃きます(個人差があります)

## 目つきに覇気(やる気)が現れる!

まるで朝出勤してきたばかりのような、疲れを感じさせない目つきになります。

## 午前中の悩みをリセット!

会議で上手く発言できなかった。タスクの消化が思うように進まなかった。
そんな悩みを午後に引きずるのはやめましょう！
一旦眠ることで気持ちをリセットできます。
寝ると結構色々なことを忘れてしまうので、忘れたくないことはメモ帳にでも書いてからパソコンをロックしましょう。

## 夜更かししても大丈夫!

なんと昼寝20分間には睡眠8時間分の休息が含まれているようです。
https://www.all-smiles.jp/2014/04/28/wisdom-200/#:~:text=%E6%98%BC%E9%A3%9F%E5%BE%8C%E3%80%81%E5%8D%88%E5%BE%8C%EF%BC%93%E6%99%82,%E3%81%84%E3%82%8B%E3%81%A8%E3%81%93%E3%82%8D%E3%81%8C%E3%81%82%E3%82%8B%E3%81%9D%E3%81%86%E3%81%A7%E3%81%99%E3%80%82

夜眠りにつくのを1時間遅くしても昼寝20分を取り入れることで、プラスになることでしょう。

## 休憩時間に仕事の話をされるのを避けることができる!

昼休憩は法律で定められた休憩時間とはいえ、雑談がてら仕事の話をされることもあるかと思います。
しかし、寝ている人を起こしてまで仕事の話をしてくる人はいないでしょう。

## 目の疲れを抑えることができる!

エンジニアの皆さんは勤務中はモニターを見ている時間が多いと思います。
休憩時間にまでスマホやパソコンの画面を見ていては、目の疲れ、そしてそこからくる肩こりなど…

### 昼休憩ぐらいは画面を見るのをやめて目を休めましょう!

## 朝起きたときのもう少し寝たい気持ちを和らげる!

朝起きたとき、次眠れるのはまた仕事/勉強して夜か…
と思ったことがあるかと思います。
昼寝の予定を取り入れることで、

#### 半日頑張れは寝れる!
そう思うことで、朝の目覚めも良くなることでしょう。

## 昼寝をしていない人へ

エンジニアの人もそうでない人も、みんな昼寝をしましょう！

デメリットは昼の自由時間が少なくなることと休みの日でも昼時に眠たくなるようになってしまったぐらいで、あとはメリットばかりです!

~~なんとなく昼寝をせずずっとスマホを触っていた人が午後の業務中にウトウトしているとちょっとイラっとします。~~


# andmore...

他にもこんな記事書いてます。

https://qiita.com/SZR/items/1c8a7be4267071f6c295

https://qiita.com/SZR/items/396533c1b1e14489a782

https://qiita.com/SZR/items/401a1f839723d89bd7f2

https://qiita.com/SZR/items/176586cde17ea0e9828a

https://qiita.com/SZR/items/a000cbaa583dcd2a344b

https://qiita.com/SZR/items/1d8edaf95fa2f5bbe821

https://qiita.com/SZR/items/1debe21a6759d0067ad7
SaaS、PaaS、IaaSとは？

# SaaS、PaaS、IaaSの基盤、「クラウド」とは？
    ・SaaS・PaaS、IaaSはどれも、クラウドで提供されるサービスです。
    ・「クラウド」とは「雲」という意味で、オンラインで利用できるネットワークを意味しています。
    ・クラウドの形態で提供されるサービスを「クラウドサービス」と言います。

以下図にて纏めしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/4cc44474-b49d-8c0d-e5fa-24d28b46bd17.png)


# 補足
```ミドルウェア（middle ware）```とは、アプリケーションとOSの間に存在するソフトウェアを指します。
<table>
  <tbody>
    <tr>
      <th colspan="2">
        <p>
          <b>ミドルウェアの種類</b>
        </p>
      </th>
    </tr>
    <tr>
      <th>
        <b>Webサーバー</b>
      </th>
      <td>
        <ul>
          <li>Webブラウザからのリクエストに応じて、静的コンテンツを表示させる役割を持つミドルウェアです。
          </li>
        </ul>
      </td>
    </tr>
    <tr>
      <th>
        <b>アプリケーションサーバー</b>
      </th>
      <td>
        <ul>
          <li>Webサーバーのリクエストを受けてプログラムを呼び出し、情報を処理し、動的コンテンツを生成するミドルウェアです。
          </li>
        </ul>
      </td>
    </tr>
        <tr>
      <th>
        <b>データベース管理サーバー</b>
      </th>
      <td>
        <ul>
          <li>データベース管理システムが作動するサーバーのことで、DB管理サーバーやDBMSなどと略されます。
          </li>
        </ul>
      </td>
    </tr>
  </tbody>
</table>
GitHubアカウント作成

# はじめに
本稿では、GitHubへの登録方法を記載します。

備忘録のためかつQiitaの投稿方法の勉強を兼ねて行います。

# 1. GitHubにアクセス

https://github.com/

上記のリンクからGitHubサイトにアクセス
次に、左上の【Sign up】をクリックします。

![スクリーンショット 2023-10-10 163142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/ae37db44-8570-d593-1d89-647a38583937.png)

:::note warn
警告
本稿は2023/10/10時点のサイトデザインとなっています。
:::

# 2.アカウント情報を入力

1.メールアドレス
2.パスワード
3.GitHubアカウント名
4.製品の更新情報やお知らせを電子メールで受け取るか
![スクリーンショット 2023-10-10 164400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/f08404ad-a1f0-99bc-61f3-436e5d598e0a.png)

5.アカウント検証
![スクリーンショット 2023-10-10 164722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/62c8362d-fd71-9ade-7bfa-c802ccf80334.png)


# 3.認証コード入力
登録メールアドレスへ送られる、認証コードを入力します。

![スクリーンショット 2023-10-10 164844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/176bd449-5397-fdda-2342-d0564b5955ae.png)

# 4.アンケート回答、プランの選択
認証コード入力後、パーソナライズ（アンケート回答）と、プラン（無料 or 有料）の選択を行います。
![スクリーンショット 2023-10-10 165204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/e2ea9e82-ee42-276c-082e-8efb68dfdecc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/19f2f634-82fc-f616-ddec-ed0fc9ad97a1.png)
![スクリーンショット 2023-10-10 174812.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/79b2345a-31e7-d460-edea-634b293e65d1.png)

# 5.アカウント作成完了、ログイン
プラン選択後、Dashboard（ダッシュボード；おそらく白い画面です）が表示されたら、アカウント作成が完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/3bac073c-ade3-050c-a2c6-4c7ab7880086.png)

# おわりに
次回ではGitとGitHubの違い、リポジトリについて投稿しようと思います。
企業がゲームエンジニアに求めるスキルをまとめてみた

立派なゲームエンジニア、なりたいですよね？
各企業の募集要項などを調べ、まとめました。

いちおう新卒編と中途採用編に分けますが、どちらにも重要な情報があるかと思います。
ここでは、ゲームクライアント分野にのみ主眼を置いています。

## Cygames
本記事で一番重要です。
[Cygames Engineer's Blog](https://tech.cygames.co.jp/archives/2430/)にて、具体的かつ簡潔な項目リストがあります。**新卒への**要求事項です。
>* C++、C言語の知識
>* DirectX or OpenGLのAPIの知識
>* メモリ管理システム
>* マルチスレッド
>* タスクシステム
>* 当たり判定（球、カプセル、線の交差判定と押し出し）
>* Vector, Matrix, Quaternionの算術演算の知識
>* 算術演算ライブラリの自作
>* 単体ポリゴン表示
>* モデル表示（骨、スキニング）
>* アニメーション（骨、シェイプ）
>* ライティング（平行ライト、ポイントライト、スポットライト）
>* パーティクルエフェクト
>* ビュー投影の知識
>* ポストエフェクトの知識
>* 物理演算の知識
>* アセンブラの知識
>* シェーダーの知識

要するに、ゲームエンジンに頼らずに自力でゲーム制作できる力を身に着けようということですね、痺れる～

## 任天堂
新卒には具体的な要求事項の記載がなかったため、**中途採用**から。
[ゲーム開発エンジニア](https://www.portal.e2r.jp/fixurl/nintendo_career_job/id/4/2?ki=job00149)
>ゲームプログラム開発
>下記の実務経験と能力を有し、ゲームを面白くすることに興味がある方
> - ゲーム開発経験、ゲームエンジン開発経験
>
> - 特に以下の開発経験
> グラフィックス、ダイナミクス、AI、ゲームフレームワーク、サウンド
>
> - C/C++（必須）による開発経験

>ネットワークゲーム開発
>- ネットワークゲームの開発経験
>
>- 通信処理の検証や最適化の開発経験
>
>- サーバーサイドのプログラム開発経験
>
>- C++（必須）、Java、C#、Rubyなどによる開発経験

具体性のある要求事項が見当たらないですね。面接で直接確かめてやるよ、ということでしょうか。

## スクエアエニックス
新卒には具体的な要求事項の記載がなかったため、**中途採用**から。

[クライアントエンジニア（モバイル）](https://hrmos.co/pages/square-enix/jobs/110406001)
必須
>* 何らかの商用ゲーム開発経験
>* C++、C#、Javaなどによるリアルタイムなゲーム開発経験
>
尚良
>* ソーシャルゲームのフロントサイド／クライアントサイドの開発経験
>* コンシューマゲームの開発経験
>* C#、C++での開発経験
>* リアルタイム通信を利用したゲーム開発経験
>* ゲームエンジン使用/開発経験
>* ゲーム用ツールの作成経験
>* ビルドエンジニアとしての業務経験
>* 3Dゲームのグラフィックス開発経験
>* グラフィックスAPI (DirectX, OpenGL, Vulkan, Metal等) の知識
>* DCCツール（Maya、Photoshop等）のスクリプト開発経験
>* GPU、シェーダー、VFX、ポストエフェクト等に関する知識

[グラフィックスエンジニア（コンシューマー・PC・モバイル）](https://hrmos.co/pages/square-enix/jobs/110403001)
必須
>* C++および、HLSLなどのShader言語を使用したゲーム開発経験
尚良
>* 商用ゲーム開発経験
>* 3Dゲームのグラフィックス開発経験
>* ShaderModel3.0世代以降のコンソールゲーム機での開発経験
>* DCCツールやアセットパイプラインの知識
>* GPUに関する知識
>* ゲームエンジン使用経験
>* 数学、物理の知識

実務的にツールの利用能力も必要とも、ベース（エンジン、GPU）の理解も歓迎されているようです。

## バンダイナムコスタジオ
[新卒ゲームエンジニア](https://bandainamcostudios.snar.jp/jobboard/detail.aspx?id=95gMm0kb4StpiPdobqpMxg&_gl=1*1dr79x*_ga*NTk4OTIwNDczLjE2NzgyNjM1MzQ.*_ga_LSNY90C3HT*MTY3OTI3ODQwNC4zNy4xLjE2NzkyNzg4NzIuMC4wLjA.)

>* 好奇心旺盛で、新しい技術に強い興味があり、それらを学ぶことに意欲的な方
>* プログラミングが楽しくて大好きな方
>* ゲームなどの遊びコンテンツを作る事に意欲的で、作り出すものの手触り感や心地よさを考えている方
>* チームとして協力しながら、目標に向かって行動できる方

新卒に対しては「熱意」を求めていますね。

[キャリア採用ゲームエンジニア](https://bandainamcostudios.snar.jp/jobboard/detail.aspx?id=jzRdum7GH-kyxjOz6pFJGg&_gl=1*5lha8o*_ga*MTU0Njg0NTk3MC4xNjY2MDc2Mzk2*_ga_LSNY90C3HT*MTY3ODk2MTI4OS4xNjkuMS4xNjc4OTYyNDg5LjAuMC4w)

必須
>* PS4やXbox、Switchなどの家庭用ゲーム機またはSteamなどのPC向けタイトル制作実務経験
>* C++でのゲーム制作実務経験
>* バージョン管理システム（PerforceやGitなど）の実務経験

尚良
>* ゲームエンジン(Unreal Engine、Unityなど)を使ったゲーム制作実務経験
>* ゲームエンジンを使わずにゲーム制作をした実務経験 
>* C#/Python等でのツール開発経験 
>
>その他、以下の経験がある方を優遇します。 　
>* AI、モーションやアニメーションに関連した数学や物理の知識と開発経験 　
>* プログラマブルシェーダーを用い、グラフィックスパイプラインを構築した開発経験 　
>* 物理シミュレーションシステムの開発経験 　
>* 現世代のマルチプラットフォームゲームの開発経験 　
>* ゲーム向けサウンドシステムの開発経験 　
>* 検証を効率良くイテレーションさせるための開発環境構築経験

開発経験そのものを重視しているように見えます。

## まとめ
とりあえず、国内ゲーム企業3強と、有用な情報を残してくれているCygamesを引用しました。

多くの企業で、 **「ゲームエンジン無しで、自力でゲームを作り上げる経験・能力と、コンピューターの根底理解」** が共通して一目置かれていることが分かります。

もし他の企業の情報で有用な情報があれば編集リクエストをお願いします。
もし本記事の問題がある場合はご連絡をお願いします。
さくらのクラウドのサーバ構築メモ

2023/10/11時点の話

* 東京第1ゾーンより第2ゾーン使う
  * 東京第1ゾーンはスイッチで制限かかっているので、念のため。
  * 情報源
    * [東京第1ゾーンでは新規ご利用のお客様のスイッチ作成数上限が1台に制限されています。](https://cloud-news.sakura.ad.jp/2020/09/17/tk1a-switch-limitation/)
* ２台構成でローカル接続したい場合はスイッチ（月額2200円）必要
  * 情報源
    * [スイッチを使ってローカルネットワークを構築してみよう – 「楽しいさくらのクラウド」(5) | さくらのナレッジ](https://knowledge.sakura.ad.jp/1272/)
* アプライアンスでDBがある（DB専用サーバ）あるのはいいけどCPU・メモリ・HDDが自由に設定できない（CPU・メモリ・HDD容量がセットの切替になってる）ため、要件にマッチするか検討必要。
  * [アプライアンス「データベース」 | さくらのクラウド ドキュメント](https://manual.sakura.ad.jp/cloud/appliance/database/about.html)
* [内容はそのままによりサイズの大きなディスクに移行する | さくらのクラウド ドキュメント](https://manual.sakura.ad.jp/cloud/design-pattern/tips/disk-expand.html)
  * > 1. より大きなサイズのディスクを新規作成する。その際ソースディスクとして移行元となるディスクを指定することでデータコピーも同時に行う。
    > 2. 「パーティション拡張機能」 でファイルシステムのパーティションを拡張し、新たに作成したディスクの容量上限まで使用できるようにする。
    > 3. サーバの接続ディスクを新たに作成したディスクに変更する。
* [さくらのクラウドでサーバーのIPアドレスを変えずにサーバーを入れ替える方法 - yuumi3のお仕事日記](https://yuumi3.hatenablog.com/entry/20140303/1393809798)
  * > 1. 新しいサーバーを作成し、新しい環境を構築する
    > 2. 新しいサーバーを止めて、ストレージを外す
    > 3. ディスク修正でIPアドレス等を変更する
    > 4. サービスインしているサーバーを止め、ストレージを付け替える


参考程度で。
AWS Cloud Practitioner 学習記録３

:::note info
AWS Skill Builder における下記コンテンツの学習記録（ポイントとメモ）です
AWS Cloud Practitioner Essentials (Japanese) (日本語実写版)
:::

# モジュール３：グローバルインフラストラクチャと信頼性

### 概要
AWS が高可用性・耐障害性を実現するグローバルインフラストラクチャである、世界中の地域（リージョン）で運用されるデータセンターのおはなし

##### リージョンを選択する
**リージョン**は世界中に構築されており、リージョン内部には複数のデータセンターがある（後述）
リージョン間を接続することもできるが、通常は各リージョンのデータは分離されている
提供したいアプリケーションに適したリージョンを決めるには下記の４つの要素を考慮する
+ ガバナンスとコンプライアンス
    + 例えば、ある企業が自社データを国内に配置しなければならない要件がある場合は、その企業が設置されているリージョンを選ぶ
+ ユーザとの接近性
    + アプリケーションを利用するユーザと物理的な距離が近ければ、すばやくコンテンツを提供できる
+  リージョン内で利用できるサービス
    +  AWS のサービスは、特定のリージョンのみで利用可能な場合がある
+  料金
    +  国家に応じた租税構造によって、リージョンごとに料金は変動する

##### アベイラビリティゾーン（AZ）
**アベイラビリティゾーン（AZ）** はリージョン内にある、１つまたは複数のデータセンタのグループ
アベイラビリティゾーンどうしは、災害時の影響を抑えるため物理的に離れた場所に設置されている
少なくとも２つのアベイラビリティゾーンでインフラストラクチャをデプロイするのがベストプラクティスとされている

東京リージョンの場合だと、４つのアベイラビリティゾーンがある
`ap-northeast-1a`
`ap-northeast-1b`
`ap-northeast-1c`
`ap-northeast-1d`

##### エッジロケーション
リージョンを選択する際に考慮したユーザとの近接性について、
ユーザの近くにリージョンがない場合にどうするべきか？

解：**エッジロケーション**を利用する

##### Amazon CloudFront
CDN (Contents Delivery Network) を実現する AWS のサービス
CloudFront は、リージョンとは分離されたエッジロケーションにおいて、いずれかのリージョンから配信されるコンテンツをキャッシュし、ユーザに提供できる

##### Amazon Route 53
AWS が提供するドメインネームシステムで、CloudFront と同様にエッジロケーションで動作する

##### Amazon Outposts
任意のロケーションで AWS のサービスを使用できるようにするサービス
任意の建物がミニリージョンとして動作するよう、AWS の一部のサービスをオンプレミスのサーバにインストールできる

### AWS リソースをプロビジョニングする
AWS では**すべてに API(Application Programming Interface) を利用**する
AWS のサービスを操作するためには AWS にリクエストを送信すればよく、そのリクエストにはいくつかのツールを利用することができる

##### AWSのサービスを操作する方法
+ AWS マネジメントコンソール
    + AWS のサービスへのアクセスと管理に使用するウェブベースのインターフェース（いわゆるGUI）
+ AWS Command Line Interface (CLI)
    + コマンドラインから直接 AWS のサービスを制御する（いわゆるCUI）
+ ソフトウェア開発キット (SDK)
    + AWS のサービスを制御するプログラムを作成できる

ほかにも、AWS の環境を管理する別の方法がある

##### AWS Elastic Beanstalk
コンソールをクリックしたり CLI コマンドを投入することなく、ネットワーク、EC2 インスタンス、スケーリング、ELB を構築できるサービス
アプリケーションのコードと上記の設定情報を提供することで、自動的に環境構築され、環境設定も保存しておくことができるので、同様の環境を再度デプロイすることが観点にでき、上記のようなサービス（リソース）を個別に管理しなくてよい

##### AWS CloudFormation
インフラストラクチャをコードとして取り扱うためのサービス
AWS マネジメントコンソールでリソースを個別にプロビジョニングする操作の代替としてコードを記述することで環境構築ができるようになる
＃ Elastic Beanstalk も、実は裏で CloudFormation が動作している。言うなれば、Beanstalk はアプリケーション（コード）の実行に特化した CloudFormation のテンプレートみたいなもの

#
ここまで２０分くらいですね
AWS の問題集なんかで頻出のリージョン・アベイラビリティゾーンの概念がようやく登場しました
モジュール３は以上です
postgresのテーブルアクセスが拒否される時

# テーブルのアクセスが拒否される時はこれを確認しよう
- 前提知識
テーブルの保存は、データベースといわれる箱があり、その中にスキーマと呼ばれるグループがある。
更にスキーマの中にテーブルが保存される。

- 確認内容
  - テーブルが存在しているか
    `\dt`
  - テーブルにアクセス権限があるか
    `\dp`
  - テーブルがあるスキーマがユーザの検索対象か 
    `SHOW search_path;`
    (データベース接続後にコマンド実施)

- 補足のコマンド
  - テーブル一覧の表示
    `\dt`
  - データベース一覧の表示
    `\l`
  - スキーマ一覧の表示
    `\dn`

## この記事の経緯
postgresのテーブルにアクセス出来ず、解決に時間がかかったため、原因を探すヒントを備忘録として書いてます。
SESで45歳目前にして危機感④　「リーダー経験」か「上流工程」どちらのスキルを獲得すべきか？

前回、ベテランエンジニアとして生き残っていく為に、
「リーダー経験」を獲得したいと言いました。
（SESかつ45歳目前、未経験で獲得機会があるかどうかは置いておいて。。）

が、その後、やっぱり「リーダー経験」よりも、
「基本設計」や「要件定義」などの上流工程スキルを獲得すべきでは？
と思い直し、悩んでおります。

今後、SESで生き残っていくために、どちらの方が需要があるのか？
について考えたいと思います。

### そもそも「リーダー経験」って何？
私も正確に分かっていません。

SESで面談をする時、リーダー経験があるかどうか聞かれます。
「経験はないですが、同じく派遣されている同じ会社の後輩に、
仕事の分からない事を教えたりしたことはあります。」と答えています。
恐らく、これはお客様が求めているリーダー経験とは違うと思います。

「リーダー経験」について調べてみました。

チームリーダーとプロジェクトリーダーがあるかと思いますが、
これらはほぼ同じ意味のようです。

「現場でチームをまとめ、プロジェクトを遂行し、完遂させる。」
これがリーダーの仕事と理解しました。

具体的にはタスク管理、チーム全体の進捗管理、他チームとの調整、
が主な仕事になるかと思います。

基本的にリーダーはコーディングや試験は対応しません。
それらはメンバーが対応します。

### リーダーと上流工程どちらが汎用的か？
どちらのスキルを獲得するかの判断基準の一つとして、
「どちらが汎用的か？」について考えました。

「リーダー経験」の方が汎用性があると考えます。
開発するシステムにより、リーダーの仕事に差はない為です。
リーダーはタスク、人の管理方法さえ知っていれば、
どんなシステム開発であっても振る舞いは変わらない為と考えます。

一方「上流工程」については、
開発するシステムにより、変わってきます。
業務系、組み込み系、WEB系により必要な知識や、
設計方法などが違う為と考えます。

### どちらに需要があるのか？

最下層SESかつ、ソロで現場に入るエンジニアなので、
「リーダー業務」が回ってくるかはかなり厳しいです。
が、それはさて置き「リーダー経験」の方が需要があると考えます。

明確な根拠はないですが、面談などでリーダー経験があるかを問われる事が多いのと、
この業界ではベテランでもリーダー経験がない人が多い為、
希少かつ需要がある「リーダー経験」を獲得する方が良いと考えました。

次回からは、どうやってそのスキル獲得するか考えたいと思います。
ローカル環境でLaravelを起動する方法(macOS)

## 1. 下準備
まずはWebサーバーソフトウェア（通常はApacheまたはNginx）とデータベース（通常はMySQLまたはPostgreSQL）がインストールされていることを確認してください。
今回はApacheとMySQLを使用していきます。
インストールされているかは以下のコマンドで確認してください。
___
#### Apache
``apachectl -v``
#### My SQL
``mysql --version``
___
ApacheはmacOSには、デフォルトでインストールされていますので恐らくは問題ないかと思います。
なのでここではMy SQLのインストール方法についてのみ記述させていただきます。
## 2. Homebrewをインストール
My SQLをインストールするために、まずHomebrewをインストールします。
HomebrewはmacOS用のパッケージマネージャーです。

[Homebrew](https://brew.sh/ja/)の公式サイトにあるように、下記のコマンドを使用してインストールします。
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

ダウンロードが完了したらHomebrewがインストールされたか確認してください。
確認には、下記のbrewのバージョンを確認するコマンドを使用します。

`$ brew -v`

## 3. My SQLをインストールする
`brew install mysql`
My SQLをインストールする
<br>

`mysql -V`
インストールが終わったらMySQLのバージョンを確認してみましょう。
mysqlコマンドに-Vオプションをつけます。
<br>

`mysql -u root -p`
rootユーザーでログインします。
passwordを聞かれますが、そのままエンターでログインできます。
ログインすると、このようにMySqlコマンドを実行できる状態になります。
```
$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.32 Homebrew

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```
<br>

`mysql> exit`
MySqlから抜けるときにはexitを実行します。


**MySQLの起動・停止・再起動**
MySQLの起動と停止はmysql.serverコマンドを使うと良いです。

`mysql.server start`
起動するときには、下記のコマンドを使います。

`mysql.server stop`
停止するときには、下記のコマンドを使います。

`mysql.server restart`
再起動するときには、下記のコマンドを使います。


## 4. PHPとComposeのインストール
#### PHPのインストール

LaravelはPHPで動作しますので、まずPHPをインストールする必要があります。
macOSにはデフォルトでPHPがインストールされている場合がありますが、最新バージョンのPHPをインストールすることをお勧めします。
<br>
`brew install php`
Homebrewを使用してインストールすることができます。

`php -v`
インストールが完了したら、PHPのバージョンを確認してください。




#### Composerのインストール:

ComposerはPHPの依存関係管理ツールで、Laravelのインストールに必要です。
<br>
`brew install composer`
上記のコマンドを使用してComposerをインストールします。

`composer --version`
インストールが完了したら、Composerのバージョンを確認してください。


## 5. Laravelのインストール
ここでいよいよLaravelをインストールしましょう！ こちらはWindowsもMacも同じ手順です。
<br>
`composer create-project laravel/laravel --prefer-dist Sample`
まずはコマンドプロンプト（ターミナル）で、上記のコマンドを実行します。
最後の”Sample”はプロジェクト名なので、任意の名前を付けます。
<br>
`cd Sample`
インストールが完了したら、作成したプロジェクトに移動します。
<br>
`php -S localhost:8000 -t public`
プロジェクトに移動できたら、以下のコマンドを実行します。
このコマンドを実行すると、Laravelがブラウザで確認できるようになります。
<br>

**先ほどのコマンドで指定した、”localhost:8000″をブラウザに入力します。
Laravelのページが表示されたら成功です！**
PowerVSでインスタンス(LPAR)が稼働するホストのリソースキャパシティを確認する

# はじめに
Power VSでリソースサイズ変更のメリットを享受したいですが、リソースサイズ変更のAPIを実行したところ次のようなエラーが。

> The core request of 0.5 is greater than the number of host available cores, 0.25.

インスタンス(LPAR)が稼働している物理マシンに余裕が無くて割り当て出来ないようです。
そもそも利用しているインスタンスの物理マシンにどの程度リソースの余裕があるのでしょうか？

# (前提付き)ワンライナー
- IBM Cloud Shellで実行
- 事前に `ibmcloud pi ws st` コマンドで対象のインスタンスが稼働するPowerVSのWorkspaceを選択していること
- 確認したいインスタンスIDが把握できていること
- `s922` で稼働しているマシンの前提

```shell
ic pi sysp --json | jq -r ".s922.systems[]" | jq -c "select(.id == `ic pi in インスタンスID --json | jq -r ".hostID"`)"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/c319c2c5-6b72-2b61-c75f-74e96d754256.png)

この結果だと、コアの余裕が `0` なので、そりゃリソース割り当て増やせないですね。
メモリは600GB以上余ってるのがわかります。

# リソースが無い場合どうすれば？
IBM Cloud Shell、もしくはCLIを利用して下記コマンドを実行してみましょう

`ibmcloud pi sysp`
※事前に対象のインスタンスが稼働するWorkspaceを `ibmcloud pi ws st`で選択していること

以下のような結果が得られ、IDが付与されているものが物理マシンの情報で、 `CPU Cores`　の項目がそのマシンのコアの空き状況になります。対象のインスタンスのPINがHardやSoftで無い場合は、Caseを通じてコアに余裕のあるマシンにマイグレーションするように依頼するのが良いかと思います。実現できるかはCaseで交渉になると思いますが、実現性はあるように思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/2ea0997e-6f3a-7b44-a406-87bf0e4a4a8a.png)

# さいごに
どうやって利用しているインスタンスの物理マシン情報を取得するのかを聞かれることが多かったです。
API使って利用者で独自に確認手段を確立されても良いですが、IBM Cloudのポータルから比較的容易に確認できたので、ご参考になればと思います。

# IBM Cloud Shellの使い方

下記の記事が参考になりますので、使ったことない、という方はこれを機に使ってみるのも良いかもしれません。

https://qiita.com/Kakimoty_Field/items/f79120e6bfa42c5e2d9b
CastContext.getSharedInstance(context: Context)のdeprecated対応

`CastContext.getSharedInstance(context)` が deprecated になり、Taskを渡して取得する方法が推奨されるようになりました。

https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastContext#getSharedInstance(android.content.Context)

公式の[Sample](
https://github.com/googlecast/CastVideos-android/blob/99d3de47890c7c02650db45dda806b5255d27787/app-kotlin/src/main/kotlin/com/google/sample/cast/refplayer/VideoBrowserActivity.kt#L92)では以下の使い方をしていますが、この方法だと困ったことにうまく取得できません。

```kotlin
    val castContext = CastContext.getSharedInstance(
        this,
        Executors.newSingleThreadExecutor()
    ).result
```

resultを直接取得するのではなく、 `successListener` で返答されたものを使うとうまく動くようです。

```kotlin
    CastContext.getSharedInstance(
        this,
        Executors.newSingleThreadExecutor()
    ).addOnSuccessListener {
        castContext = it
    }
```

ちょっとハマったのでメモ程度に。
もしなにか問題があれば教えてくれると嬉しいです！
Slack Boltを使ってGPUの使用状況を確認する方法

ターミナルで`nvidia-smi`コマンドを打つことで、GPU使用状況を確認していることと思いますが、SSH接続なしでスマホやPCでも確認したいときありますよね？
Slack Boltを使って簡単に確認できるようにしましょう！

```
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI XXX.XX.XX    Driver Version: YYY.YY.YY    CUDA Version: ZZ.Z     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA RTX A6000    On   | 00000000:18:00.0 Off |                  Off |
| 37%   67C    P2   250W / 300W |  24591MiB / 48685MiB |     83%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A   1000000      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A   1000001      C   python                          24583MiB |
+-----------------------------------------------------------------------------+
```

__↑ この出力結果をslackに通知します。__

## slackの設定

とても分かりやすくまとまっている記事があります。

https://developers.gmo.jp/29481/

【実際にやってみましょう】～【BOTをチャンネルへの追加】を記事の通りに設定してみてください。

## GPU使用状況を確認するpythonのコード

参照した記事では発言のあったチャンネルに返事をするという機能を実装していましたが、GPUの使用状況を書き込む機能を実装します！

まず、slack_boltをインストールしてください。
condaだったら、`conda install -c conda-forge slack-bolt`でインストールできます。

```python
#必要なライブラリをインポート
import os
import subprocess
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

#[OAuth Token] と [App-Level Token]を記載する
SLACK_BOT_TOKEN = "xoxb-*******"
SLACK_APP_TOKEN = "xapp-*************"

#[OAuth Token]読み込み
app = App(token=SLACK_BOT_TOKEN)

#反応する発言内容を記載する
@app.message("^gpu")
def message_hello(message, say):
    #発言のあったチャンネルへメッセージを送信する
    result = subprocess.run(["nvidia-smi"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
    gpu_info = result.stdout
    say(f"```\n{gpu_info}\n```")

#アプリの起動
if __name__ == "__main__":
    SocketModeHandler(app,SLACK_APP_TOKEN).start()
```

上のコードに自分のBOT_TOKENとAPP_TOKENを入力して.pyファイルとして保存し、pythonで実行してみてください。

アプリを追加したチャンネルで「gpu」と発言すると、
![slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569480/b74fcedc-6e87-3874-4acf-3ee8cdaa1ead.png)
このように、使用状況を確認することができました！

ここで、slackで送信したコマンドをターミナルで直接実行させるという事も可能ですが、セキュリティ上めちゃめちゃ良くないので、やめておきましょう。
`gpu`というメッセージだけ（その他任意に設定可能）を受け入れるというところがポイントです。

常時実行しておく必要があるので、nohupコマンドを使ってバックグラウンド実行しておくのが良いかもしれませんね。
Workato×Slackによる請求書連携業務の自動化をざっくり紹介！

## はじめに

弊社ではWorkatoで日頃の業務を、自動化し業務効率化を図っています。
今回はWorkatoの自動化事例として __請求書を経理担当者へ通知する__ までの業務を紹介します。

弊社特有の請求書連携プロセスかと思いますが、同じ境遇にいる方は参考にしてみてください。
## 弊社の請求書連携プロセス特徴

弊社、株式会社ビースタイルグループでは、各グループ会社の請求書は、一つの経理部門へと集約し、経理担当が一括で支払い処理を行っています。

Workato導入前の請求書連携フローは以下のようになっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/daa13613-fcf5-11ca-6332-212152eb2ef3.png)

__① 添付ファイルをDL__：Gmailで業務担当者が取引先から請求書を受領してダウンロードします。
__② 該当する稟議番号を確認・消込__：業務担当者が当該グループ会社が管理しているGoogleSheetで該当する稟議番号を手作業で確認・消込を行う。
__③ PDFファイルをリネーム__：請求書を[稟議番号_支払先_計上年月.PDF]でリネームを行う
__④ ファイルサーバーへ格納__：該当するファイルサーバーへ請求書を格納する
__⑤ 経理へ通知__:ファイルサーバーへ格納した旨を経理へ連携し経理担当者が支払い処理を行う



## Workato導入後の請求書連携フロー

Workatoが仲介することで、取引先から受領した請求書の経理担当への連携をワンストップ化することができました。
Workato導入後の請求書連携フローは以下のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/4c1e318f-6261-0a7a-e74d-410745e3d40b.png)

業務担当者は、今まで各アプリケーションを操作していましたが、Workato導入後はSlack操作だけで請求書連携業務を完結することができます。

### 対話型による業務効率化 
Slackのみで業務を完結するために、Slack Bot として実装しました。
業務担当者の判断を伴うため、対話型による業務効率化を実現しました。

__請求書受信時のSlack連携__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/fc9ce60f-82c8-6591-4591-aea2369fcad9.png)
・GmailをSlackチャンネルで受信
・Gmailに添付されている請求書(PDF)を自動的にプレビュー
・Slack bot が次の操作を促す
Slack bot からの指示を受けてWorkatoが処理を行います。

__Google Sheetsとの連携__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/c10a9a32-7067-e857-9135-45b2ea94c48f.png)
業務担当者が該当する請求書を確認・消込を行うために、Slack上のモーダルでGoogle Sheetsから取得した候補をリストアップします。

__ファイル操作、経理へ通知__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/939e85ba-e911-536d-404d-317a2627ef97.png)
前工程で業務担当者がSlack botで指示した操作でWorkatoがファイルリネーム、ファイル格納を行います。その後、Slackにて経理へ通知を行います。

## 導入効果
Workatoで請求書連携業務を自動化したことにより、弊社では様々な効果を出すことができました。

__業務時間の短縮__
請求書連携業務が1件あたり5分ほどかかっていましたが、Workato導入により30秒程度と約1/10に短縮することが出来ました。

__処理漏れの防止__
各アプリケーションで処理を行っていましたが、Slack上に集約されるため、請求書の連携漏れを防止に繋がりました。

__ミスの削減__
ファイルの命名や転記作業といった単純作業に関するミスを削減することができました。


__業務引継ぎのハードルの低下__
Slack Botによるガイダンスで業務がおこなえることにより、業務担当者の交代時にも引継ぎが容易になりました。


## 終わりに
弊社ではSlackでコミュニケーションを行っています。
Slackは拡張性の高いビジネスチャットなので、Workatoと連携することにより、更に生産性の向上に繋げることが出来ます。
弊社では今後もWorkatoとSlackの連携による事例を紹介していきます。

Workato導入のメリットについて、こちらの記事でも紹介しています。

https://bstyle-value-technologies.blogspot.com/2024/05/workato-subscription.html
Firsts取引所(FirstStone Investments Ltd .)

Firsts取引所は、その安全性、効率性、信頼性によって知られる新しいタイプのデジタル資産取引プラットフォームです。Firsts取引所は2019年にシンガポールで設立され、米国およびカナダからMSBのデュアルライセンスと米国NFAの規制ライセンス（合法的な運営許可証）を正式に取得し、規制を受け入れ、合法運営を行い、暗号通貨業界の発展を持続的に推進しています。取引所として、Firsts取引所はプラットフォームトークンの価値を向上させることに注力し、より多くのユーザーや投資家の関心と参加を引き寄せています。

1. プラットフォームトークンの多様な用途：
Firsts取引所のプラットフォームトークンは、支払い手数料として使用するなど、さまざまな用途があります。Firsts取引所で取引を行う際、ユーザーはプラットフォームトークンで手数料を支払うことを選択でき、取引コストを削減できます。これにより、プラットフォームトークンを保有するユーザーに実用的な用途が提供され、取引に積極的に参加し、プラットフォームトークンを保有する動機が生まれます。

2. バックアップと破棄のメカニズム：
Firsts取引所は、プラットフォームトークンのバックアップと破棄のメカニズムを採用しており、定期的に取引手数料の一部を使用してプラットフォームトークンをバックアップし、破棄します。このメカニズムにより、プラットフォームトークンの供給量を効果的に減少させ、その希少性と価値を向上させます。

3. パートナーシップの構築：
Firsts取引所は、他のプロジェクトや機関と積極的にパートナーシップを築いており、プラットフォームトークンの価値を向上させています。他のプロジェクトとの協力により、プラットフォームトークンはさらに多くのアプリケーションシナリオと使用機会を獲得できます。例えば、Firsts取引所は他のブロックチェーンプロジェクトと協力して、プラットフォームトークンをそのエコシステム内の重要な通貨にすることができます。これにより、プラットフォームトークンの流通と使用が増加し、その価値と知名度が向上します。

同時に、パートナーシップの構築は、プラットフォームトークンの保有者にさらなる特典と収益を提供できます。他のプロジェクトとの協力により、プラットフォームトークンの保有者は他のプロジェクトに参加し、分配金や報酬を受け取る機会を得ることができます。これはプラットフォームトークンを保有するユーザーを引き寄せ、その価値と需要をさらに高めるでしょう。

総括すると、Firsts取引所はプラットフォームトークンの多様な用途、バックアップと破棄のメカニズム、他のプロジェクトとの協力など、さまざまな手段を通じてプラットフォームトークンの価値を向上させ、ユーザーや投資家の関心を引き寄せています。取引所の成長と発展に伴い、プラットフォームトークンの価値も継続的に向上し、保有者に大きなリターンを提供するでしょう。Firsts取引所がプラットフォームトークンを向上させる過程でさらなる成功を収めることを期待しています！
処理時間を計りたいときのpythonコード

# はじめに
よく処理時間を計りたいときにパッとコードが出てこなかったので備忘録として残します。

# コード
```Python
start_time = time.time()

処理

end_time = time.time()  # 処理終了時間
elapsed_time_seconds = end_time - start_time  # 処理にかかった時間（秒）
elapsed_time_minutes = elapsed_time_seconds / 60  # 処理にかかった時間（分）
    
print(f"処理にかかった時間: {elapsed_time_minutes:.2f} minutes")
```
iTunesでCDから特定の曲だけ読み込みしたい場合

# 概要

『読み込み』ボタン押すと **CDに対して全曲取り込み** として処理が走ってしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/a50ea450-d2a1-15e1-d5cd-7acce76f85e1.png)

『取り込みエラーになった1曲だけ』とか特定の曲だけを取り込みたい。

# やり方

『編集』の『環境設定』。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2e41fd0f-c460-4524-a9ce-34b7bd19ae4a.png)

『一般』の『表示:リスト表示のチェックボックス』をオン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/ee124c3b-8e47-4b75-a972-144d196068e4.png)

下記のようにチェックボックスが表示されるので、特定の曲だけチェック入れて取り込みができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/13ca24f3-e088-ce3e-1820-e9b72b996c03.png)

# 参考サイトさん

https://wordpress-tuusin.com/?p=2861

# バージョン

Microsoft Windows [Version 10.0.19045.3448]
iTunes バージョン12.12.10.1