OmniAICreator/Qiita-1.07M huggingface dataset:
Teams PlatformのSmartな労務体験を語ってみる

# はじめに
こんにちは。
私はとあるIT企業で人事労務担当をしています。

Teams + Microsoft365 / Power Platformが使えるようになったのは、まだ一年に満たない状況ですが、
Power Appsの自動で構築されるアプリでも相当な業務改善ができるな、と感じたので体験談をシェアさせてください。

テーマは**Teamsを基盤としたPower Platform活用のすゝめ**です！
***
## Teams Platformという考え方

https://www.microsoft.com/ja-jp/biz/wsi/teams-platform

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/9008941c-6c38-8cec-0b81-3677ab260f19.png)

Teamsを土台にして、アプリの利用を **よりスムーズにできる**Platformのことを指していると理解しています。

特にPower Platform、Power Apps/Power Automate/Power BIを「サッと使う」基盤になるので重宝します。

## どんな活用が見込めるか、考えてみる
Microsoftの製品に統合している環境であれば、その製品の組み合わせを活かし、
**ロジックで全て完結できる未来が見えてきそうです。**

しかし世の中全てがMicrosoft製品だけで業務が運用されているかというとそうでもありません。
「レガシー」「SaaS」含めて沢山のアプリケーションが存在します。

様々なアプリケーションが入り混じることによって、**「データが全てつながる自動化」** が出来なくなる
業務環境で働いている方もいらっしゃるのではないかと思っています。

ヒトの判断が介在しないとデータ連携ができない、そんなジレンマを様々なサービスが生まれ、
環境が変わることで発生したりするアンチパターンです。

![フロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/93a041b5-68e8-a87b-8055-8421556d45cd.jpeg)

## ヒトの判断で「求めるアウトプット」までつないでいく

ここで「Teams Platform」に話を戻すと、ヒトの判断が介在するにしても、
判断の後のステップ、自分の手を動かすことを最小限にすることが業務改善につながっていきます。

1. 判断 - ToDoの把握
1. アクションの指示 - ToDoの実施

この流れを高速化するが一つの解決策です。

### 具体的な例
 1. 社内で内製化したワークフローで社員情報の変更をキャッチする
 1. 社員自身にやっていただく手続きを説明する
 1. 社員から来た成果物を関係する機関に提出する

社員情報は機微な情報ですので、**SaaSにログインしないと情報が見れない**
そのためワークフローの中に人の判断が介在する

そんなケースがあるとします。
これをTeams with Power Platformで高速化しようとするならば、こんなことができます。

 - Sampleのアプリが出てきますが、すべて架空の情報です

1. SharePointで管理している従業員名簿のアプリを作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/925841a7-9c26-2081-2f91-856b85551a61.png)

1. このPower Appsに接続している **「SharePoint」の情報を使って、できる自動化を組み込んでみる**
Example)
 - SaaSから連絡がきた個人情報の変更に対してレスポンスするメール送信
 - 社内手続きの案内
 - チャット
 - アダプティブカード

*そんなこと過去の情報をコピペすればいいからいらない！*

ということもあるかもしれませんが、**人がやっている作業は全てミスのもと**
ロジックに合わせた運用のほうが**ベター**

常時開いているTeamsからアクセスすることによって、Quickで正確なレスポンスが実現できます！

 - 速度
 - 正確さ
 - 簡単さ

そのプラットフォームとなる、**「自分の」 or 「チームの」利便性 and クオリティ向上につながる**
***

# Teamsに組み込む

1. **Teamsのタブから簡単にアクセス！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b8dd28b1-46f0-7c4f-d93d-0559795d8705.png)

1. **対象者を選択して、ToDoをポチっ！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/572de6e2-58b9-8d8d-d176-fb34a19269b8.png)

     - 自動化したい作業をカスタマイズ！Power Automateの機能で**自由にカスタマイズ**
 
1. **マウスをホバーして[ 西暦 / 和暦 ] 変換も！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/9a366be5-1426-1927-99d1-743b97987b52.png)

👆のテクニックはMishima (id:island3m)さんのブログを参考にさせていただいています。

https://island3m.hatenablog.com/entry/2021/12/13/

細かいシゴトだからこそ改善のハードルも下がり、まず実行することができます。
**それも簡単にスタートできる！アプリの作成も慣れれば数分もかからない。**

*もう全部Teamsでやっちゃいなよ♪*

それくらいの体験ができます。
凄いアプリを作ることができると同時に、
**簡単・スピーディに業務改善の仕組みづくりができることもPower Appsの魅力！**

やってみようと思った方！是非やってみてくださいね！
**Small Start is Good!!**
AWSサービスのアイコンだけ見て何のサービスか言えたらめっちゃかっこよくないですか？ 

本記事は、[KDDIアジャイル開発センター Engineer & Designer Advent Calendar 2022](https://qiita.com/advent-calendar/2022/kag) の6日目の記事となります。

# まえがき
AWSサービスのアイコンだけ見て何のサービスか言えたらめっちゃかっこよくないですか？ 
かっこいいに決まっています

# そんなの無理だよって思った？
心配は無用です
私達はたくさんのポケモンの名前を完璧に覚えられますし、世界一難しい言語とされる日本語（※諸説あり）を何不自由なく使いこなしています


童心に返りましょう、（ここでは）AWS はポケモンです

# awguess
そんな悩める私達のために、AWS re:Invent 2022 期間中の 2022年11月29日、
**awguess** というサービスが突如リリースされました

https://twitter.com/adamdotdev/status/1597271382110654465?s=20

https://awguess.com/

awguess は、制限時間の中で、表示されたアイコンがどのAWSサービスに対応するか4つの選択肢から回答し、得られたスコアを競うものです
既に250以上の AWS サービスに対応しているとのこと

やりやがった...

# やるぞ！！！
私の Score は 39 でした、ほぼ運ゲーです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/c4bd911b-f1ad-b8cd-06c7-5cb9d70d9aac.png)

率直な感想ですが、知らないサービス死ぬほどあるなと再認識しました...
ただなんかこう、消去法が付け入るスキのない4択問題を己の直感を信じて解答していく感じ、「今この瞬間（とき）を生きて」いた、幼き日を思い出しました

# ちなみに
「ポケットモンスター 金・銀」までに登場するモンスターの数は 251 種類らしいです
モンスターとAWSサービスを一対一に紐付けて覚えることもできる・・・！？

今なら自信を持って言える、AWSはポケモンや！！！！！！

# ちなみに2
製作者の Adam Elmore 氏は AWS DevTools Hero で、ツイートを見るに今回の re:Invent にも現地参加していたようです

awguess のページ下部にもこのような記載が

> made in a hotel in vegas
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463957/95a6bed5-30cb-4507-5bd0-596af9bdc556.png)

なんなんだこの人...
M5StickCPlus development with python (Ubuntu22.04)

# Ubuntu22.04 にて M5StickCPlus の開発を Python でする環境
## セットアップ
### Ubuntu 22.04
pyenv等でpythonが利用できるようにしておく。
私自身は現在3.10.5をグローバルで利用できるようにしてある。
### M5StickCPlusにファームウェアを書き込む（Pythonを利用する為）
予めUbuntuマシンとM5StickCPlusをUSBケーブルで接続しておく。
私の環境では
/dev/ttyUSB0
として認識されている。
そして、
[M5Stack Developer Center](https://docs.m5stack.com/en/download)
上記リンク先の
UIFLOW FIRMWARE BURNING TOOL
のリストから
M5Burner Linux x64 v3.0
をダウンロードし解凍して実行する。
```
unzip M5Burner-v3-beta-linux-x64.zip
./M5Burner
```
M5Burnerが立ち上がるので左側のSTICKCを選択する。
UIFlow_StickC_Plus
の
Downloadボタン
を押す。しばらくするとボタンが
Burn
になるのでこれを押してファームウェアを書き込む。
これでM5StickCPlusはPythonが利用できるようになる。
M5Burnerを終了する。

### VSCode
VSCode自体のインストールに関しては省略
VSCodeを立ち上げ、拡張機能から
vscode-m5stack-mpy
を選択しインストールする。


## プログラミング準備
### M5StickCPlus
USBモードにしておくこと！
### VSCodeを立ち上げる
VSCodeを立ち上げ
下段の
Add M5Stack
をクリックし、デバイスを選択（/dev/ttyUSB0）してOKボタンを押す。
この作業はVSCodeを立ち上げる毎にやらなければならない。
また、前回、VSCodeで編集したM5StickCPlusのファイルは自動的に読み込まれないので、前回使用したファイルはタブから一旦取り除き、再び読み込む必要がある。
これは編集するファイルがM5StickCPlus内にある為である。
### M5StickCPlus内ファイルの確認
VSCodeのエクスプローラーのM5STACK DEVICEのデバイス（/dev/ttyUSB0）を展開すると表示される。
main.py
はM5StickCPlusがAppモードで実行するプログラムとなる。
例えばM5StickCPlusにENV3センサを接続した状態で、
test.py
を編集して次のようなプログラムを書いて実行（右上▶：Run in M5Stack）すればENV3センサでの情報が表示される。
```test.py
from m5stack import *
from m5ui import *
from uiflow import *
import utime
import unit

def run():
    lcd.orient(lcd.LANDSCAPE)
    unit_env = unit.get(unit.ENV3, unit.PORTA)
    while True:
        tmp = unit_env.temperature
        hum = unit_env.humidity
        pre = unit_env.pressure / 100.0
        
        setScreenColor(0x000040)
        lcd.text(20,  5, '{:6.1f} C'.format(tmp))
        lcd.text(20, 25, '{:6.1f} %'.format(hum))
        lcd.text( 5, 45, '{:6.1f} hPa'.format(pre))
        utime.sleep(1.0)

run()
```
プログラムを編集しM5StickCPlusとのUSBケーブルを抜く前には必ずプログラムを保存しておくこと！

### MicroPythonへのREPL接続
ターミナルから直接MicroPythonへ接続することも可能
```
screen /dev/ttyUSB0 115200
```

### MicroPython関連資料
[MicroPython modules wiki](https://github.com/m5stack/UIFlow-Code/wiki/Advanced)
[UIFlow micropython code](https://github.com/m5stack/UIFlow-Code)
[M5StickC-Plus Library](https://github.com/m5stack/M5StickC-Plus)
[MicroPython - M5StickC PLUS](https://docs.m5stack.com/en/quick_start/m5stickc_plus/mpy)
Crypto exchange - Is it really the best business idea for startups?

These days, many people are willing to start their own businesses to generate more money. But before choosing their business, they expect some essential parameters like 

Is the business really have a  demand among people?
In what ways it helps to generate profit?

These are the basic questions raised by many aspiring startups. But some can easily find the best business ideas as per their requirement. Others will have confusion in choosing the best business idea for their business.

Those who got confused to pick the best one, Don’t worry guys!!

This post has a wonderful solution for you. It aids you to start your entrepreneurial journey in a splendid way. 

Without taking much time, 

Let me quickly reveal the best business idea - “crypto exchange”

Cryptocurrencies are a trending term in the crypto place. It has a huge craze among many traders. Interest and demand created by cryptocurrencies are unimaginable. And it makes crypto exchange one of the popular business ideas.

Why should you start a crypto exchange?

As I mentioned the demand for crypto exchange, it is the right time for a startup to establish a crypto exchange business to gain a massive audience. More than this, as a startup, you can easily generate a huge amount of revenue in multiple ways.

Let’s have a quick sight into it,

Withdrawal fee
Trading commission
Listing fee
Margin trading
IEO launchpad
Deposit fee

And more,

By looking at these, Crypto exchange will definitely satisfy your basic needs, and picking out this one as your business idea will help you attain a fine success ratio. I hope, you understand a little bit about the crypto exchange. But, when it comes to the development part, a lot of queries arises in your mind. In order to get clear-cut answers to all your questions, then refer to the astounding blog - [how to start a cryptocurrency exchange](https://blog.cryptostars.is/how-to-start-crypto-exchange-1a5dcedc5d00).  Which guides you to begin a crypto exchange business in a hassle-free way.
【Pabbly Connect】自動でGoogleDriveにGmailの添付ファイルを保存したい（ノーコード）

# はじめに
この記事はWanoグループ [Advent Calendar 2022](https://qiita.com/advent-calendar/2022/wano-group) 11日目の記事です。
今回はPabbly Connectを使い、自動でGoogleDriveにGmailの添付ファイルを保存するお話です。
一切コードを使用しませんので、GoogleアカウントとPabbly Connectのアカウントだけご用意してお読みください。

# 背景
弊社はGoogle Workspaceを使用しており、もちろんメールはGmailを使用しております。
Gmailに添付された契約書や見積書をGoogleDriveに保存しておりますが、この一連の作業を自動化したいのです。
一般的なやり方はGoogleAppsScriptを利用することで実現できますが、極力コードは書きたくない。
別の方法で試してみます。それは「Pabbly Connect 」。

# Pabbly Connect について
Pabbly Connect とは様々なアプリの連携をノーコードで構築できるサービスです。
Zapierに比べて安価です。無料プランもありますし、月額プラン、買い切りプランもあります。

https://www.pabbly.com/connect-onetime/

# 使い方
まずコチラをご確認ください。
https://www.youtube.com/watch?v=ilMQzc5BNQg
<iframe width="560" height="315" src="https://www.youtube.com/embed/ilMQzc5BNQg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Pabblyはチュートリアル動画が充実しています。ノーコードを選択するユーザーはテキストより動画が嬉しいものなのです。至れり尽くせり。
この動画の通り操作をするだけで大丈夫です。
それなのに、 **沼にハマってしまいました。** ほんと恥ずかしい！
２日間沼にハマった箇所は後ほど解説します。

大まかな流れは下記の通り
1. 新規ワークフローを作成します。Create Workflow！
2. TriggerにPabbly Connect 用「Email Parser by Pabbly」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/f6b965f9-711a-ce4b-f347-bc9b10e5221c.png)

3. Gmailの転送先にEmail Parser by PabblyのEmailを設定します。
:::note warn
特定のメールを受信したときに転送するよう設定するには、フィルターを使用してメール転送を行います。
:::


https://support.google.com/mail/answer/10957?hl=ja&ref_topic=7280290

4\. Pabblyの「Caputure Response」をクリックし、添付したメールを送信します。Triggerが反応するか確認します。「Response Received」と表示し、Lavel,Calueが反映されたら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/14f0e506-ae71-adde-aa28-0fc372586a27.png)

5\. ActionにGoogle Driveを選択し、Upload a File を選択します。Connectボタンをクリックし自身のGoogle Driveを紐づけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/415032ab-7644-cb25-ade3-93b01c87c1e1.png)

6\. Actionの各項目を設定します。TriggerでLabelを紐づけます。
+ URL：Attachment Links 0
+ Folder ID：保存したいGoogle DriveフォルダーのID（https://drive.google.com/drive/folders/◯◯◯◯◯◯◯◯◯◯◯◯）
+ File Name：Header Date（日付）など。From 0 Display（送り主名）でも良いと思います。

そのまま保存すると、指定したフォルダに添付ファイルが保存されると思います。


# どこで失敗したのー？？
### 直送NG
Email Parser by Pabblyで払い出されたメールアドレス宛に添付ファイルを送信しましたがダメでした。
添付ファイルがActionと紐づけることができず、「Invalid argument」というエラーメッセージがログに残るだけです。
ノーコードサービスなのに引数が変ったと言われても困るんですけど。
色々調べたところ、あくまで **転送先にメールアドレスを設定** しないとダメのようです。
ついついメールアドレスがあると直接メールを送ってしまいますよねー。健気に２日間メールを送ってしまいました。
直接メールを送っちゃダメ！転送先に指定！

### 添付ファイルは1MBまで
添付ファイルは1MBまでです。Email Parser by Pabblyの説明欄に書いてます。
試しに1MB以上送ったところ[メーラーだえもんさんからお手紙](https://www.amazon.co.jp/dp/4839918937)が届きます。お手紙の内容はもちろん「メールサイズの制限超過」。知ってる。

### 間違えてファイルを更新、削除できちゃう
Google Driveを連携すると、ファイルをコピーしたり、上書き保存したり、削除したりと色々できてしまいます。ちょっと選択をミスってしまうと削除アクションが実行されるわけです。怖い。

もちろんですが、Pabbly Connect が悪意のある第三者に使用されたらおしまいです。
二段階認証はしておきましょう。


# おわり
今回は「添付ファイルが1MBまで」がネックだったので別の方法を検討しますが、大変便利なサービスであることは間違いないです。今回の件以外で自動化したいことがあれば再チャレンジしたいと思います。
git initの取り消しをしたい

git initを行ったディレクトリに移動後、下記コマンドを実行する。
（.gitフォルダが削除されます。）
```
rm -rf .git
```

ちなみに.gitフォルダの中身の詳細については下記記事が参考になります。
https://qiita.com/tatane616/items/dbad66179754be57d2e2
VisualStudioでJsonをクラスとして貼り付けられる機能があるのを知らなかった話

これ地味に便利？だけど知らない人も居ると思うんですけど
Jsonの生データをコピーして
VSの編集→形式を選択して貼り付け→Josnをクラスとして貼り付ける
これで階層が深いタイプのJsonも簡単に貼り付けられます。
なんで教えてくれなかったんですか？
最短でWEBデザイナーになるには・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985441/c82f47ae-bd2c-f763-0c91-051d2953f71e.png)


# はじめに

WEBデザイナーになるには、どのようなスキルを身に着ける必要があるのでしょうか。
20年ほど前までのWEBデザイナーの仕事は、PCのホームページを作る仕事でしたが、2014年以降タブレット・スマートフォンの普及によりSPユーザーが50％を超え、SNS中心にモバイルでWEBサイトを見ることが主流になりました。

そのようなことに伴いHTML5やレスポンシブデザイン技術を駆使したWEBアプリ、WEBサービスが数多く登場しました。
WEBは日進月歩で進化し、今も新しい技術が誕生し続けています。

本屋に行けば一目瞭然、プログラミングやWEBに関する書籍が山のようにあります。
人々の関心は高まっていますが、何から勉強すれば分からないといった声も多く聞こえてきます。

そんな中で、WEBデザイナーになるには何から学べばいいのかを今回の記事ではご紹介していきたいと思います。

# 最短でWEBデザイナーになるならスクールがお勧め

WEBデザイナーに最短でなるには、やはりお金を出してスクールに通うのが手っ取り早いです。
ネットでググりながら地道に知識を身に着けていくのでは、少々時間がかかりすぎてしまいます。
デザインツールでいえば、PhotoshopやIllustratorにXDなど、どれも高機能で使えるようになるまでにかなりの時間を要します。
スクールでは、スキルが身につくだけではなくたくさんのメリットがあります。

## プロに教えてもらえる環境

スクールで最もメリットなのは、プロに教えてもらいながら学習進められることです。
独学の場合、ググってもわからない場合挫折に繋がってしまうことは多々あります。
その点スクールであれば途中挫折しないように講師の方が丁寧に対応してくださり、楽しみながら学習を継続することができます。

## 転職サポートがある

WEBデザイナーのスキルを身に付けた後、企業で実務経験を積みたいと考えている場合、スクールの転職支援制度を活用することをお勧めします。中には独立やフリーランス、副業、企業支援なども行っているサービスもあるので、スクールのコース内容をしっかり確認しましょう。
「転職支援あり」という記載があっても、相談に乗ってくれるだけでキャリアコンサルタントはつかないところなどもあったりする為、無料カウンセリングなどを活用して支援内容をきちんと把握しましょう。

# 人脈が広がる

独学では絶対に得られないものとして、「人脈が広がる」というメリットがあります。
これをスクールに通う目的にされる方もいるくらいで、魅力の１つではないでしょうか。
スクール講師や、同じ方向に向かって頑張っている受講生と知り合うことは、モチベーションの維持や情報収集に大きく影響します。
また、卒業した後もお互いに助け合ったりよき仲間として関係を構築することができます。

# WEBデザイナーを目指すなら

WEBデザイナー向けのプログラミングスクールです。
基本的なHTML～CSS、Javascript、PHP、WordPressなど、WEB制作に必要なスキルを網羅的に学べます。

https://koga.ninjacode.site/?ni=q_10
paizaラーニング「要素数の出力 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__2dmatrix_output_step1
#### 私の解答
```Python3
a=[1, 2, 3, 4, 5, 6]
b=[8, 1, 3, 3, 1, 8]
c=[a,b]
print(len(a)+len(b))
```
解答例とは若干異なりました。
#### 解答例
```Python3
li = [[1, 2, 3, 4, 5, 6], [8, 1, 3, 1, 3, 8]]
print(len(li) * len(li[0]))
```
- Python3 では、リストの要素にリストを入れることも可能です。
- 配列の要素の総数は (配列の行数) * (配列の列数) で求めることができます。
行数、列数の求め方を以下で説明します。
    - 【 行数の求め方 】
        - len 関数で求めます。
        - len(li) は、変数 li の要素数がいくつかを返します。今回の場合、変数 li が持っている要素は以下の 2 つです。
[1, 2, 3, 4, 5, 6]
[8, 1, 3, 1, 3, 8]
よって、len(li) は 2 を返します。
    - 【 列数の求め方 】
        - こちらも len 関数で求めます。
        - 今回の場合、リスト [1, 2, 3, 4, 5, 6] と、リスト [8, 1, 3, 1, 3, 8] の要素数は同じなので、どちらの要素数を求めてもよいですが、ここでは、リスト [1, 2, 3, 4, 5, 6] の要素数を求めます。
        - リスト [1, 2, 3, 4, 5, 6] は、変数 li の 0 番目の要素なので、li[0] で取得します。
        - リスト li[0] の要素数は len(li[0]) で取得できます。
- 以上より、リストの要素の総数は len(li) * len(li[0]) で求めることができます。
AWS入る時スマホ出すのめんどくさいです。

# [<font color="#333">今回やること</font>](#-今回やること)
タイトルの通りです。
AWSログインする時にスマホを取り出すのがめんどくさい。
AWSの2段階認証をmacのみで完結させます。
職場で教えて頂いたので備忘録。


AWSのIAMからユーザーを選択。認証情報⇨MFAデバイスの割り当てを選択
![スクリーンショット 2022-12-05 16.17.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920917/8d2e645d-9d96-7d5c-599a-2ac6a1f6d15d.png)
アカウント名を入力して続行

既にMFAデバイスを割り当てている場合は警告が出るので一度削除して設定し直せばOK。
以下の画面からシークレットキーをコピーかどっか控えておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920917/d852438b-f668-abc0-1002-91dffc617cee.png)

### 設定手順
```bash
brew install oath-toolkit

oathtool --totp --base32 "シークレットキー"
259927 # これそのままMFAコードとして利用できる。


# エイリアス化
# bash使ってるなら
vim ~/.bash_profile
# zshなら
vim ~/.zprofile
# 　私はfishなので
vim ~/.config/fish/config.fish
```

以下のように記述
```bash
alias awsotp-hoge='oathtool --totp --base32 "シークレットキー" | pbcopy && pbpaste && echo "ワンタイムパスワードがコピーされました"'
```
設定し終わったら一旦ターミナル再起動しましょう。

## 実行
```bash
awsotp-hoge
ワンタイムパスワードがコピーされました
```
これでいつもスマホを見て焦りながら入力していたパスコードがコピーされているので貼り付けるだけです。

[clippy](https://clipy.softonic.jp/mac)とか使ってコマンドを登録しておけば楽チンですね！
リスクヘッジの観点からもスマホとMacで管理できるのは良いかと！

## ありがとうございました！
Notionのデータベースの列幅をチェックボックス以外でも最小にする方法



## 😦問題点
2022年12月現在、Notionのデータベースの最小列幅はプロパティ種類がチェックボックスかそれ以外で異なる。

**✅チェックボックスの場合**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390632/3db9fbe8-c1fb-5dff-b6ad-5473a5b32a05.png "aaa")

**🔽セレクトの場合**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390632/5a321492-4926-edbe-1af4-cb93de33383c.png)

## 📝チェックボックス以外でも列幅を最小にする方法
1. 列幅を最小化したいプロパティの種類をチェックボックスにする
1. 列の幅を最小にする
1. プロパティの種類を元の種類に戻す
1. 完成

**🔽セレクトで列幅が最小**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390632/3c14ffbe-6524-1f71-728a-37a227fba090.png "完成")

## :warning:注意
列幅を変更しようとすると通常プロパティの最小列幅に強制的に戻る。
一度上記の手順を行ったら列幅を変更しないようにする。

## 👋終わりに
上記の例のように1文字のタグを表示したいときや、関数を使って条件にあったレコードに絵文字を表示したいときなど、チェックボックス以外の場合でも列幅を最小にしたい需要は多いです。
ぜひ公式のアップデートで仕様として実装してくれたら嬉しいですね。
AWSからGCPにサービスを移行して感じたこと

こんにちは、トレタでサーバーサイドエンジニアをしている神山と申します。

こちらはトレタアドベントカレンダー6日目の記事です。
この記事では2022年の振り返りとして、私が担当しているサービスをAWSからGCPに移行した内容について記載していきたいと思います。

# GCP移行の概要
トレタではマイクロサービスアーキテクチャを採用し、AWSのEKSで各サービスをデプロイして動かしていました。
しかしEKSで運用していく中で、メンテナンスコストが高い、インフラの構成が複雑となってしまうためインフラエンジニアに業務が集中してしまうなどの課題が見えてきました。
GCPのサーバーレスなインフラサービスを利用していくことで、メンテナンスコストの低減と各サービスのサーバーサイドエンジニアが自身でもアプリケーションの動作基盤を管理していくことを目的として移行を行いました。

# GCPの構成図
![スクリーンショット 2022-12-06 18.02.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434850/7e859abe-1a39-0be5-4b2a-fa33ddd75955.png)

## 構成の選定理由
#### Cloud Load Balancing
- カスタムドメインを付与するために使用 
    - Cloud Runだけでもカスタムドメインを付与できるが、移行当時はプレビュー版
- 将来的にDDoS対策のCloud Armorを追加することも想定

#### Cloud Run
- サーバレスであり、複雑な設定なくオートスケーリングなどが可能なところから選定

#### Cloud SQL
- 分散型DBは特に求めていないのでSpannerは除外
- AlloyDBの方が推奨となっているが、この移行時にまだプレビュー版なのでCloudSQLを選定
    - AlloyDBであればDBメンテナンスを無停止で行うことができる

#### Cloud Build
- Cloud Runで使用するimageのbuild
- Cloud SQLへのmigrationをCI/CDとして実行するために選定

#### Artifact Registry
- Container Registryでもできるが、imageの管理にはArtifact Registryの方が推奨されていたため選定

#### Route53
- 元々AWS取得しているドメインを流用したかったため、AWSのサービスをそのまま使用しました。
- 証明書の発行部分はGCPを使用しています。

# 各サービスの所感

### Cloud Load Balancing
サービス全体のルーティングに当たる部分ですが、直感的に設定ができるという感想でした。
主に下記3種類の項目を満たすだけで簡単にトラフィックを制御できます
- フロントエンドの構成
    - どのIPアドレス/ポートでListenするかを設定します。
- バックエンドの構成
    - リクエストを受け取った時にリクエストを流すサービスを登録できます。
    - 複数登録が可能です。
- ルーティングルール
    - パスによって、どのバックエンドサービスを使うかを設定できます。

GCPでデフォルト証明書の機能を持っているため、Route53上でCLBのIPとドメインを紐づけることで簡単にHTTP通信が可能となりました。


### Cloud Run
元々EKSでアプリケーションのimageをbuildしたものを動かす形を取る必要があるため、機能のデプロイ自体は非常スムーズに進みました。
またAWSでは少し面倒だったスケーリングの設定なども非常に簡単で、デプロイしたその場でスケーリングにも対応できているのは非常に有用だと感じました。
ロギングや負荷のモニタリングなども一度動かせばGCP上に記録されていくため、今後使用していく中でパフォーマンスチューニングを行うこともできます。
さらにはトラフィックの制御の機能なども持っており想定外のルートからのトラフィックであれば簡単に弾いてくれるなど、簡単に最低限の動作を達成することができました。


### Cloud SQL
Cloud SQL Auth Proxyと組み合わせることで、IAMベースでCloud SQLと接続する機能が便利だと感じました。
gcloud CLI使い、個人アカウントで認証しておけば開発環境からproxyを介してCloud SQLに接続することが可能です。
踏み台インスタンスなどを用意する必要がなく、さらにIAMを使って権限管理することもできます。

一点、DBメンテナンスのために数か月に一度、短時間ながら停止してしまうそうです。
AlloyDBではこの点が存在しないらしいので、いつか乗り換えることができたら・・と思っています。

### Cloud Build
gcloud CLIで使用するコマンドをyml形式に落とし込むことができます。
CLoud Buildから使用するymlファイル、githubの発火条件などを設定することができるため簡単にCI/CD環境を整えることができました。

ただ、Cloud BuildからCloud SQLへ接続する際に前述のCloud SQL Auth Proxyを使用したのですが、Cloud SQL Auth Proxyが立ち上がるまで待機する、などの処理が必要となるためこの点だけ少し使いづらさを感じました。

### Artifact Registry
buildしたimageの置き場です。
ディレクトリ形式で管理できたり、imageをスキャンして脆弱性を検査などしてくれる機能などが便利でした。

# GCPに移行してみて
まず、一つ一つのサービスがシンプルで使いやすかったです。
GCP自体のUIも親切で、UIの流れ通りに作業するだけでサービス同士の連携などもできます。
ちょっと環境作ってみるか、くらいのカジュアルさで動作環境を作ることができるなと感じました。

また当初の目的であったサーバーサイドでインフラを管理することもやりやすいと感じています。
UIを少しぽちぽちするだけで設定が切り替わります。
オートスケーリングなどの設定もサービスの動作に関わるため難しいと思うのですが、最低限動くラインが保証されているため心強い・・

まだこの環境で運用が始まったばかりですが、モニタリングを進めつつ運用の改善をしていこうと思っています。


# さいごに

GCP移行について記事をまとめてみました。
元々AWSでのインフラ経験はあったのですが、別のIaaSを触ってみることで見識が深まりました。

なお、トレタではエンジニアの募集を行なっております。
興味がある方はぜひご連絡ください。

https://corp.toreta.in/recruit/engineer/
ミュートされた超有料級の情報商材屋を救いたい。

ぶっちゃけます、これはわりと真実なのですが朗報です。しつこく言ってるけどあまり大きな声で言えないのですが危険です。本当に悔しい。なんと、[クソアプリカレンダー](https://qiita.com/advent-calendar/2022/kuso-app) 6日目を担当します。今年が ５回目の参加です。

これまでに作ったものはこのようなものです。

https://qiita.com/sadnessOjisan/items/45d2c3e6e3f5a38a7f0b

https://qiita.com/sadnessOjisan/items/98619eaaef1da8d6545a

https://qiita.com/sadnessOjisan/items/51bb949466fdd065a5a6

https://qiita.com/sadnessOjisan/items/8399f41b475fe3f61618

---

## この世の真実

僕はTwitterでこの世の真実を学びました。どうやら未経験から３ヶ月で年収１０００万を達成するには、適当な会社に入り込んで適当に箔をつけたらフリーランスに転向すると良くて、飽きたら外資転職して働くとのびのびと働きながら高給にありつけるようです。あとプログラマーは給料が安くて、ITコンサルにステップアップしたら良いと学びました。日本企業はダメらしいです。Twitterはとても学びがありますね。

## あなたのSNSを加速させる魔法の言葉

ところで 9 月ごろに一世を風靡した「Twitter  オススメ書き出し文１００選！」をご存知でしょうか？
本家がツイ消しされてしまって見えなくなってしまいますが、web archiveから辿る限りだと

* 本当に悔しい
* 超有料級
* これはわりと真実なのですが
* 意外と重要なのですが
* 確認しました
* 危険です
* 信じられない
* ぶっちゃけます
* 朗報です
* しつこく言ってるけど
* あまり大きな声で言えないのですが
* あまり知られていないのですが

みたいな言葉を指すらしいです。

## ミュートされた言葉

そんな素晴らしい魔法のフレーズを情報商材屋が教えてくれたにも関わらず、なんと世間の反応は

* ミュート推奨ワードあざっす
* ミュート捗る
* ミュートさせてくれてありがとう

などと冷たい反応ばかりでした。こんなのはあんまりです。

https://twitter.com/MUGI1208/status/1570687071869874176

せっかく超有料級の情報を提供してくれた人に対してこの仕打ちはなんだと思ったわけです。そしてワード単位でミュートする行為はその情報教材を買ったり参考にした人に対してもひどいことをしています。彼らはまだ何もあなたに危害を加えていないわけであって、ミュートするのはズルいです。なので彼らを救いたい気持ちでミュートを貫通するツールを作りました。

それがこの [4johoshozai](https://4johoshozai.vercel.app) です。ミュート推奨ワードの画像を生成したり、あわよくばOGPとして表示できるツールです。

https://4johoshozai.vercel.app

使い方は簡単、ワードを選択して生成ボタンを押すだけです。

![Screen Shot 2022-12-06 at 19.10.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89256/6620b2ca-d8e5-a927-8486-e78c06722dba.png)

![怒ってます](https://4johoshozai.vercel.app/api/image?selected=%E6%80%92%E3%81%A3%E3%81%A6%E3%81%BE%E3%81%99)

あとはツイートに埋め込むとそれがOGPとして展開されます。

![Screen Shot 2022-12-06 at 19.41.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89256/5441c8d4-a0b2-b698-fde9-41286eae7ecc.png)

そして言葉も一個だけだとインパクトがないです。複数ワードモードを搭載し、一覧性を担保できるようチェックボックス形式で提供しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89256/5179d13e-4428-39cd-1dde-b6ebffbf0e1c.png)

さあ、これでバズツイを量産していきましょう！

## 技術的な解説

お察しの通り、[@vercel/og](https://vercel.com/docs/concepts/functions/edge-functions/og-image-generation) を使っただけです。

ソースコードは https://github.com/sadnessOjisan/for-johoshozai です。

最近みんな vercel/og 使ってますよね。JSXをOGPにするツールは2年前に自作していたのにこれは全然流行らなかったから悔しいです。

https://blog.ojisan.io/jsx-preview/

## さいごに

これは超有料級の情報なのですが、一角屋のラーメンには麺抜きオプションと白米があるので、初手からラーメン汁ご飯を楽しめます。
AWSでついにデータカタログサービス提供！Amazon Data Zoneについて調べてみた

# はじめに

この記事は株式会社ナレッジコミュニケーションが運営する [クラウドAI by ナレコム Advent Calendar 2022 ](https://qiita.com/advent-calendar/2022/knowcom-cloudai)の 6日目にあたる記事になります。

今回はAWS が開催する re:Invent 2022 で発表されたデータカタログサービス「Amazon Data Zone」についてどんなサービスなのか調べてみました。

#  そもそもデータカタログとは
文字通りデータのカタログという意味なのですが、企業が取り扱うデータに対してバリエーションであったりどんなデータがあるのかなどを整理した機能を管理します。
データカタログでは構造化データだけでなく、非構造化データ(画像やセンサーデータなど)も管理の対象となります。
構造化データがメインの業務システムよりは範囲が広く管理されることになります。

データレイクの登場に合わせて、データの理解や取り扱うデータの整理が必須になってきている昨今、データカタログの必要性について注目する企業が増えてきています。

# Amazon Data Zoneとは
![2022-12-06_09h22_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323405/e34eafad-9047-de2e-8286-14e1ae05cba6.png)
Amazon Data ZoneはAWSや、オンプレミスだけでなくサードパーティのソースに保存されたデータを管理しデータカタログ化するサービスです。

具体的にはAWSサービスだとAmazon AthenaやAmazon Redshift、Amazon QuickSight、サードパーティ製品だとDatabricksやTableau、SnowflakeともAPI連携できます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323405/0cf190f2-fc76-4309-d3e7-f5eaeeae39a8.png)

機能は主に以下の3つになるようです。

**Amazon DataZone catalog**
公開されたデータを検索して、アクセスをリクエストすることでデータの使用を開始。

**Amazon DataZone projects**
プロジェクトでデータの資産の管理や監視を実行。

**Amazon DataZone portal**
Web ベースのアプリケーションまたは API を介してビューで可視化。


【参考URL】
https://aws.amazon.com/jp/datazone/


# おわりに
会場でもどよめきがあったAWSのデータカタログサービス、ついにきましたね。
フルマネージドサービスということもありAWSでのデータ分析が加速します！
2022/12月時点ではプレビューかつ日本語未対応ですが、活用していきたいですね。
cinの使用後にgetlineを使うときの注意~~コーディングテストでやらかさないために~~

この記事は先日志望度の高かった企業のコーディングテストにて、まったく本質でない入力の部分で時間の8割を溶かしたため、同じ道を歩む人が出ないようにと願いを込めて執筆した記事です。（検索で出やすいようにキーワードもりもりにしました。）

# はじめに
おそらく、競技プログラミング（Atcoder）をやっている方でC++を使用している場合
```c++
#include <bits/stdc++.h>
using namespace std;
int main () {
  int N;
  cin >> N;
  vector<long> data(N);
  for(int i = 0; i < N; i++)cin >> data.at(i);
  return 0;
}
```
のような入力の受け取り方をしている方が多いと思います。
入力から入力数Nをcinで読み込んで、その後N回cinで読み込むというよくあるやつですね。
# 何をやらかしたか
コーディングテストでは入力数がわかる入力+入力数がわからない入力が与えられる形式でした。（問題内容は口外禁止なため最大限ぼやかしています。）
そのため
```c++
#include <bits/stdc++.h>
using namespace std;
int main () {
  int N;
  cin >> N;
  vector<long> data(N);
  for(int i = 0; i < N; i++)cin >> data.at(i);
  string line;
  while(!cin.eof()){
    getline(cin, line);
    cout << line << endl;
  }
  .....
  return 0;
}
```
というふうに、入力から入力数Nをcinで読み込んで、その後N回cinで読み込む、残りのラインを行ごとに読み込んでその後パースし処理を書くという方針を取りました。

.....ただ、入力数が合わず永遠エラーを出し続け時間を溶かしていきました。
# 何が悪かったか
処理後の入力を調べるとgetlineで読み込まれる最初の行が悪さしていることを突き止めました。
提出したコードは最初の行をcontinueで読み飛ばしましたが、テスト後に調べるとcinで入力し終わった最後の行の改行文字が残っているらしいことがわかりました。
# 解決法
```c++
#include <bits/stdc++.h>
using namespace std;
int main () {
  int N;
  cin >> N;
  vector<long> data(N);
  for(int i = 0; i < N; i++)cin >> data.at(i);
  string line;
  cin.ignore();
  while(!cin.eof()){
    getline(cin, line);
    cout << line << endl;
  }
  return 0;
}
```
のように、cinで入力した後に
```c++
cin.ignore();
```
を呼びましょう。これで要らないもの（改行）を捨てられます。

# おわりに
この記事で救われる人がいれば幸いです。
（にしてもgetlineでやらかした人結構いるっぽいですね...[この記事とか...](https://qiita.com/takashi_rits/items/0f2a8befaea07945d0e2)）
DatabricksでChatGPT(OpenAI API)を試してみる

はい、流行り物に乗りました。

https://openai.com/blog/chatgpt/

中身に関する記事は結構書かれていると思いますので、Databricks環境でどう動かすのかにのみフォーカスします。

# APIキーの取得

こちらにサインアップします。

https://beta.openai.com/

メニューから**View API keys**を選択します。
![Screen Shot 2022-12-06 at 19.00.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b5d1ce41-705a-3430-561c-a86ccef6b95f.png)

**Create new secret key**をクリックし、表示されるキーをメモしておきます。

# クラスターの設定

1. 最近のランタイムであれば問題なく動きます。ここでは12.0 ML betaを使っています。
![Screen Shot 2022-12-06 at 19.02.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6601d1e5-24c0-67ec-bd45-8a5e6700dd12.png)
1. ライブラリをインストールします。`PyPI`から`openai`をインストールする様にします。
![Screen Shot 2022-12-06 at 19.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e19c37f7-6ab0-2a6a-4649-a5f974a4db26.png)
1. クラスターが起動し、ライブラリがインストールされたことを確認します。
![Screen Shot 2022-12-06 at 19.43.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0b76a7af-d9c4-57d1-c752-cd3d6fc2b6ef.png)

# シークレットの設定

Pythonのサンプルでは環境変数経由でAPIキーを読み込んでいますが、この方法はDatabricksでは非推奨なので、[シークレット](https://qiita.com/taka_yayoi/items/7e4eae0786b94cb7a5de)を使います。

1. ローカルマシンで[Databricks CLI](https://docs.databricks.com/dev-tools/cli/index.html)をセットアップします。
1. `databricks configure --token`を実行して、Databricks CLIの接続設定を行います。
1. ターミナル(コマンドプロンプト)で以下のコマンドを実行します。

    ```bash:Bash
    databricks secrets put --scope <スコープ名> --key <キー名>
    ```

1. エディタが表示されるので[APIキーの取得](#apiキーの取得)で取得したキーを入力します。
1. 保存してエディタを終了します。これでシークレットが保存されました。

# ノートブックでOpenAI APIを実行

こちらのPythonバインディングのサンプルを参考にします。

https://beta.openai.com/docs/libraries/python-bindings

```py:Python
import os
import openai

# シークレットからAPIキーを取得
openai.api_key = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai")
```

呼び出しやすくなる様に関数にします。APIの仕様はこちらにあります。

https://beta.openai.com/docs/api-reference/completions

```py:Python
def openai_completion(prompt):
  response = openai.Completion.create(model="text-davinci-003", prompt=prompt, max_tokens=3000)
  # コンプリーションを表示
  print(response.choices[0].text)
```

あとは色々遊んでみます。

```py:Python
openai_completion("Databricksとはなんですか")
```
![Screen Shot 2022-12-06 at 19.09.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c89c6d56-6166-2441-35d7-5d5ab330ddec.png)

```py:Python
openai_completion("鳥と猫は同居できますか")
```
![Screen Shot 2022-12-06 at 19.10.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fda98a1a-df03-dd7a-f10a-319f1cd22c47.png)

```py:Python
openai_completion("若者とは何歳までですか")
```
![Screen Shot 2022-12-06 at 19.11.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7cf72bff-fc62-6447-bcce-df96eff28bbe.png)

きちんと返してくれる、すごいです。これで基本は動かせたので他にも何ができるか試してみます。手前味噌であれですが、新しいものをクイックに試す際にきれいな状態の実行環境をすぐに用意できる[Databricksクラスター](https://qiita.com/taka_yayoi/items/c5d99cd77fe4bfcf69f0)は便利だと思います。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
AIは人間よりも富の分配に長けているようだ、との研究結果を表明

この記事は sciencealert Blog の翻訳です。https://www.sciencealert.com/ai-could-be-be-better-at-distributing-wealth-experiment-suggests
![QQ20221206180602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2298092/2817a658-d56e-ac9d-7520-d8340395b0ed.png)
**人工知能**（AI）**は**、**人が設計したシステムよりも普及率の高い富の分配方法を考案できる**ことが、新たな研究で表明されました。

英国に拠点を置く**AI企業DeepMind**の研究チームによる今回の発見は、機械学習システムが物理学や生物学の複雑な問題を解くのに適しているだけでなく、公正で豊かな社会の実現という目標など、**よりオープンな社会目標の実現にも貢献できる可能性**を示しています。

もちろん、それは簡単なことではありません。人間の実際に望む有益な結果を出せる機械を作ること（AIの研究では「**バリューアライメント**」と呼ばれる）は、あらゆる物事、特に社会・経済・政治問題を解決するための最善の方法について、人々の意見が分かれることが多いという事実によって、複雑なものとなっているのです。

「価値観を一致するためのハードルの1つは、人間社会が複数の見解を認めており、AIが誰の好みに合わせるべきかを不明確にしていることです。」と、研究者は、第一著者のDeepMind研究科学者の**ラファエル・コスター氏**が率いる新しい論文で説明しています。

「例えば、政治学者と経済学者は、どのメカニズムが私たちの社会を最も公平または効率的に機能させるかについて、しばしば対立しています。」![QQ20221206174340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2298092/3ba448e8-67a6-4608-092b-8b31cadf1eb0.png)
このギャップを埋めるため、研究者らは**富の分配を行うエージェント**を開発しました。このエージェントは、人々の交流（現実と仮想の両方）を学習データに組み込んでおり、実質的に、人間の好む（そして全体として仮に公平な）結果へとAIを導くものである。

AIは素晴らしい結果を出す一方で、放っておくと社会的に望ましいとは程遠い結論に達することもあります。人間のフィードバックは、ニューラルネットワークをより良い方向へ導くのに必要だとされます。

「AI研究において、人間に適したシステムを構築するためには、人間とエージェントが対話する新しい研究手法が必要であり、価値観の一致したAIを構築するために、人間から直接価値を学ぶ努力を増やす必要があるという認識が広がっています」と研究者は書いています。


## AIエージェントによる富の分配
![QQ20221206180419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2298092/f449ef50-2748-4d14-52c0-6a461dee8980.png)
研究チームのAIエージェント（「**民主主義AI**」**と呼ばれる**）は、合計数千人の人間の参加者を対象とした実験で、公共財ゲームと呼ばれる投資運動を研究しました。このゲームでは、プレイヤーはさまざまな金額のお金を受け取り、そのお金を公共基金に寄付し、自分の投資レベルに応じたリターンを基金から引き出せるようになっています。

一連の異なるゲームスタイルにおいて、**厳格な平等主義**、**リバタリアン**、**リベラルな平等主義**という3つの伝統的な再分配パラダイムによってプレイヤーに富が再分配され、それぞれプレイヤーの投資に対して異なる報酬が与えられました。

また、深層強化学習を用いて開発された**HCRM**（**人間中心の再配分メカニズム**）と呼ばれる第4の方法は、人間のプレーヤーと人間の行動を模倣して設計されたバーチャルエージェント双方からのフィードバックデータを用いて検証されました。

その後の実験では、**HCRMによるゲーム内の金銭の支払いは**、**従来のどの再配分基準よりもプレイヤーに人気**があり、また、投票ごとに少額の支払いを受けることで人気のあるシステムを作るインセンティブを与えられた人間の審判が設計した新しい再配分システムよりも人気があることが明らかになりました。

「AIは、初期の富の不均衡を是正し、フリーライダーを制裁し、多数決に成功する仕組みを発見しました。」と研究者は説明しています。

「私たちは、代表者を選出し、公共政策を決定し、法的判断を下すために、より広い人間社会で使用されている、合意を達成するための同じ民主的ツールを、価値調整のために利用することが可能であることを示しています。」


## AIに潜めている問題
![QQ20221206174940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2298092/a2e0925f-b8a3-77a0-b9eb-1913f6c99a73.png)
研究者たちは、このシステムが多くの問題を提起していることを認識しています。主に、このAIにおける価値観の調整は民主的な決定を中心に行われるため、**エージェントが実際に社会における不平等や偏見を悪化させる可能性がある**（ただし、それが大多数の人々の投票で選ばれるほど人気がある場合）ことを意味しているのです。

また、**信頼危機**もあります。実験では、プレイヤーは自分たちがお金を払っている富の再分配モデルの背後にある正体を知りませんでした。人間ではなくAIを選ぶとわかっていて、同じように投票しただろうか？今のところ、それは不明です。

最後に、研究チームは、この研究は、社会で実際に富が再分配される方法を転覆させる急進的な技術的提案として解釈されるべきではなく、人間が今あるものより潜在的により良い解決策を設計するのに役立つ研究ツールである、と述べています。

「私たちの研究結果は、自律的なエージェントが人間の介入なしに政策を決定する「AI政府」の支持を意味するものではない」と著者らは書いています。

「私たちは民主主義AIを、潜在的に有益なメカニズムを設計するための研究手法であり、公共圏にAIを展開するためのレシピではないと捉えています。」

またほかのAI領域に興味を持っている方に、[VanceAI](https://vanceai.com/ja/)というAI画像編集ツールをおすすめします。
VyOS1.3にZABBIX-AGENT,ZABBIX-PROXYをインストール

# はじめに
VyOS便利だからZabbixも使えるようになるととてもうれしい
当然、cliではサポートしてないのでインストールしてあげればいい。ベースはDebianだから難しくない

VyOS 1.3はDebian 10(buster)を使っているので、パッケージはbusterを選べば良い

## Zabbix-agent
 1. zabbix-agentの導入

    ```
    $ sudo bash
    /home/vyos # wget http://repo.zabbix.com/zabbix/4.4/debian/pool/main/z/zabbix/zabbix-agent_4.4.0-1%2Bbuster_amd64.deb
    /home/vyos # dpkg -i zabbix-agent_4.4.0-1%2Bbuster_amd64.deb
    /home/vyos # systemctl enable zabbix-agent
    ```

終わり

## Zabbix-proxy
zabbix-proxyの導入。ちょいとめんどい

 1. 必要パッケージのダウンロード

    ```
    $ sudo bash
    /home/vyos # wget http://repo.zabbix.com/zabbix/4.4/debian/pool/main/z/zabbix/zabbix-proxy-sqlite3_4.4.0-1%2Bbuster_amd64.deb
    /home/vyos # wget http://security.debian.org/debian-security/pool/updates/main/s/sqlite3/libsqlite3-0_3.27.2-3+deb10u2_amd64.deb
    /home/vyos # wget http://ftp.jp.debian.org/debian/pool/main/u/unixodbc/libodbc1_2.3.6-0.1_amd64.deb
    /home/vyos # wget http://ftp.jp.debian.org/debian/pool/main/f/fping/fping_4.2-1_amd64.deb
    /home/vyos # wget http://security.debian.org/debian-security/pool/updates/main/s/sqlite3/sqlite3_3.27.2-3+deb10u2_amd64.deb
    ```

 1. インストール

    ```
    /home/vyos # dpkg -i libsqlite3-0_3.27.2-3+deb10u2_amd64.deb
    /home/vyos # dpkg -i sqlite3_3.27.2-3+deb10u2_amd64.deb
    /home/vyos # dpkg -i libodbc1_2.3.6-0.1_amd64.deb
    /home/vyos # dpkg -i fping_4.2-1_amd64.deb
    /home/vyos # dpkg -i zabbix-proxy-sqlite3_4.4.0-1%2Bbuster_amd64.deb
    ```

 1. zabbix-proxy設定(最低限)

    ```
    /home/vyos # vi /etc/zabbix/zabbix_proxy.conf
        ProxyMode=1　←お好みで(active mode:0 passive mode:1)
        Server=server.hogehoge.com　←zabbix-serverを指定する
        Hostname=proxy.hogehoge.com　←ホスト名決める
        DBName=/etc/zabbix/proxy.db　←sqlite3のdbを格納する場所(左記通りで無くても良いが、zabbixがアクセスできるところに配置)
        DBUser=root　←sqlite3のアクセスユーザー(デフォルトではroot)
    /home/vyos # zcat /usr/share/doc/zabbix-proxy-sqlite3/schema.sql.gz | sqlite3 /etc/zabbix/proxy.db　←DB作る
    /home/vyos # chown zabbix:zabbix /etc/zabbix/proxy.db
    /home/vyos # chown zabbix:zabbix /etc/zabbix
    ```

 1. 起動と自動起動設定

    ```
    /home/vyos # systemctl start zabbix-proxy
    /home/vyos # systemctl enable zabbix-proxy
    ``` 

# おわりに
ルーターの向こう側を監視したい時なんかは便利ですよね。
エンジニア転職を成功させる正しいポートフォリオの作り方

# はじめに

今回の記事では、「エンジニア転職を成功させる正しいポートフォリオの作り方」についてご紹介していきたいと思います。
実際にエンジニア転職を成功させた方の体験談や採用担当の方の話なども盛り込んだ貴重な内容になっています。
是非ご参考にしていただければと思います。

# 現在の就職活動市場

コロナ禍3年目に突入した2022年。
エンジニア転職市場は、2021年に引き続き過去最高水準の採用数が見込まれているようです。
エンジニア転職は、コロナ禍で危機感を感じ「市場価値を上げたい」「専門知識･技術を習得したい」といった上昇志向で転職を目指す方が多く、未経験で生半可な気持ちでは転職を成功させることが難しいと考えられます。
自分自身をしっかりアピールできるようにしておくことが重要で、その準備として欠かせない要素の一つがポートフォリオです。
参考：[日経XTECH](https://xtech.nikkei.com/atcl/nxt/column/18/00577/010700032/?P=2)

# ポートフォリオとは

「ポートフォリオ」とググると、「金融商品の組み合わせ」とか「資産構成のこと」といった金融用語としての検索結果が多く見受けられますが、今回の就職活動で使われる「ポートフォリオ」の意味としては、一言で言うとスキルの詰まった「作品集」のことです。
企業はこの「作品集」を見て、その人の実力や力量を図ります。
エンジニア業界の採用面接では、企業からポートフォリオの提出を依頼されることは少なくありません。
私が実際に就職活動をしていた頃は、7~8割の企業様からポートフォリオの提出を依頼されました。
採用判定に関わる重要度の高い「自己アピール材料」となるので、しっかり準備をした上で就職活動を進めていきましょう。

# ポートフォリオの提出方法

ポートフォリオの提出方法には、基本的に2つのパターン（紙媒体、Web）があります。
Webの場合、一般的には履歴書や職務経歴書にURLを載せている方が多いです。
対面での面接の場合は、PDFを印刷して持ち込む方もいらっしゃる印象です。

# （※重要）エンジニア転職で知っておくべき3つのこと

ポートフォリオの作り方を解説する前に、就職活動を行う上で知っておくべきことを3つ伝えておきます。

### 1. ポートフォリオに頼りすぎない

あくまでもポートフォリオはアピール材料の1つであり、**これがないとダメ**とか**沢山作ればいい**というようなものではありません。
もしポートフォリオが無かったとしても、具体的なプロセスを話せるようにしていれば十分です。（大事なのは理解できていること）
採用経験者曰く、沢山の作品が詰まったポートフォリオを持ち込んでも、逆に自信がなさそうだとマイナスに感じることもあるようです。
そうなってくると「ポートフォリオ要らなくない？」と思われるかもしれませんが、誰もがうまく話せる訳ではありません。
話せるように準備をすることも大切ですが、得意不得意もあるのでポートフォリオに頼ることも1つの効果的な手段です。
「うまく話せなかった」で終わるのか「うまく話せなかったけどポートフォリオの反応が良かった」では通過率は変わりそうですよね？

### 2. 企業が求めているスキルは何か（即戦力になりえるか）

会社に属するという事は、会社の一員として役割を持つことになります。
その役割は何かをまず求人票や企業HPを見て明確にしておきましょう。
また、採用面接では、担当者（社長？人事？技術部長？）によって見られるポイントが変わります。
例えば人事であれば人柄面、技術部長であれば技術面、社長であればトータル的な面など、企業によって異なりますががそれぞれ役割をもって複数回の面接を行っています。面接担当者に合わせて、話し方やアピールするポイントを定めておきましょう。

### 3. 明確なキャリアプランがあるか（会社の方向性と合っているかの確認）

自分のやりたいことが、その企業に入社することで実現可能なのか。志望動機にも関連してくる内容です。
自分が実現したい事と会社の方向性が合っていないと、入社後のミスマッチとなってしまうだけです。
バックエンドとしてアプリの開発がしたいのにデザイン・コーディングを行なう会社に入ってしまうなど、求人票によっては具体的に記載されておらず、いざ入社すると「全然違う事をやらされた」というような話もよく耳にします。
求人票や企業HPをしっかり確認し、念のため面接でも聞いておきましょう。

# ポートフォリオの作り方

オーソドックスなポートフォリオの作り方としては、ポートフォリオサイトを作る方が多いです。
プログラミングスクール卒の方だと、基本的にカリキュラムに組み込まれており、テンプレがスクールによって用意されています。
スクールなどに通っていない場合でも、簡単にポートフォリオサイトが作成できるサービスもあるので紹介しておきます。
自己流で作りたい場合はもちろんHTMLとCSS、JavaScriptを使って作成するのもありです！


https://www.portfoliobox.net/jp/


https://www.jimdo.com/jp/

時間がない方 ▼

https://studio.design/ja


# さいごに

今回の記事は以上となります。
『スッキリわかるPython入門』のレビュー

# はじめに
Pythonの勉強を始めて５か月…
まだまだ技術的に身につけるべきことが多いです。
そんな私がPythonを始めて勉強するときに使った参考書『スッキリわかるPython入門』について、まとめてみました。
Pythonの勉強をこれから始めるぞ！っていう人に特に読んでほしいです。
# 自分自身について
私は情報系学部に所属しています。
プログラミングの勉強を始めたのは大学生になってからです。
大学では主にC言語を使っており、Pythonには触れたこともありませんでした。
Pythonは知人から紹介でやってみようと思い、勉強を始めました。
まだ知識は浅いので、これからもっと勉強していきたいと思っています！
# 目次
1. 参考書の紹介
2. 読み終えての感想
3. 良かったところ
4. 悪かったところ
5. おわりに
# 1. 参考書の紹介
先ほども紹介したが、Pythonの勉強を始める時に使った参考書を紹介します。
それは、『スッキリわかるPython入門』です。
ネットでのレビューが高く、プログラミング初学者に多く薦められている参考書です。
多くの書店においてあり、非常に手に取りやすい参考書です。

https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BPython%E5%85%A5%E9%96%80-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%9B%BD%E6%9C%AC%E5%A4%A7%E6%82%9F/dp/4295006327/ref=sr_1_1?crid=3DSEUD7D7REKC&keywords=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8Bpython%E5%85%A5%E9%96%80&qid=1670286271&sprefix=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B%2Caps%2C188&sr=8-1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987651/9b6bfa1e-fdc4-e036-61a1-e8faab60a1fb.png)
# 2. 読み終えての感想
まず読み終えての感想は、「素人の自分でもわかりやすい！」ということです。
プログラミング初学者なら、この本で学べば多くのことを理解できると思います。
しかし、いいところがたくさんありましたが、ちょっと理解しずらいなと感じるところもいくつかありました。
以下では、『スッキリわかるPython入門』の「3.良かったところ」、「4.悪かったところ」をまとめています。
# 3. 良かったところ
**① 実例とともに解説している**
　この参考書では、ただ使い方だけが述べられているだけではありません。
　実際に、ある例を取り上げながら解説が進んでいきます。その例は、私たちの生活に関係のあるような、非常に身近に感じる話題をもとにしているので、学んでいて飽きるようなことはなく、内容も親しみやすいため、あまり抵抗を持つことはありません。
    　　　
**② 間違いの例も取り上げている**
　正しいコードだけではなく、間違いのコードも取り上げられています。ある操作をしたいときに、このようなコードを書くと予想しないエラーが出る。だから、このようにして書き直すと正しく実行されます。というような流れで進んでいくこともあり、わかりやすいです。

**③ エラー対処法がまとめられている**
　プログラム実行時にエラーが出てくるとき、学び始めた時はどのようにエラーを対処すればよいかに困惑するかと思います。しかし、この参考書にはエラー解決についてまとめた内容があるので、それを見れば比較的簡単にエラー解決できます。

**④ 対話形式の解説で進みやすい**
　登場人物がおり、その人たちの対話形式で解説が進んでいきます。文字だけが書かれた参考書では、初めて学ぶにはちょっときついかも…と思っている人にとっては、非常に読み進めやすいです。


# 4. 悪かったところ
**① クラスの解説が少ない**
　最も戸惑ったところが、クラスの分野です。
　参考書では、クラスを扱っているページの数は少なく、あまり踏み込んだところの説明はありませんでした。コードの例が与えられていましたが、なぜそのようになるのかという詳しい説明はないため、この本だけでは理解することは難しいように感じます。

**② ほかのプログラミング言語をやったことある人には不十分**
　この参考書は「入門」とあるように、プログラミングを初めて勉強する人にはお勧めです。しかし、ほかのプログラミング言語をやったことのある人は、知っている部分が多いため、この参考書だけでは満足しないと思います。私自身、Python以外のプログラミング言語を勉強をしたことがあったため、結構すらすらと読めるものの、詳しい内容には触れていないので、そこには少し物足りなさを感じました。

# 5. おわりに
　『スッキリわかるPython入門』を読めば、プログラミングの基本的なことを学ぶことができます。
　しかし、ある程度プログラミングをやったことのある人には向いていないので、自分自身のプログラミングの学習状況に応じて、学ぶ本を選んでください。
光学メディアをddrescueで救う

# 光学メディアは劣化する

…という[記事](https://gigazine.net/news/20221012-longevity-record/)を見た直後に、音楽の発表会のDVDが見られないというヘルプが。
プレーヤーで再生すると、確かに再生が途中で止まる。が、結構頑張るプレーヤーもある。
さて。

# 事前準備
`/dev/sr0`のオーナーに合わせた設定。ArchLinuxなら`optical`グループ、Ubuntuなら`cdrom`グループへの参加、など。

# リッピング
…で検索すると、怪しいサイトが多数引っかかって困る。
そんな時こそ、ArchWiki。[光学メディア](https://wiki.archlinux.jp/index.php/%E5%85%89%E5%AD%A6%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96)の記事が詳しい。
1行で要約すると、`dd`が使えるようだ。
というわけで`dd`すると、早速エラー。

# オチ(中間)
DVDという触れ込みのメディア、よく見るとBlu-rayでした。そりゃエラー出るわ。
気を取り直して、Blu-rayドライブを用意。

# ddrescue
`dd`が使えるなら、`ddrescue`も使えるだろ。
ということで、またArchWiki。[ディスクのクローン](https://wiki.archlinux.jp/index.php/%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3)の記事を見る。
この記事によると、`-d`を使う方法と、使わない方法がある。
まずは`-d`無し+`-n`付きで正常セクターを読み込み、その後`-d`付き+`-n`無しで異常セクターを救う作戦が取られている、と思われる。

[GNU ddrescueのman](https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html)によると、

> -d
> --idirect
> Use direct disc access (see Direct disc access) to read from infile, bypassing the kernel cache. (Opens the file with the flag 'O_DIRECT'). Sector size must be correctly set for this to work. Not all systems support this.
> If your system does not support direct disc access, ddrescue will warn you. If the sector size is not correctly set, an unaligned read error will result and ddrescue will exit with status 1.

とのこと。実際`-d`付きで試したところ、Blu-rayではセクターサイズを正しく設定しないと、動作しなかった。

# Blu-rayのセクターサイズ
ググった結果の物理人間適当AI処理、及び先程の[光学メディア](https://wiki.archlinux.jp/index.php/%E5%85%89%E5%AD%A6%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96)の記事より、DVD/Blu-rayともに2048バイトと推定。

# 色々試して最終的に採用したコマンドラインオプション
…とアルゴリズム(?)がこちら。

1. `ddrescue -b 2048 -r 3 -d /dev/sr0 hoge.iso hoge.map`を実行
2. `ddrescue`が進まなくなったりエラーで諦めたら、光学ドライブのUSBケーブルを着脱して、光学ドライブをリセットする
3. 1〜2を繰り返す or これ以上やっても無駄な感じがしたら、4に進む
4. `ddrescue -R -b 2048 -r 3 -d /dev/sr0 hoge.iso hoge.map`など、`-R`を付けて逆から走査
5. `ddrescue`が進まなくなったりエラーで諦めたら、光学ドライブのUSBケーブルを着脱して、光学ドライブをリセットする
6. 4〜5を繰り返す or 不良セクターあるけどこれ以上やっても無駄な感じがしたら、1に進む or mapファイル中の不良セクター情報が無くなれば、終了

mapファイルがあれば、それまでの救出結果を生かしつつ、救出作業を途中から再開できる。また、mapファイルはテキストファイルなので、中身が読める。

ここに至った妄想は下記の通り。

- `-d`有りのほうが、`-d`無しに比べて、結果として全体の進みが早い場合がある
    - 光学ドライブのバッファやファームウェア、光学メディアのエラーの状態にもよる?
- エラーが蓄積すると、`ddrescue`が進まなくなったりする
    - こうなると、光学ドライブのファームウェアが動けなくなる?
- `-R`だと読めなかったところが読めたりする
    - ピックアップの動きが変わるため?

結果、全セクターの救出に成功しました。劣化具合が閾値ギリギリ(?)だったのでまだ何とか救えたんでしょうかね。

# 結論
(光学メディアに保存したからといって)それで保存できていると思うなよ!
ありがとうArchWiki!

# オチ(最終)

救出の成功を報告したところ、次から次へと要救出光学メディアが持ち込まれることに…
ご家庭でも使いたいので`ddrescue`教えてというご要望も…(誤家庭化をご要望でしょうか…)

# 今後
- 全体的な劣化ではない傷などで、全てを救えなかった場合
    - 動画の一部の場合、数値的な穴埋めでどの程度乗り切れるのか?
    - ISOファイルシステム情報の一部だと?
    - `ddrescue`の[Fill mode](https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html#Fill-mode)の使用
- [USB-Serial trobleshooter](http://www.centech.jp/?p=823)などを使用した自動化
- PowerReadなどエラーに対する独自機能を搭載した光学ドライブの挙動
    - 動画再生時のみ有効のようですが…
    - 専用ソフトも必要そう
- [LTO](https://ja.wikipedia.org/wiki/Linear_Tape-Open)による保存
    - ご家庭では[M-DISC](https://ja.wikipedia.org/wiki/M-DISC)でしょうか…
yamlファイルをVSCodeで編集中にインデントのエラーが大量発生した

# 概要
OpenAPIのyamlを編集中、大量の「タブ使うな！」エラーが発生しました。
```
JS-YAML: Using tabs can lead to unpredictable resultsvscode-openapi
```
あまり意識していなかった部分が原因だったので、解消方法と共にまとめます。

![スクリーンショット 2022-12-06 18.05.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637441/96c63bd4-7549-7790-c1a4-e5dfa028c893.png)

# 結論 ： VSCodeの設定を変更してしまっていた
そもそも、yamlにタブ入力は使用できません。(今回初めて知りました・・・・)
今までそこを意識せずにいられたのは、**VSCodeがデフォルトでタブ入力をスペース入力に変換してくれている**からです。
![スクリーンショット 2022-12-06 18.09.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637441/60ee37e3-3b37-44c5-1ab6-f6f4959d338e.png)

ただし、こちらの設定はVSCode画面下部の設定で簡単に変更することができ、タブ入力をそのまま入力することができます。
こちらで設定を変更した場合、上画像の「Insert Spaces」は変更されず、**このファイルのみに適用される**ので注意が必要です。
![スクリーンショット 2022-12-06 18.35.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637441/42d3680e-8387-8a6e-a5da-3bd523db49a2.png)

「タブのサイズ」となっている場合はタブからスペースへの自動変換が効かず、タブのまま入力されてしまいます。
こちらをクリックし、「スペースによるインデント」から幅を選択することで自動変換の設定へ変更することができます。

![スクリーンショット 2022-12-06 18.38.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637441/8be23891-c9b0-c2c8-74c7-8fa72e8f8b8a.png)

下画像のように「スペース」となっていたら、タブ入力がスペース入力に自動変換されます。
![スクリーンショット 2022-12-06 18.39.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637441/d390e77c-ce56-0a62-e8b4-fa38ecb66df7.png)

気づかずに「タブによるインデント」を選択し、インデント幅を4から２へと変更してしまったのが今回の原因でした。

# 参考
https://www.javadrive.jp/vscode/setting/index9.html
Slack 次世代プラットフォーム機能を少しずつ試す 

こんにちは、Slack の[公式 SDK 開発](https://github.com/slackapi)と日本の Developer Relations を担当している瀬良 (@seratch) と申します :wave:

この記事は Slack の次世代プラットフォーム機能を少しずつ試しながら、ゆっくりと理解していくシリーズの記事の一覧ページです。

この次世代プラットフォームには、あまり聞き慣れないような独自のコンセプトも出てきますので、以下の記事の順で少しずつ学んでいってください。

なお、以下の記事をまだ読まれていない方は、ぜひ最初にこちらの記事をお読みください。

https://qiita.com/seratch/items/ecc16b845483c9d6f9e1

また、英語での公式チュートリアルや GitHub 上のサンプルコードなどをお探しの方は以下の記事もどうぞ。

https://qiita.com/seratch/items/621f7b29e897f17e82a6

それでは、記事の一覧を紹介していきます。

### Hello World 編

まずは Hello World だけをシンプルにやってみましょう。

https://qiita.com/seratch/items/8c91bb367bb942dc0ffe

この記事では新たに以下の内容を学ぶことができます。

* 標準ファンクションだけを使ったワークフローの定義の仕方
* `manifest.ts` へのワークフローの追加
* リンクトリガー、ウェブフックトリガーの作り方

### 初めてのカスタムファンクション編

「Hello World 編」では、標準ファンクションしか使わなかったので、この記事では自前のファンクションを定義して、それを使ってみる方法を解説しています。

https://qiita.com/seratch/items/d3c2d2d9f44551473fb5

この記事では新たに以下の内容を学ぶことができます。

* ファンクションの定義方法とワークフローとのデータ引き渡しのルール

### 外部通信するファンクション編

前の記事のカスタムファンクションは Slack API だけを使ったものでした。Slack 以外のサービスとの連携方法を紹介する記事です。DeepL のテキスト翻訳の API を使った例を解説しています。

https://qiita.com/seratch/items/229e05506a22b07b2599

この記事では新たに以下の内容を学ぶことができます。

* 外部連携のための `fetch` 関数の使い方
* `manifest.ts` の `outgoingDomains` の設定方法
* ファンクションでの `env` の使い方

### ユニットテスト編

https://qiita.com/seratch/items/db978b3371e15bb3a98b

この記事では新たに以下の内容を学ぶことができます。

* ファンクションのテストの書き方
* `deno test` を使ったテストの実行方法
* HTTP リクエスト部分のモック化の方法

### データストア編

https://qiita.com/seratch/items/44fc82c54d8531e4201f

この記事では新たに以下の内容を学ぶことができます。

* `manifest.ts` への追加方法
* データストアの基本的な使い方
* Slack CLI を使ったデータストアへのアクセス
* ファンクション内でのデータストアへのアクセス

### イベントトリガー編

https://qiita.com/seratch/items/f6aed68af3fcac835d2e

https://qiita.com/seratch/items/a4770243f3799b553e9c

https://qiita.com/seratch/items/9e4c59dc5449a70529c1

https://qiita.com/seratch/items/dcec34883a8924f672a0

この記事では新たに以下の内容を学ぶことができます。

* チャンネルベースのイベントトリガーの使い方
* ワークスペース全体のイベントトリガーの使い方
* よくあるユースケースでの注意点

### スケジュールトリガー編

https://qiita.com/seratch/items/19682e89e317b5881b65

この記事では新たに以下の内容を学ぶことができます。

* 定期実行・指定時刻実行のトリガー定義方法

### 標準フォーム編

https://qiita.com/seratch/items/bea4aaf18ab7a27f37db

この記事では新たに以下の内容を学ぶことができます。

* 標準フォーム（OpenForm）の利用法

### 高度なモーダルインタラクション編

https://qiita.com/seratch/items/3258a0d2b40d39f5435f

この記事では新たに以下の内容を学ぶことができます。

* フル機能のモーダルの利用法

### トリガー設定ワークフロー編

https://qiita.com/seratch/items/7a42e115f5510f6a1912

この記事では新たに以下の内容を学ぶことができます。

* ウェブフックトリガーの入力を使って別のワークフローのトリガーを設定する方法
* エンドユーザーにモーダルを使って別のワークフローのトリガーを設定してもらう方法

### ボタンからのインタラクション編

https://qiita.com/seratch/items/c739da114cca3ad1be01

この記事では新たに以下の内容を学ぶことができます。

* メッセージに配置されたボタンのクリックをトリガーにしたワークフローの開発方法
paiza.ioでelixir その124

# 概要
paiza.ioでelixirやってみた。
zipやってみた。

# サンプルコード

```

{:ok, file} = File.open("test.zip", [:write, :compressed])
IO.write(file, "test")
File.close(file)

{:ok, file} = File.open("test.zip", [:read])
IO.read(file, :line)
|> IO.inspect
File.close(file)

{:ok, file} = File.open("test.zip", [:read, :compressed])
IO.read(file, :line)
|> IO.inspect
File.close(file)



```

# 実行結果

```
<<31, 194, 139, 8, 0, 0, 0, 0, 0, 0, 3, 43, 73, 45, 46, 1, 0, 12, 126, 127, 195,
  152, 4, 0, 0, 0>>
"test"

```

# 成果物

https://paiza.io/projects/CeMsLghVciBEcAsXItw8yQ?language=elixir


以上。
イロレーティングを実装しようとしたら簡単だった

# 概要、はじめに
本記事は「N/S高等学校 Advent Calendar 2022」の９日目にあたります。

私はN/S高で働いている傍ら、趣味として卓球をしています。
しかし、社会人が自分のレベルに合った練習相手を探すのは結構難しいものです・・・。
オンラインゲームのように「レーティングシステム」が一般の人たちにまで浸透していたら練習相手を探すのも幾分楽になりそうだと思い、自分でそのプログラムが組めないものか調べてみました。

すると、**レーティングシステムの計算方法を取り込むだけならば、非常に簡単である**ことが判明したので、記事にしておきたいと思います。


# 前提、実施方法
レーティングシステム・・・イロレーティング
└様々なシステムで採用されているレート計算方法

実行環境・・・GAS、スプレッドシート
└レーティング計算さえ出来ればいいので、環境構築不要なgasで作成してみました。


# まずは結果から
レーティングの記事を読むと前提となる式が難しいですが、**結果的に出てくる計算式は至ってシンプル**です。

以下の関数で一般的なイロレートの計算ができます。
```.js
function calculatePoint(winnerRate, loserRate){
  const K = 32;
  let point = K / (10 ** ( (winnerRate - loserRate) / 400 ) + 1);
  return point;
}
```

上記の式をGASに埋め込むと以下の表の結果が得られました。
![スクリーンショット 2022-12-06 18.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2619256/702977f1-ae55-e9b7-b2b8-a7009f399435.png)

いい感じですね。レート差が開いた状態で、レート上位者が下位者に勝っても得られるレートは少なく、逆にジャイアントキリングのような勝ち方をするとレートが大きく変動します。

また、Kの値が大きいほどレートの変更幅が大きく、小さいほど変更幅も小さくなります。Kには32を入れることが多いですが、(チェスや将棋などの)プロの世界では16を用いるのが一般的みたいです。

# 調整する
しかし、レート2000の人が1000の人に勝っても得られるのが0.1ポイントだと寂しいですよね。
そこで**clamp**と言われる、得点の最低値、最大値を定めて調整することが多いそうです。
（clampはHTMLやCSSなどフロントで使うことも多い用語ですが、今回は上記の計算結果の範囲を設定すると言う意味でのclamp関数を作成します。）

clampの関数も簡単に自作して組み込むと以下の通り。

```.js
function calculatePoint(winnerRate, loserRate){
  const K = 32;
  let point = K / (10 ** ( (winnerRate - loserRate) / 400 ) + 1);
  point = clamp(point, 2, 32);
  return point;
}

function clamp(point, min, max){
  if(point < min){
    return min;
  }else if(max < point){
    return max;
  }else{
    return point;
  }
}
```

これをGASに組み込んで実行すると以下のようになり、上位者も最低限のレートを得られるようになりました。
![スクリーンショット 2022-12-06 18.24.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2619256/9b980d5a-b841-6422-820c-6025aaaad4f8.png)

# おわりに
今回はレート計算の方法について学びました。
実は草卓球界(?)でも少しずつこのレーティング方式が始まっているみたいです。もっと言うと、欧米などではみんなが自分のレートを把握していて、練習相手を見つけたり、大会を主催する目安にしたりしているそうです。

レーティングシステムを搭載した、スポーツマッチングサイトなどが作れたら面白そうですね。

# 参考Webページ
[wikipedia・イロレーティング](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%AD%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)
[Manicreator・イロレーティング完全に理解した](https://manicreator.com/articles/elo-rating/)
[Debugging as Usual・[関数命名] 数値を範囲内に収める clamp](http://debuggingasusual.blogspot.com/2017/04/clamp.html)
AlmaLinux9.0でfirewalld設定 (リッチルールでポート番号とサービス許可)

firewalldで特定対象のポートとサービスをリッチルールで許可する場合のメモ。
同時に許可できず、別々に分けて許可する必要あり。

まずポート番号だけリッチルールで指定。
```
# firewall-cmd --permanent --zone=XXXX_Zone --add-rich-rule='rule family="ipv4" source address="XXX.XX.XXX.XXX" port port="XXXX" protocol="tcp" accept'
```
<br>

その後、同じ対象にサービス許可設定。
```
# firewall-cmd --permanent --zone=XXXX_Zone --add-rich-rule='rule family="ipv4" source address="XXX.XX.XXX.XXX" service name="XXXX" accept'
```
<br>

firewalldの再読み込み。
```
# firewall-cmd --reload
```
<br>

反映されている事を確認。
```
# firewall-cmd --list-all --zone=XXXX_Zone
XXXX_Zone (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: XXXXX
  sources:
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="XXX.XX.XXX.XXX" port port="XXXX" protocol="tcp" accept
        rule family="ipv4" source address="XXX.XX.XXX.XXX" service name="XXXX" accept
```
<br>