OmniAICreator/Qiita-1.07M huggingface dataset:
DatadogとAzure Arcの新しいIntegrationについて

※ 本ブログは[こちらのオリジナル記事](https://azure.microsoft.com/en-au/updates/new-azure-arc-integration-with-datadog-simplifies-hybrid-and-multicloud-observability/)からの日本語抄訳および各種情報紹介になります

## DatadogとAzure Arcの新しいIntegrationにより、ハイブリッドクラウドやマルチクラウドを、よりかんたんに観測できるようになった？

2023年3月15日に、以下の内容で発表がありました。

### Azure ArcとDatadogのIntegrationにより以下のことが可能になります

- Azure Arc対応サーバーの接続状況やエージェントのバージョンの、稼働している場所での監視
- Datadogで関連するホストへ、Azureタグの自動追加およびコンテキストの追加
- Datadog AgentがインストールされているAzure Arc対応サーバーの特定
- Azure Arc対応サーバーへ、Datadog Agentの拡張機能としての導入
- Azureサブスクリプション請求書によるDatadogサービスの統一請求書作成

![Screenshot 2023-03-16 at 13.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81226/59c915a6-ae62-3be0-bf74-dc2a32210056.png)

## Azure Arcについて
Azure Arc は、Azure プラットフォームを拡張するブリッジであり、データセンター間、エッジ、マルチクラウド環境で実行できる柔軟性を備えたアプリケーションやサービスの構築をサポートします。
DatadogからのAzure ArcのIntegrationは非常にかんたんで、DatadogのIntegration機能でGUIベースでAzureとつなぐだけです！
Azure Arcについての詳細は[こちらのMicrosoft公式ページ](https://azure.microsoft.com/ja-jp/products/azure-arc)で見られます。
Azure ArcとDatadogのIntegrationについての詳細は[こちら](https://docs.datadoghq.com/ja/integrations/azure_arc/)をご覧いただくと分かりやすいと思います。


私もまだまだAzure Arcについての知識は乏しいのですが、これを機に色々と試してみたいと思います！
GPT-4をts-chatgptの利用可能なモデルとして追加しました！

# はじめに

ChatGPTの登場によって、世界は大きく変化しました。
それは、今まで私たちが俗にいう「AI」というものに関して抱いていた偏見を、文字通り根底から覆したと言っても過言ではありません。

質問を投げ掛ければ、自然な言葉で返してくれます。
`TypeScript`でコードを書くように指示を出せば、その通りの自然な関数や自然なロジックを作成してくれます。おそらくこの流れは止まらないでしょう。

# GPT-4の登場

さて、この記事を投稿した前日。それは2023年3月15日の深夜のこと。
GPT-4が発表されました。

https://www.youtube.com/watch?v=outcGtbnMuQ

GPT-4についての詳しい解説は、こちらの記事と清水亮さんの動画を見ていただけると幸いです。

https://forest.watch.impress.co.jp/docs/news/1485848.html

https://www.youtube.com/watch?v=RVKXZDrNInk

# ts-chatgptにてGPT-4をサポート

ChatGPT APIが公式に公開されたことをきっかけに、僕は`ts-chatgpt`というライブラリの開発に着手しました。

:::note 
その時の内容についてはこちらの記事をご参照ください。
:::

https://qiita.com/takagimeow/items/e3787e419de93f52e5f1

昨日までにサポートしていたモデルとしては以下のモデルとなります。

| Model                | Description                                  | Available |
| -------------------- | -------------------------------------------- | --------- |
| `gpt-3.5-turbo-0301` | The default model.                           | ✅        |
| `gpt-3.5-turbo`      | -                                            | ✅        |

そして今回、`GPT-4`が新たに`ts-chatgpt`を通して使えるようになりました！


| Model                | Description                                  | Available |
| -------------------- | -------------------------------------------- | --------- |
| `gpt-4`              | GPT-4 is the latest and most powerful model. | ✅        |

使い方は以前と変わりません。`prompt()`を呼び出す際に、`model`として`gpt-4`を指定してください。

```ts
import { prompt } from "ts-chatgpt";

const response = await prompt({
  model: "gpt-4",
  messages: [
    {
      role: "user",
      content:
        "In the style of Nicholas Sparks, please summarize the following introductory You are limited to 140 characters. 'I love Android and I develop applications using Kotlin and Jetpack Compose.'",
    },
  ],
});
```

# GPT-4をモデルとして指定する場合の注意点

ただし、注意点がひとつだけあります。
現在`GPT-4`はベータ版かつアーリーアクセスとなっており、限られた人にしかアクセス権が配られておりません。そのため、ChatGPT APIが使える状況であったとしても、`gpt-4`を指定するとエラーが発生する場合があります。

https://community.openai.com/t/when-i-try-the-gpt-4-model-chat-completion-in-api-request-i-get-an-error-that-model-does-not-exist/98850/2

`gpt-4`を使いたい開発者の方は、こちらのwaitlistから申請いただくことをお勧めします。

https://openai.com/waitlist/gpt-4-api

# まとめ

GPT-3の登場時にも私たちはワッと驚かされました。
しかし、今回のGPT-4の登場は世界中の開発者がより驚愕している事象だと考えています。
この記事が投稿沙汰2023年3月16日のTwitterのタイムラインは、GPT-4の話題で持ちきりです。

ChatGPTを使ったアプリケーションを開発する際に、ぜひ`ts-chatgpt`を使っていただけると幸いです。そしてそのアプリケーションが世界をワッと驚かせる日を楽しみにしております。
windowsUpdateErrorで迷走した話

## 前書き
この記事を書くつもりがなかったのでエラーメッセージなど怪しい記述があります。ご容赦ください。

## 症状
* windowsUpdateがされない。設定から更新しようとすると「デバイスに重要なセキュリティ修正プログラムと品質修正プログラムがありません。」表示されていた。
* MicrosoftStoreで一部のアプリの更新が止まり、「サーバー側でエラーが発生しました」と出る。エラーコード:0x80073CF6
* クイックアシスト(win+ctrl+Q)の起動が止まってしまう。
* pcを初期状態に戻そうとすると「pcを初期状態に戻すときにエラーが発生しました」と出る。
* MinecraftLauncherでマインクラフトがインストールされず、「waiting on install」で固まる。

探せばその他あったのだろうが、気づけたのはここまでです。

## 試したこと
[この辺のサイト](https://windowsfaq.net/windows/windows-trouble/unable-to-install-an-app-from-microsoft-store/)に載っている内容は色々なサイトをめぐり一通り試しました。
## 対処法
WindowsUpdateAssistantを[ここ](https://www.microsoft.com/ja-jp/software-download/windows10)から更新したら治りました。すごく初歩的なところに問題があったようです。
windowsの初期化に関しては必要性が無くなったので検証していません。
802.11ah(WiFi HaLow)がやってきた。これは想像以上に手ごわいゾ！

<h3>■導入</h3>
2016年12月に802.11ah WiFi HaLow（ヘイローと読みます）の標準化が完了しましたが、昨年11月にとうとう国内でも使える機器が販売されました。早速、アクセスポイント（以後、AP）とステーション（以後、STA）2台を手に入れて動作確認を開始しました。
<br>
<br>
使用したAP：silex AP-100AH

https://www.silex.jp/products/accesspoint/ap100ah.html

使用したSTA：silex BR-100AH（実際には純粋なステーションではなく、Ethernetとのブリッジ機器）

https://www.silex.jp/products/bridge/br100ah.html


実際使ってみるとなかなか手ごわいことがわかってきたので、今回から何回かに分けて、組込プロトコル屋の目線からレポートしたいと思います。

<h3>■そもそも</h3>
802.11ah（WiFi HaLow）の何が画期的か？というと、これまで長距離を飛ばすことが出来る無線はLoRa、WiSunなどたくさんあったのですが、すべて「独自規格」でした。それが、所謂TCP/IPパケットをそのまま電波に乗せる事が出来るようになったのが新しいです。従来規格では間にゲートウェイを置いて、独自通信-TCP/IPパケットを変換していましたが、802.11ahではプロトコルを変換しなくても、末端までIPパケットで届けて、IPパケットで返送できるという、IoT環境において画期的な規格となっているわけです。<br>
なお、920MHz帯通信でIPv6通信を実現する規格として、以前から6LowPAN（シックスローパンと読みます）という規格が普及しています。しかし、これはパケット長が128byteと短いIEEE802.15.4上でなんとかIPv6を通すためヘッダ圧縮や分割・結合を実施しており、いわば6LowPANという独自規格上でIPv6パケット情報を送受信する仕組みです。<br>
<br>
920MHzという低い周波数なので、遠く（約1km！）まで飛ぶし、回析（電波の回り込み）も期待できるし、省電力のハードウェアが期待できるし、、とIoT環境にはいい事づくめの無線LAN（あえてそう言おう！）です。

<h3>■気になる速度は？</h3>
でも気になる点がありますよね。そう、速度です。
最大3Mbps（国内）と言われていますが、これはWiFi6（？）とかで、何百Gbpsとか言われているのと同様にリンクスピードであり、転送速度ではありません。では、実際にどのような速度が出るのか？　安定して出るのか？　だと思いますが、これについては今後検証していきたいと思います。


<h3>■落とし穴！それも大きな落とし穴！</h3>
920MHzを使った802.11ahの短所は速度だけでは？っと思われるかもしれませんが、そこには残念な大きな落とし穴があることに気づきます。
<br>
　<b>「最大送信時間」</b>
<br>
という運用ルールです。
<br>
<br>
802.11ah推進協議会による「IEEE 802.11ah紹介資料」


https://www.soumu.go.jp/main_content/000758531.pdf

のP.7に「現行のアクティブシステムに適用される920MHz帯チャネルのルール(送信時間率（Duty比）等)に従い運用」とあります。そして、情報通信審議会が総務省に提出した「920MHz 帯小電力無線システムの広帯域化に係る技術的条件」一部答申

https://www.soumu.go.jp/main_content/000800021.pdf

のP.8の表2-1を見てください。1パケットの送信時間が400msの環境の場合は1時間あたりの送信時間の総和が360秒となっています。

え、1時間のうち360秒って、1/10の時間しか通信できないの？という疑問がわいてきます。


<h3>■ということでまずは実験</h3>
以下のような環境で実験しました。

![kankyokosei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032022/1a5226cd-e4f5-aa23-beea-b7a2ce1d39e4.png)


まず片方のPCから他方のPCにUDPパケットを連続送信してみました。受信側PCでのパケット受信数のグラフは以下の通りです。
![ST-AP_duty60_UDP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032022/676ef9df-253e-8b1f-37ec-ed8d1458195a.png)


やっぱりパケットが受信できない（802.11ahで送信されない）断絶期間がありましたね。

では、この断絶がある状態でまともにTCPで通信できるのでしょうか？通常、TCPは送信したシーケンス番号に対するACKが時間内に受け取れなければ再送します。この再送時間は輻輳を回避するため回数が増えるにつれ長くなります。初期待ち時間と最大回数は実装によりますが、実験で使用した環境では以下のような設定です。

送信→0.5秒待ち→再送(1)→1秒待ち→再送(2)→2秒待ち→再送(3)→...→再送(5)→16秒待ち→再送(6)→20秒待ち→再送(7) ...

これと802.11ahの断絶時間がぶつかると、6秒間通信して54秒間は送信リトライをしている、と想像できます。実際、通信グラフはこのようになりました。
![ST-AP_duty60_TCP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032022/147b8a8d-e9b4-56f9-a454-f2f0ad14625b.png)

なんとかTCP接続は保持できているようですが、上記のような再送を繰り返しているのでしょう。


<h3>■今後</h3>
このような特性を示した802.11ahですが、さてさて、組込プロトコル屋としては、せっかくの省電力、長距離、そしてIPパケットがダイレクトに扱える無線なので、この特性に合わせてプロトコルをいじりながら効率を高められないか？っという事で、実験を開始したいと思います。続きは第2弾で！
いいね、フォロー登録よろしくお願いします。
<br>
<br>

Cente：
https://www.cente.jp/

お問合せはこちら：
https://www.cente.jp/otoiawase/
（PHP）変数の再代入をしない方がいい理由としてもいいケース

## 変数の再代入とは
同じ変数を使い回すこと。
```php:例
$var = 1;
$var = 'hoge';
$var = ture;
```

## 再代入しない方がいい理由
- コードが理解しづらくなる
- 変数の値が変わるため、予期せぬバグが生まれやすい（特に仕様変更時など）

## 再代入してもいいケース

### カウンター変数の更新

ループ処理で使うカウンター変数については、スコープ処理のスコープでしか使われないことが確実であれば、可変にしてよいと考えられる。

```php:カウンター変数 $i
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}
```

### 変数の値の更新
+= で変数の値を順次更新していくような場合もある。
```php:例：$total に配列の要素を順に足していく
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,];
$total = 0;
foreach ($arr as $elm) {
    $total += $elm;
}

echo $total; // 55
```

## 結論
再代入する理由がなければ、基本的には再代入せずに新しく変数を定義した方がよい。
【Amazon connect】通話のリアルタイムモニタリングで429エラーとなる場合の対処法

Amazon connectでの通話モニタリングでつまづいたので、書きました。
そもそものモニタリング方法は、以下公式ドキュメントをご確認ください。

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/monitoring-amazon-connect.html

# 429エラーが出て、モニタリングできない場合

リアルタイムメトリクスのエージェントテーブルにて、モニタリングをするための:eye:アイコンは出るのに、以下のような警告が出る場合があります。

:::note alert
MonitorContact failed with requestId: ~~~ - POST 429
:::

#### ルーティングプロファイル設定で「チャネル：音声」が有効になっているか

モニタリングをする人に付与されているルーティングプロファイルの、
チャネルに「音声」が選択されているか、確認してください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3191709/dec577c1-8357-f360-1dce-6bcbfc975e52.png)

AWSのナレッジベース（最下部の参考文献に記載しています）には以下のように記載があり、モニタリングしようとしているチャネルは、モニタリングする人のルーティングプロファイルで有効になっている必要があるそうです。
>The channel (Voice, Chat, or Task) that you're trying to monitor is activated in your routing profile. 

#### セキュリティプロファイルで「CCPへのアクセス」が許可されているか

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3191709/26464296-9642-62d1-a49b-8a9c8b905c98.png)

モニタリングをする人に付与されているセキュリティプロファイルのうちのどれかに、「CCP:CCPへのアクセス」が付与されているか、確認してください。
音声を聞くだけですが、CCPにてマイクのアクセス許可が付与されているかも、確認してみてください。

# おわりに

セキュリティプロファイルは確認したものの、ルーティングプロファイルが関わっているとは……
ナレッジセンターにはトラブルシューティング方法が書かれていたのですが、記事を見つけるまでに時間がかかってしまったので、この記事が誰かのお役に立てたら嬉しいです。


# 参考文献
https://aws.amazon.com/premiumsupport/knowledge-center/connect-conversation-monitoring-issues
[AWS] Security Group と network ACL のルール 

メモる。

## SG

stateful。
明示的allowが不要。


- defalut SG は(inbound, outbound) = (allow all, allow all)
- custom SG は(inbound❎, outbound) = (allow nothing, allow all)


## NACL

stateless。
明示的allowが必要。
ルールの優先度は `1 > 100 > *`

- defalut network ACLは (inbound, outbound) = (`100`=allow/`*`=deny, `100`=allow/`*`=deny)
- custom network ACLは (inbound❎, outbound❎) = (`*`=deny, `*`=deny)


# 覚え方

defaultだとみんなゆるい。
customは基本厳しいが、custom SG は外向きのみ甘い。
appiumオレオレメモ

brew install node
npm install -g appium@next
npm install -g wd
npm install -g appium-doctor
brew install ffmpeg
npm install -g  mjpeg-consumer
set-simulator-location
brew install carthage
brew install lyft/formulae/set-simulator-location
brew tap facebook/fb
brew install idb-companion
pip3 install fb-idb
brew tap wix/brew
brew install applesimutils
brew install ios-deploy
appium-doctor -ios

pip3 install Appium-Python-Client

appium driver install xcuitest
これでエラーになるときは、v1の可能性を疑うこと

シミュレータのリスト
xcrun xctrace list devices



```
def test():
    desired_caps = {
        "platformName": "iOS",
        "appium:deviceName": "iPhone 14",
        "appium:platformVersion": "16.2",
        "appium:automationName": "XCUITest",
        "appium:bundleId": "com.apple.Maps",
        "appium:noReset": "true"
    }
    driver = webdriver.Remote("http://xx.xx.xx.xx:4723", desired_caps)


    el1 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="Allow Once")
    el1.click()

    driver.quit()
```





参考
https://www.scriptlife.jp/contents/programming/2020/02/09/appium-sample-2020/
https://qiita.com/emurin/items/0dd3ad5a64addfc99992
https://qiita.com/lethe2211/items/917ec62d27d5384f5685
https://hub.docker.com/r/quamotion/appium-docker-ios
ChatGPTに負けたくない

## はじめに
この記事は8割ただのジョークです


## 目的
chatGPT等LLMの台頭で不安に思っているエンジニアも多いと思います、私自身も現在はデータサイエンティストとして働いており今後のキャリアプランについて改めて考えています。
将来に不安を感じている方々の癒しに少しでもなればと思います。

## chatGPTはすごい
chatGPTはすごいです、正確な指示を出せば精度高くコーディング等を実施してくれます。
今後、コーディングといった仕事はAIに代替されていく可能性が高いのかもしれません。
じゃあ我々人間に何ができるのかというと、新しいものを創造していく・アイディアを出していくことかなと思います。


## chatGPTに想像つかなそうなことやってみた
みなさま[slというunix系のコマンド](https://ja.wikipedia.org/wiki/Sl_(UNIX))はご存じでしょうか？
「ls」と「sl」をtypoすることを皮肉ったかなり面白いコマンドです、[こちらのリポジトリ](https://github.com/mtoyoda/sl)から見に行けます

皆様は、こちらと同様に「wget」と「wanima」をtypoしないでしょうか？？私はします！！！！！
そこでwanimaというコマンドを打つとwanimaとオタク君が表示されるコマンドを作成しました、この発想はchatGPTにないはずです！
こちらの[リポジトリ](https://github.com/Occccn/wanima)になります!

![50p6u-ymp71.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666603/2d364065-7520-0336-bbfc-6490c99d3b27.gif)

フルverはぜひ、ご自身の環境で実行してみてください！

## 最後に
LLMの出現でエンジニアの仕事の在り方は変わる部分も大きいかもしれませんが、残る仕事・役割もあるはずです。
WANIMAコマンドも8割冗談で2割本気です。
こちらは「SLコマンドというUNIX界隈のジョーク」と「ネットミーム」の組み合わせというアイディアです。確かにアイディアの実装はAIに置き換わっていくかもしれませんが、アイディアを出すのはあくまで人間のはずです。(少なくともN年のうちは...)
データサイエンス・CS・エンジニアリング・時にはジョークなど幅広いことに精通して新しい物事を創造できるようになっていきたいですね！
(アイディアがただのパクリネタでしょぼいのはすみません、自分自身もこれからの時代でも活躍できるよう精進していきたいです！！)
GPT-4関連で面白かった・気になった事例まとめ

# はじめに
前回の記事について、トレンド入りしたり色々な反応を見ることができて嬉しかったです！

需要があることがわかって嬉しいと思っていたら、新しくGPT-4が来たじゃないですか～！進化の速度早すぎ！！
早速色々な使い方をされている方を見つけたのでまとめさせていただきます。

# GPT-4
https://twitter.com/OpenAI/status/1635687373060317185

## 写真からレシピ提案
https://twitter.com/shodaiiiiii/status/1635843775158456323

## webサイトのスケッチ写真から、HTML･CSS･JavaScriptで機能するWebサイトを生成
https://twitter.com/shota7180/status/1635831994709065728

## 論文のスクショから内容を要約・解説
https://twitter.com/kajikent/status/1635828635709100036

## 「ChatGPT」をテーマにChatbot AとChatbot Bに分かれてラップバトル
https://twitter.com/Callimiya/status/1635867264040984577

## ジョーク問題に対する理解
https://twitter.com/nojiri_h/status/1635844191661203456

## 文学に対する理解
https://twitter.com/alfredplpl/status/1635762714592280576

## Todoアプリの作成
https://twitter.com/zaru/status/1635998153622052870

## ゲーム画面の作成
https://twitter.com/alice_diffusion/status/1636000238757625867

https://twitter.com/nyannkich/status/1635931985691697153

## スクリプトでドラえもん作成
https://twitter.com/ponsham_lab/status/1635854712858898433

## 作曲能力
https://twitter.com/h_tenkyu/status/1635807364778704897

https://twitter.com/MuriNishimori/status/1635956664607334400

## 漢詩
https://twitter.com/NatsukuPhoto/status/1635907315403743233

# AIを利用したサービス / その他AIについて

## Microsoft BingチャットはすでにGPT-4
https://twitter.com/gigazine/status/1635826958738268160

## DuolingoがOpenAI社のGPT-4を搭載
https://twitter.com/kana_Eng_coach/status/1635827898031693825

## AIリサーチアシスタントのElicit,GPT-4を搭載
https://twitter.com/kajikent/status/1635801777881886720

## GPT-4を活用し取り込んだ画像に関する質問に答え、リアルタイムに視覚的な支援を行うサービス
https://twitter.com/ku_ni_29/status/1636144335149494273

## GoogleのAI「PaLM」の新機能
https://twitter.com/masahirochaen/status/1635872304214474752

## ChatGPTとBingの二つのAIと対話
https://twitter.com/shota7180/status/1636117700505382916

## PC操作自動化を目指すAdeptのACT-1
https://twitter.com/akinoriosamura/status/1635848958349287424

## GPT4を”裁判官”にした、国内初の模擬裁判公開実演予定(5/13)
https://twitter.com/AI_Judge_May/status/1635959029812932608

# 終わりに
3月14日（現地時間）に発表されてまだ数日なのに、凄いですね…。
今は課金が必要ですが、ぜひ触ってみたり、活用できるコンテンツを考えてみてください。
また何かあったら更新するか、まとめたいと考えてます。
Google Colaboratory でTwitterの画像をダウンロード

## Google Colaboratory に chrome, selenium をインストール

chromium をインストールできるように

```
%%shell

cat > /etc/apt/sources.list.d/debian.list <<'EOF'
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster.gpg] http://deb.debian.org/debian buster main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster-updates.gpg] http://deb.debian.org/debian buster-updates main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-buster.gpg] http://deb.debian.org/debian-security buster/updates main
EOF


apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A

apt-key export 77E11517 | gpg --dearmour -o /usr/share/keyrings/debian-buster.gpg
apt-key export 22F3D138 | gpg --dearmour -o /usr/share/keyrings/debian-buster-updates.gpg
apt-key export E562B32A | gpg --dearmour -o /usr/share/keyrings/debian-security-buster.gpg


cat > /etc/apt/preferences.d/chromium.pref << 'EOF'
Package: *
Pin: release a=eoan
Pin-Priority: 500


Package: *
Pin: origin "deb.debian.org"
Pin-Priority: 300


Package: chromium*
Pin: origin "deb.debian.org"
Pin-Priority: 700
EOF
```

chromium、 driver、 selenium をインストール
```
!apt-get update
!apt-get install chromium chromium-driver
!pip install selenium
```

## selenium 起動確認

ヘッドレスモードで起動を確認

```python
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import requests
import io
from PIL import Image
from urllib.request import urlopen as uReq

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver', options=options)
driver.implicitly_wait(10)

```

## ツイートから画像をダウンロード
Beautiful Soup ではimgまでアクセスできないのでこうする

```python
url = "https://twitter.com/idolpicture2/status/1635762393920815105"
driver.get(url)

# article 内から img を検索
elems_article = driver.find_elements(By.TAG_NAME, 'article')
for elem_article in elems_article:
    imgs = elem_article.find_elements(By.TAG_NAME, 'img')
    for img in imgs:
        src = img.get_attribute('src')
        # ファイルの保存
        try:
          srcs = src.split("/")[-1].split('?')
          filename = "{}.{}".format( srcs[0], srcs[1].split('&')[0].replace('format=', '') )
          imagefile = open(filename, "wb")
          imagefile.write(uReq(src).read())
          imagefile.close()
        except Exception as e:
          print(e)
```

右側のディスクスペースに保存される

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266239/e6762ee2-2294-0fe2-815e-aefc7bd61b67.png" width="300">


## 画像を Google Drive に保存する場合

こんなふうに Google Drive をマウントした後に画像を保存

```python
import os
from google.colab import drive
drive.mount("/content/drive")
os.chdir("/content/drive/MyDrive/")
```

## スクリーンショットを撮りたい場合

```python
driver.save_screenshot("screenshot.png")
```

### 画像が取得できない場合
ログインしていないとツイートが見れないことがあります。
その時はこちらの通りにログインした後に画像を参照してみてください。

[selenium から Twitter にログインして投稿](https://qiita.com/katafuchix/items/8d4c2bed73d79ba072d9)
Databricks on AWSにおけるクレジットカード登録手順

Databricksを利用開始した際、14日のフリートライアルを利用いただけますが、それ以降は年間契約いただくかクレジットカードによる従量課金を選択いただく必要があります。

https://qiita.com/taka_yayoi/items/fb4f57c069e1f272e88a

こちらの記事では、フリートライアルから従量課金に移行する手順を説明します。

# 要件

- Databricksアカウント管理者の権限が必要です。
- 登録するクレジットカードを準備します。

# 手順

1. [アカウントコンソール](https://accounts.cloud.databricks.com/)にアカウント管理者としてログインします。
![Screenshot 2023-03-16 at 11.44.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4739351b-3d30-a3df-ee76-1c639fb04916.png)
1. 言語設定を日本語に変更します。
1. 画面右上のメールアドレスをクリックして**User preferences**を選択します。
![Screenshot 2023-03-16 at 11.44.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/96bf6780-66c3-c6df-f62d-caca64ba8adc.png)
![Screenshot 2023-03-16 at 11.47.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6829ac5e-e93c-cdbb-7dba-2bea8807bfd9.png)
1. **Language settings**タブを開き、**日本語**を選択します。
![Screenshot 2023-03-16 at 11.48.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9fa46db6-5e50-e5aa-bf21-029cf1b1d813.png)
1. **サブスクリプションと請求**タブを開き、**請求情報を追加**ボタンをクリックします。
![Screenshot 2023-03-16 at 11.49.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a3406cbb-c527-8bc3-a487-ce2e8b972301.png)
1. **国**で**Japan**を選択し、住所、請求先名義、クレジットカード情報を入力し、**保存**をクリックします。

    :::note
    **注意**
    **状態**(state)は都道府県名です。翻訳を修正しておきます。申し訳ございません。
   :::

    ![Screenshot 2023-03-16 at 11.52.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8201b8b5-da01-1361-ee2a-d18dfd33c7cc.png)
1. `請求の詳細は現在更新中です`と表示されます。
![Screenshot 2023-03-16 at 11.56.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fd52c71a-9543-252f-af7f-77a52574e615.png)
1. クレジットカード情報が表示されれば処理は完了です。
![Screenshot 2023-03-16 at 11.58.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/61f93680-926f-5cee-b763-9260a034371b.png)


### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
Listboxのポップアップに表示される文字を変更する方法

# 目次
1. はじめに
1. 実装方法

# はじめに
VoltMX IrisのListboxを使ってプルダウンを表示する際に、
項目を選択するためのポップアップが表示されますが、
右上に表示されるボタンがデフォルトで「Cancel」という表示になっています。

今回は、このプルダウンの右上に表示される文字を変更する方法を紹介します！
![IMG_1517-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/41c460ea-c145-26b5-2bfd-bceb1a77cde7.png)
# 実装方法

i18n設定で`platform.canceltoolbar.cancel`というkeyを追加し、
各言語ごとに表示したい文字を設定することで表示文字の変更が可能です。

まずは、i18n設定を開きます。
EnableのチェックボックスをONにした後、Configureのボタンをクリックします。
![スクリーンショット_0005-03-16_11_28_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/07d85f30-ad90-9d35-54d0-ee7a9c1c4f0d.png)

このような画面が開くので、+ボタンをクリックしてKeyを追加します。
![スクリーンショット 0005-03-16 11.30.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/73ce56ea-e216-9a79-9d58-93fba6f6f6f1.png)

一行追加されるので、`platform.canceltoolbar.cancel`を追加します。
![スクリーンショット 0005-03-16 11.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/28878e37-a7db-c816-5af4-70e03e86c821.png)

次にConfigure Localesのボタンをクリックして、追加したい言語を追加します。
今回は、日本語と英語を追加したいので、以下のようにチェックボックスをつけてOKをクリックします。
![スクリーンショット 0005-03-16 11.31.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e47064a1-e168-67d1-0f85-a7d4eadb78d8.png)

ユーザーが使用している端末の言語設定が日本語の場合、「確定」
英語の場合は「Done」と表示させたいので、それぞれ以下のように設定しOKをクリックします。
　![スクリーンショット 0005-03-16 11.36.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/d30b56b4-7fcd-7d4d-ec97-ba308c441092.png)

Project Settingsの画面に戻るので、最後にDoneをクリックして変更を保存します。
![スクリーンショット_0005-03-16_11_37_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6c4144a6-48bd-0a95-6586-5f818c628943.png)

Irisの画面で対象のListboxを選択した状態で、
PROPERTIES->List Boxタブを開きます。

i18nのKeyを選択できる項目が表示されるようになっているので、
先ほど作成したKeyを設定したら完成です！
![スクリーンショット 0005-03-16 11.50.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a55c585a-f167-558a-a412-bb97daf3ed94.png)

ビルドして動きを見ていきましょう！

|端末の言語設定|実装結果|
|--|--|
|英語|![ezgif-4-c16038e9f4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/3cbbec84-24bb-8ac5-e685-205c5cabc7c2.gif)|
|日本語|![ezgif-4-98c7b7917d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6b3dcea9-96af-3308-3795-85e26cb0c498.gif)|

Cancelと表示されていた箇所が、
日本語の場合は「確定」、英語の場合は「Done」と表示されるようになりましたね！

同じ点で困っている方がいたら是非参考にしてみてくださいね🙌

# 参考
https://basecamp.force.com/konycommunity/s/question/0D52K00003rsnR4SAI/localization-not-working-in-iphone-keyboard-cancel-inputaccessoryviewtype-
IAMを導入する際に参考にしたサイト

AWSアカウントを作って真っ先にやるのはIAM関連。
ActiveDirectoryをやってた身（もはや遠い過去になりつつある・・・）としては、よくありがちな権限設定。

AWSのIAMは細かく権限を設定できるがゆえに、下手にカスタマイズしすぎると非常に煩雑になる。事前に公式の上限値やベストプラクティスに沿って設計することが大事。

# 特によく見た参考
AWS ルートユーザーが使用されたことを通知する監視設定
https://qiita.com/tonishy/items/024ec90dc9b75f22e8e9
AWSアカウントを開設したら、真っ先にこれをやる。

AWS公式　IAM と AWS STSクォータ
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_iam-quotas.html
次にクォータを見て、上限値をチェックした。

Amazon IAM編～ビリング閲覧用アカウントを作ろう～：ナレコムAWSレシピ
https://recipe.kc-cloud.jp/archives/6020
クラウドサービスを使う上で、経理やお偉いさんから真っ先に言われるのは「いくらかかるの？」というところ。IAMユーザー渡して、毎日見せてという人もいる。とはいえ、IAMユーザーをAdministratorAccessで渡すのも、それはそれで微妙。というわけで、ビリング閲覧用IAMユーザーを作っておく。

Amazon S3のアクセスに必要な最低限のIAMポリシーの設定：JPCYBER
https://www.jpcyber.com/support/minimal-iam-policy-to-access-amazon-s3

[AWS] S3を操作するIAM JSON ポリシーのサンプル：ねこの足跡R
https://blog.katsubemakito.net/aws/s3-iam-jsonpolicy
S3を利用するにあたってのIAMポリシーの権限を設定するための参考サイト。おすすめ。


# まあまあ見た参考
Transit Gateway の認証とアクセス制御
https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-authentication-access-control.html

Amazon Virtual Private Cloud の AWS 管理ポリシー
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/security-iam-awsmanpol.html

Transit Gateway の認証とアクセス制御
https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-authentication-access-control.html

Elastic Load Balancing の Identity and Access Management
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/load-balancer-authentication-access-control.html


AWS IAM Userアクセスキーローテーションの自動化 
https://engineering.dena.com/blog/2021/12/aws-iam-user-credential-auto-rotation/

Amazon VPC ポリシーの例
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-policy-examples.html

IAMのEC2権限をまとめてみた
https://blog.serverworks.co.jp/tech/2014/02/07/iam-ec2/

# 基本的な（個人的な）IAMの考え方
・ルートユーザーは使わない：無効にできないので、使わない方針にしてログインしたら検知する仕組みを導入する
・IAMユーザーにシークレットキーなどを使わせない
・AWSのリソースをAWSCLIで操作するときは、EC2から実行か、CloudShellを使う
・MFAは必ず有効にする
・IAMグループを作って、そこにIAMユーザーを集約する
・IAMグループに権限をつける、IAMユーザーには権限をつけるのは最小のみ（またはつけない）

⇒ActiveDirectoryとかやってれば当たり前の考え方が多いけれど、AWSのリソース操作のところだけはクラウドならではの考え方（IAMロール（役割）をリソースに割り当てて権限設定するところ）。

# とても有用だった技術書
AWSの薄い本　IAMのマニアックな話 Kindle版
https://www.amazon.co.jp/AWS%E3%81%AE%E8%96%84%E3%81%84%E6%9C%AC-IAM%E3%81%AE%E3%83%9E%E3%83%8B%E3%82%A2%E3%83%83%E3%82%AF%E3%81%AA%E8%A9%B1-%E4%BD%90%E3%80%85%E6%9C%A8%E6%8B%93%E9%83%8E-ebook/dp/B085PZCMG2

AWSの薄い本Ⅱ アカウントセキュリティのベーシックセオリー Kindle版
https://www.amazon.co.jp/gp/product/B08F3BVSJQ/ref=dbs_a_def_rwt_hsch_vapi_tkin_p1_i8

この2冊は初めてIAMを導入するにあたって、買っておいて損はないというか、ほぼ権限の設計が網羅的にわかるかつ、ベストプラクティスも書いてあってよい。これを買えばIAMが一通り理解できるのでは？と思う。お値段以上の価値がある。値段が高ければ前者だけでも十分理解が深まる。
Linux初心者必見！tmuxでターミナル作業をスピードアップ

# Tmux完全ガイド：効率的なターミナル管理の実践

## 目次
1. [Tmuxとは](#tmuxとは)
2. [基本的な概念](#基本的な概念)
3. [インストールと初期設定](#インストールと初期設定)
4. [基本的な使い方](#基本的な使い方)
5. [実践的なユースケース](#実践的なユースケース)
6. [高度な設定とカスタマイズ](#高度な設定とカスタマイズ)
7. [トラブルシューティング](#トラブルシューティング)
8. [ベストプラクティス](#ベストプラクティス)

## Tmuxとは

Tmux（Terminal Multiplexer）は、単一のターミナルウィンドウ内で複数の仮想ターミナルを作成・管理できるツールです。以下の主要な特徴があります：

- セッション管理：作業状態を保持したまま切断・再接続が可能
- ウィンドウ管理：複数の作業スペースを効率的に管理
- ペイン分割：画面を分割して複数のタスクを同時に表示
- カスタマイズ性：豊富な設定オプションで作業環境を最適化

## 基本的な概念

Tmuxの階層構造は以下のようになっています：

1. セッション (Session)
   - 最上位の作業単位
   - 複数のウィンドウをグループ化

2. ウィンドウ (Window)
   - タブのような働き
   - 複数のペインを含むことが可能

3. ペイン (Pane)
   - 画面を分割した個々の作業領域
   - それぞれが独立したシェル

## インストールと初期設定

### インストール方法

```bash
# Ubuntu/Debian
sudo apt-get install tmux

# macOS (Homebrew)
brew install tmux

# CentOS/RHEL
sudo yum install tmux
```

### 基本設定ファイル（~/.tmux.conf）

```bash
# マウス操作を有効化
set -g mouse on

# ウィンドウ番号を1から開始
set -g base-index 1

# ペイン番号を1から開始
setw -g pane-base-index 1

# ステータスバーの色を設定
set -g status-style fg=white,bg=black

# プレフィックスキーをCtrl+aに変更（オプション）
set -g prefix C-a
unbind C-b
bind C-a send-prefix
```

## 基本的な使い方

### セッション管理

```bash
# 新規セッション作成
tmux new-session -s dev    # "dev"という名前でセッション作成
tmux new -s dev           # 省略形

# セッション操作
tmux ls                   # セッション一覧表示
tmux attach -t dev       # "dev"セッションに接続
tmux kill-session -t dev # "dev"セッションを終了
tmux rename-session -t old new  # セッション名変更
```

### ウィンドウ操作（プレフィックスキー: Ctrl+b）

```bash
c    # 新規ウィンドウ作成
w    # ウィンドウ一覧表示
n    # 次のウィンドウ
p    # 前のウィンドウ
数字  # 指定番号のウィンドウへ
,    # ウィンドウ名変更
&    # ウィンドウ削除
```

### ペイン操作（プレフィックスキー: Ctrl+b）

```bash
%    # 垂直分割
"    # 水平分割
o    # ペイン間を移動
x    # ペイン終了
z    # ペイン最大化/復帰
!    # ペインを新規ウィンドウに分離
スペース # レイアウト変更
```

## 実践的なユースケース

### 開発環境の構築

```bash
# プロジェクト用セッション作成
tmux new -s project

# エディタ用ウィンドウ
vim .

# サーバー起動用ウィンドウ
npm start

# Git操作用ウィンドウ
git status
```

### サーバー監視環境

```bash
# モニタリングセッション作成
tmux new -s monitor

# システムリソース監視
top

# ログ監視（画面分割）
tail -f /var/log/app.log
tail -f /var/log/error.log
```

## 高度な設定とカスタマイズ

### キーバインドのカスタマイズ

```bash
# ~/.tmux.conf
# ペイン分割のキーバインド変更
bind | split-window -h
bind - split-window -v

# ペイン移動をvim風に
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
```

### ステータスライン設定

```bash
# ステータスバーの更新間隔
set -g status-interval 1

# ウィンドウリストの位置
set -g status-justify centre

# ステータスバーの要素
set -g status-left '#[fg=green]#S #[fg=yellow]#I #[fg=cyan]#P'
set -g status-right '#[fg=cyan]%Y-%m-%d #[fg=yellow]%H:%M:%S'
```

## トラブルシューティング

### 一般的な問題と解決方法

1. セッションが見つからない
```bash
# セッション一覧確認
tmux ls

# 強制終了が必要な場合
tmux kill-server
```

2. キーバインドが機能しない
```bash
# 設定の再読み込み
tmux source-file ~/.tmux.conf
```

3. ペインが応答しない
```bash
# セッション再接続
tmux detach
tmux attach
```

## ベストプラクティス

### 1. 命名規則の統一

- プロジェクト名を使用したセッション名
  ```bash
  tmux new -s project-backend
  tmux new -s project-frontend
  ```

### 2. セッション管理の効率化

- 複数プロジェクトの分離
- 定期的なセッションのクリーンアップ

### 3. 作業効率の最適化

- よく使うコマンドのエイリアス設定
- プロジェクト専用のtmux設定ファイル作成

## まとめ

Tmuxは強力なターミナルマルチプレクサーであり、適切に使用することで開発効率を大きく向上させることができます。基本的な使い方を習得し、自分の作業スタイルに合わせてカスタマイズすることで、より効率的な開発環境を構築することが可能です。
Azure CLI ・Azure PowerShell で Subscription / Tenant を指定して Azure にログインする

こんにちは、駆け出しアーキテクトのやまぱんです。
最近複数の Azure のテナント環境、Subscription 環境をまたいで作業することが多いので自分用にメモしておきます。

## Azure CLI 

### 現在ログインしているテナントとSubscriptionを確認する
``` Azure CLI:Azure CLI
az account show
```
実行参考画面
![2023-10-24_11h45_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/daa6722d-cfb1-56ce-3b45-ebcd91322cab.png)


### テナントを指定してログインする

``` Azure CLI:Azure CLI
az login --tenant <テナントドメイン(例:XXXXXX.onmicrosoft.com)> or <オブジェクトID> 
```
+ 別のテナントでサインインする
https://learn.microsoft.com/ja-jp/cli/azure/authenticate-azure-cli#sign-in-with-a-different-tenant

>--tenant 引数を使用すると、サインインするテナントを選択できます。 この引数の値として、.onmicrosoft.com ドメインまたはテナントの Azure オブジェクト ID を指定できます。


### Subscription を指定する(切り替える)
``` Azure CLI:Azure CLI
az account set -n <Subscription ID>
``` 
+ az account set

https://learn.microsoft.com/ja-JP/cli/azure/account?view=azure-cli-latest#:~:text=%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%20%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC-,az%20account%20set,-%E7%B7%A8%E9%9B%86



## Azure PowerShell
Azure PowerShell の場合も追記しておきます。

### ログインしているSubscription 、テナントID を表示
``` Azure CLI:Azure PowerShell
Get-AzContext
```

### Subscription IDを指定してログイン

``` Azure CLI:Azure PowerShell
Connect-AzAccount -Subscription <Subscription ID>
```
![](https://user-images.githubusercontent.com/71251920/258286995-6b8c3197-1263-4748-957a-5ca262a972ab.png)

### Tenant とSubscription IDを指定してログイン
``` Azure CLI:Azure PowerShell
Connect-AzAccount -Tenant <TenantID/ディレクトリID> -SubscriptionId <Subscription ID>
``` 

![2023-11-01_15h40_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/ff63bc7c-71c9-92d0-aa4b-d50736d4537a.png)



## Azure Portal でのテナントID確認方法

ディレクトリの切り変え → **ディレクトリIDがTenantIDです。**
![2023-12-19_16h30_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/89e92a1f-8fd4-b26f-1cc0-becc26bb3263.png)
Ruby クラスとインスタンスを利用してプログラムを作成

# クラス・インスタンスを利用してプログラムを作成しよう
条件は以下の通りです。
- Bookクラスを作成する
- Bookクラスは@titleと@priceをプロパティとして持っている
- attr_readerを使用する
- Bookクラスのインスタンスを作成する（タイトル、価格は任意）
- 作成したインスタンスから、タイトルと価格を取得し画面に表示させる。

## attr_readerとは？
attr_readerメソッドとは、主に記述量を減らすために活用されます。
インスタンス変数を呼び出すメソッドを定義するメソッドです。
以下（例1）（例2）は結果は同じとなりますが、記述量に差があります。

（例1）
```ruby
# attr_readerを使用しない場合
class Dog
  def initialize(name)
    @name = name
  end

  def name
    @name
  end

end

dog = Dog.new("ポチ")
puts dog.name
```
（例2）
```ruby
# attr_readerを使用した場合
class Dog
  attr_reader :name

  def initialize(name)
    @name = name
  end
end

dog = Dog.new("ポチ")
puts dog.name
```

それでは問題に移ります。
```ruby
# 自分の回答
class Book
  attr_reader :title, :price

  def initialize(title, price)
    @title = title
    @price = price
  end
end

book = Book.new("プログラミングについて", 3000)
puts book.title
puts "#{book.price}円"
```

```ruby

# 模範回答
class Book
  attr_reader :title, :price

  def initialize(title, price)
   @title = title
   @price = price
  end
end

book = Book.new("プロを目指す人のためのRuby入門", 3218)
puts book.title
puts "#{book.price}円"
```
## 解説
```ruby
attr_reader :title, :price
```
上記コードを書くことで、@titleと@priceにアクセスすることができます。
ちなみに、attr_readerを使わない場合の回答は以下のようになります。
```ruby
# attr_readerを使わない場合
class Book

  def initialize(title, price)
   @title = title
   @price = price
  end

  def title
    @title
  end

  def price
    @price
  end

end

book = Book.new("プロを目指す人のためのRuby入門", 3218)
puts book.title
puts "#{book.price}円"
```
QNAPのNASでMariaDB10をコマンドラインから使う

#### 目標としたこと
QNAPのNASで、ダウンロードしたWordPressを運用したい
このためにMariaDB10をインストールする
phpMyAdminアプリでDBの操作はできるが、コマンドラインからDBを操作したい

#### MariaDB10のインストール
これは、App　Centerからユーティリティの「MariaDB　10」の「＋インストール」をクリックしてインストールする
![スクリーンショット 2023-03-16 10.45.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/de92fc35-4206-f892-fd66-d03c7831e3f7.png)

sshでNASにログインして、mysqlと実行しても、コマンドが見つからない

```
$ mysql
-sh: mysql: command not found
```
#### phpMyAdminのインストール
MariaDB10がほんとうにインストールできているのかを確かめる意味と、取り急ぎDBの設定を行なって動作確認をするために、phpMyAdminをインストールする
App　Centerから開発者ツールの「phpMyAdmin」の「＋インストール」をクリックしてインストールする
![スクリーンショット 2023-03-16 11.04.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/9da6d355-2149-c533-cd7e-f7189f539d58.png)

インストール後に開くをクリックして、表示される下記の画面で、MariaDB10のインストール時に指定したrootのパスワード入力して、データベースとユーザアカウントを作成した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/fe4b66c1-7cd3-dfa0-46ba-86779d5ae1bb.png)

データベースの作成はコマンドで実行していて、「照合順序」の選択は何を選んだらいいのかわからず調べて、「utf8_general_ci （ 大文字・小文字を区別しない）」を指定した

※　最後の_ciは、Case Insensitiveの略で大文字小文字を区別しない、という意味　だそうです

phpMyAdminが動作する、データベースが作成できるということは、MariaDB10はインストールできていると考えて、次はコマンドラインからのmysqlコマンドの実行する方法を探した

#### mysqlコマンドの実行
NASのにsshでログインしてfindコマンドで“mysql”を探してみた
いくつか見つかり、そのディレクトリまでcdして、実行してみたが一番良いところまで行った結果がこれ
```
$ mysql -uroot -p                           
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```

ここでQNAPさんのサポート窓口にお世話になりました

教えていただいた方法がこれ
```
`getcfg MariaDB10 Install_Path -f /etc/config/qpkg.conf`/bin/mysql -u root -p  -h localhost -S /var/run/mariadb10.sock -P 3306
```
シングルクォートに囲まれている部分を実行するとこうなった
```
$ getcfg MariaDB10 Install_Path -f /etc/config/qpkg.conf
/share/CACHEDEV1_DATA/.qpkg/MariaDB10
```

シェルを確認して、.ptofileファイルにパスを追加して
```
$ echo $SHELL
/bin/sh
$ cat .profile 
PATH=$PATH:/share/CACHEDEV1_DATA/.qpkg/MariaDB10/bin
```
ログインできた 
```
$ mysql -uroot -p -S /var/run/mariadb10.sock
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.5.8-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>
```

毎回を「」付けるのはめんどだし、忘れそうなので、HOMEディレクトリにmymysqlファイルを作成して、パラメータを引き継ぐようにした
```console
mysql $* -S /var/run/mariadb10.sock
```

#### 感想と謝辞
ポイントはソケットファイル mariadb10.sock の指定でした
QNAPのFAQ「[phpMyAdmin から MariaDB 10 にアクセスできないのはなぜですか？](https://www.qnap.com/ja-jp/how-to/faq/article/phpmyadmin-から-mariadb-10-にアクセスできないのはなぜですか)」でも'/var/run/mariadb10.sock'を指定するよう説明がありました
QNAPさんのサポート窓口にはお世話になりました　この場にても再度お礼を申し上げます
FreeBSDのGRUBエントリ


主OSをFreeBSDに乗り換えようと思ってインストールしてみましたが、やはり、動くアプリが少なそうなので、主OSを乗り換えるのは止めました。マルチブートにします。そのときのGRUBのcustom.cfgを記しておきます。

```custom.cfg
menuentry "FreeBSD 13.1" {
        insmod ufs2
        set root=(hd0,2)
        kfreebsd /boot/loader
        search --no-floppy --fs-uuid 6411d3a0b7258e16
}
```

(hd0,2)は、ディスク1(0から数えます)の2番めのパーティションにFreeBSDがあるということです。
UUIDは適宜変更。
BingとChatgptに帰化申請の動機書を書いて貰った

BingとChatgptで帰化申請の動機書を書いて貰ったら…

今日は大流行している人工知能の話。
3月15日にChatgpt-4がリリースされました。
こちらは画像を分析して文書を作成できるもの。

またマイクロソフトのBingもChatgptを搭載しているとか。
凄いものが出てきたなと思います。

在留資格の理由書や帰化申請の動機書も人工知能に書かせることができるかも…
（理由書は自分の手で書くものですが）

実際の理由書の書き方や事例はこちらから

https://kika.kyoka-ok.com/syorui/doukisyo.html


自分で書けない人は、Chatgptを使って書く人も出てくるのだろうと思います。

問題は人工知能が書いた文書で許可が下りるかでしょうね。
（法務局や入管局も対策を立ててくるでしょう）

Chatgptが書いた様な文書を提出したら、書き直しを要求される可能性が高いです。
（下手すると一発で不許可？）

それはともかくとして。
Chatgptに書かせたらどんな文書が出てくるか？

実際にChatgptで書いた文書がこれになります。

![ai-doukisyo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2897693/c6180efa-1b8b-ad2a-7a3b-04479b0ad783.jpeg)

https://chat.openai.com/auth/login

引用：ChatGPT

午前中に質問したからか、1分も掛からず文書が吐き出されました。

文書としては良く出来ていると思います。
帰化申請の動機書を書いてください。
こう書いただけで、これだけの文書になるのは大したものです。

回答にも書かれていますが、このままでは使えないかと。
申請者の生い立ちや経歴、事情が異なり、自分自身の言葉で書くものだと。

まさにその通りだと思います。
文書としては良く出来ています。
（私が書くよりも上手いかも）

ただ誰でも適用できそうな内容ですね。
講演会などで読み上げる様な感じですかね。
下書きとしては非常に良いかと。

次にマイクロソフトのBingで同じ質問をしてみました。
（知らない内に使えるようになっていた）

![bing-doukisyo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2897693/21ad7969-9f62-a9c2-116d-3379d0ac0974.jpeg)

https://www.bing.com/

引用：Bing

こちらのチャットでも同じ質問をしてみました。
Bingは強調スニペットを生成しているかんじです。

具体的な例文が吐き出されるわけでは無いようで。
こちらも動機書は自分で書きなさいと回答があり、書くヒントを生成しています。

回答はBingにインデックスされたサイトから、取って来て切り貼りする形ですね。

BingとChatgptは、方向性が違うようです。

正直、Chatgptの性能に恐れおののく気持ちです。
Chatgpt-4は触っていませんが、そのうちには作文系はAIの独壇場になるような気がします。
paiza.ioでnadesiko その23

# 概要
paiza.ioでnadesikoやってみた。
練習問題やってみた。

# 練習問題
qiitaapiを、叩いて、表題の一覧を印字せよ。

# サンプルコード

```
URL = 「https://qiita.com/api/v2/users/ohisama@github/items?page=1&per_page=5」
データは、 URLからAJAX_JSON取得。
データを反復
    それ["title"]を表示
ここまで


```

# 実行結果

```
paiza.ioでnadesiko その22
enebularでalexaスキル その13
paiza.ioでnadesiko その21
paiza.ioでelixir その212
paiza.ioでelixir その211


```

# 成果物

https://paiza.io/projects/uXqWy_O48I8af1HmU5takA?language=nadesiko


以上。
Google Cloud ShellにMySQL Serverをインストール

```bash
sudo DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
sudo mysqld_safe &
echo "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''" | sudo mysql
mysql -uroot
```

# phpMyAdminのインストール

```bash
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip
unzip phpMyAdmin-5.2.1-all-languages.zip
cd phpMyAdmin-5.2.1-all-languages/
cp config.sample.inc.php config.inc.php
echo '$cfg["Servers"][$i]["auth_type"] = "config";' >> config.inc.php
echo '$cfg["Servers"][$i]["AllowNoPassword"] = true;' >> config.inc.php
php -S localhost:8080
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3127414/112cf998-2756-e306-5320-8e9d7fa8a076.png)

あとは開きましょう
PHP基本構文『if文』『while文』『for文』

# if文（条件文）
```
if(条件){真の時処理を実行（=条件が成功した場合）}
else{偽の時処理を実行（=条件に当てはまらない場合）}
```
### 例①
```
$var = 4;
if($var >= 5){
// 真の時
echo '5以上';
}else{
// 偽の時
echo '4以下' . '<br>';
}
```
$varが4なので、
画面で見る「4以下」と表示される。
![スクリーンショット 2023-03-16 0.12.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193952/c265fee4-fcba-e1b1-ac16-6384dd096679.png)
### 例②
```
$var1 = 29;
if($var1 >= 30 && $var1 < 40){
echo 'あなたは30代です。';
}elseif($var1 >= 20 && $var1 < 30){
echo 'あなたは20代です' . '<br>';
}
```
$var1が29なので、
画面で見る「あなたは20代です」と表示される。
![スクリーンショット 2023-03-16 0.16.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193952/e1a1c386-4456-3a43-7a29-33c02500c6e3.png)

# while文
```
$var2 = 0;
while($var2 < 5){
echo $var2 . '<br>';
// 下記は「$var2 = $var2 + 1;」同義
$var2++;
}
```
### 画面で見ると
0から4までの数字が1ずつ増えて並ぶ。
![スクリーンショット 2023-03-16 0.21.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193952/f7f96064-998c-5673-e16c-54e7de6cc4f6.png)
# for文
`for(初期化式; 条件式; 変化式;){ 実行する処理 }`
```
for($i = 0; $i <= 10; $i = $i + 2){
echo $i . '<br>';
}
```
### 画面で見ると
0から2ずつ増えて10まで繰り返される。
![スクリーンショット 2023-03-16 0.28.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193952/636cf815-817f-5bc4-7d82-b3ab27b93d9a.png)
GUIの部品

# テキストボックス
```文字列などを直接入力```。

# チェックボックス
```複数の項目を選択```できる。

# ラジオボックス
```複数の項目から一つのみ```を選択。

# リストボックス
複数の項目を```リスト表示し、その中の一つを選択```。

# プルダウンメニュー
```随時利用可能なメニュー。メニューバーから、垂れ下がるように表示```。さらにサブメニューも付加できる。

# 出典
https://gihyo.jp/book/2022/978-4-297-12375-8

# GUIの部品の図があります。
https://basics.k-labo.work/2017/10/25/gui/#:~:text=GUI%E3%81%AE%E9%83%A8%E5%93%81,%E9%A3%9B%E3%81%B3%E5%87%BA%E3%81%99%E3%82%88%E3%81%86%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%A7%E3%81%99%E3%80%82
英語資料をそれっぽく作るためのツールまとめ


※各ツールの利用規約はよく読んでご利用ください！

## 全体像をつかむ
### 英語プレゼンの大まかな骨組みを把握したい
[SlidesGPT](https://slidesgpt.com/)でまずは叩きになるスライドを作らせて、自分が話そうとしている内容の一般的なイメージ、骨組みをつかむ。

## 見た目をよくする
### 配色を任せたい
[ColorMagic](https://colormagic.app/)でキーワードをいれるとカラーパレットを出力してくれます。



### 写真を入れたい
[unsplash](https://unsplash.com/)でキーワード検索しましょう。Internetなどと検索するとそれっぽい写真が出てきます。

### イラストを入れたい
キーワード検索、色の変更ができてゆるめ、という観点で三つ選んでみました。
- [unDraw](https://undraw.co/illustrations)
- [storyset](https://storyset.com/)
- [manypixels](https://www.manypixels.co/gallery/)

[こちら](https://design.webclips.jp/illustration-free/#I01)にイラストサイトがよくまとまっていました。
デッドロックとは


## はじめに
自分の勉強用にデッドロックについてまとめます。
参考リンクにとてもお世話になりました！

## デッドロックとは
共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態。
両方のプロセスが永久的な待ち状態に陥ってしまうため、処理が続行できなくなる。
![デッドロック.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325528/163e2527-c887-263e-16e3-f671c6ed4e84.png)

## デッドロックを回避するためには
以下のような対応が一般的
- アクセスする資源の順番を一貫する
- 不必要にロックをかけない
- 不必要にトランザクションを長くしない
- 不必要にFOR UPDATE（トランザクションが終了した時に更新）でロックしない
- 可能な限り行ロックを採用する（資源全体でなく、更新対象のみロック）

## 参考リンク

- [平成19年秋期問27 デッドロックの可能性](https://www.ap-siken.com/kakomon/19_aki/q27.html)
- [デッドロックとは](https://medium-company.com/デッドロック/)
- [デッドロックを回避するために - 技術ブログ | 株式会社クラウディア](https://cloudear.jp/blog/?p=1335)
EXCELで検索した証跡まとめ

- [ExcelのCOUNTIFS関数で複数条件をOR（または）条件で指定する方法](https://office-hack.com/excel/countifs-or/)
- [Excelで特定の文字以前を削除する方法！関数他VBAで一括処理も！](https://extan.jp/?p=8813)
- [【Excel（エクセル）で特定の文字（テキスト）以降の文字を全部削除する方法】](https://www.imamura.biz/blog/7067)
- [エクセルで特定の文字を削除する関数の使い方まとめ](https://yotsuba-navi.com/archives/3364)
- [Excel の文字列、文字、単語の出現回数を数える数式について](https://learn.microsoft.com/ja-jp/office/troubleshoot/excel/formulas-to-count-occurrences-in-excel)
- [Excelの条件式書式で大文字、小文字を判定する](https://win2012r2.com/2021/04/03/excel%E3%81%AE%E6%9D%A1%E4%BB%B6%E5%BC%8F%E6%9B%B8%E5%BC%8F%E3%81%A7%E5%A4%A7%E6%96%87%E5%AD%97%E3%80%81%E5%B0%8F%E6%96%87%E5%AD%97%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B/)
- [【EXCEL】セル内の日本語だけ抽出する方法を教えてください！](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11142504771)
- [セル内の一部の文字を取り出す －MID 関数 など－](https://www.crie.co.jp/chokotech/detail/289/)
- [文字列の先頭や末尾に文字を追加したい！ 知っておくと便利なエクセル操作](https://gakumado.mynavi.jp/freshers/articles/55431)
- [EXCELで2列を参照し、重複するものを横に並べたい](https://oshiete.goo.ne.jp/qa/2537576.html)
そこフクロウで書いたらシンプルに書けるで！フクロウ？

CSSにはフクロウセレクタと呼ばれるものがあります！

なんやそれ？
って感じですが実際の記述が下記になります!

```scss
* + * {
 margin-top: 8px;
}
```

:::note
セレクタがフクロウの顔のように見えることからフクロウセレクタと呼ばれているそうです！
:::

## フクロウセレクタってなんやねん…* + *

フクロウセレクタは最初の要素以外の兄弟要素に対してスタイルを当ててくれます。
リストスタイルなどで1つ目と最後にはmarginをつけたくない。
というシーンがあると思います。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="XWPqxrZ" data-user="tanimotohikari" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/tanimotohikari/pen/XWPqxrZ">
  Untitled</a> by tanimotohikari (<a href="https://codepen.io/tanimotohikari">@tanimotohikari</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

わかりやすいようにグレーの背景色をつけてみました。
最初の要素にはpaddingで指定した8pxしか当たっていないのでリストアイテムが均等な間隔で並ぶのを再現できます！

## フクロウセレクタと同じこと別の書き方で実現する
フクロウセレクタを使わなくても別の書き方でも実現できます！

### 打ち消しパターン
全てのリストアイテムにmarginをつけて最初の要素だけmarginを打ち消す方法です。

```scss
.list > li {
  padding: 8px;
  background-color: #333;
  margin-top: 8px;
  color: #fff;
}

.list > li:first-child {
  margin-top: 0px;
}
```
ただ、一度つけたプロパティを打ち消すので書き方としては冗長的な気がする…。

https://developer.mozilla.org/ja/docs/Web/CSS/:first-child

### 除外パターン
`:not()`を利用することでも同じ見た目を再現できます！

```scss
.list > li {
  padding: 8px;
  background-color: #333;
  color: #fff;
}

.list > li:not(:first-child) {
  margin-top: 8px;
}
```

https://developer.mozilla.org/ja/docs/Web/CSS/:not

打ち消しパターンよりはシンプルに記述できます！
それでも「ではない」という例外処理になるので若干の読みづらさは否めない気はする…。

#【まとめ】フクロウセレクタでシンプルに書く
フクロウセレクタは読みやすいコードかと言われると正直微妙だとは思います…。

:::note warn
フクロウセレクタを知らないと「これなに？」となります…
:::

サイトの状況で冗長的に書かざるおえない場合もあると思うのでどれを使うかはケースバイケースだと思います。
ただ、打ち消しや`:not()`を使うよりはシンプルに書けるのは間違いないので利用していくのが良いと考えています！

## わかりやすかった記事

https://eclair.blog/usage-owlselector-in-css/

https://coliss.com/articles/build-websites/operation/css/about-css-owl-selector.html
venvでのpython仮想環境の作成コマンド

venv仮想環境作成備忘録

# 仮想環境の作成
```bash
python -m venv env
```
もしくは

```bash
python3 -m venv env
```

# 仮想環境の有効化
windows(powershell)の場合
```bash:windows
env\Scripts\Activate.ps1
```
linuxの場合
```bash:linux
source env/bin/activate
```

# 仮想環境の無効化
```bash
deactivate
```
2023年macOS使いのおまえらが絶対使うべきアプリ7選

ほんとうはLinuxを使いたいけど、色々な理由でmacOSを使わなければならない僕が少しでもmacOSが好きになるように使っているツールたちの紹介です。~~タイトルがちょっと過激なのはゆるしてください~~

こんにちは、株式会社クラフトマンソフトウェアでAppThrustという「開発の面白さを100%にする」プロダクトを開発しているreoringです。

## [Arc Browser](https://arc.net/)

言わずと知れたmacOS専用のブラウザ。UI/UXが気持ちよすぎる。最高。

![CleanShot 2023-03-16 at 09.25.14@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7565/2260d532-f020-62f5-24af-58ad5b3fed83.png)


## [Raycast](https://www.raycast.com/)

macOS標準のSpotlightを置き換えるツール。Extensionが多数あって自分好みの設定ができる。最高。 

ObsidianのDaily noteを一発で作ったりできる。

Raycast AIでさくっとGPTと話せたりする。

![CleanShot 2023-03-16 at 09.26.54.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7565/f555b761-4d0e-7681-dde8-1c5e4a628a78.gif)

```sh
brew --cask install raycast
```


## [Sketchybar](https://github.com/FelixKratz/SketchyBar)

macOSのメニューバーを置き換えることができる。スクリプトで自由に表示内容はカスタマイズできる。あのださすぎるノッチも隠せる。

![default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7565/d23b84bb-33b1-40e4-8edd-c32556311789.png)

```sh
brew install sketchybar
```

## [Yabai](https://github.com/koekeishiya/yabai)

導入はちょっと面倒なところがあるが、Space切り替えのアニメーションがオフにできるので必須。絶対使うべき。

僕はCtrl+Cmd+数字で1〜9のSpaceに割りあてて1Space1アプリにしている都合上頻繁にSpaceを切り替えるのでアニメーションはいちいち見てられない。Yabaiはそれ以外にもアプリケーションのウィンドウを分割したりできるタイリングWMとしても使える。

```sh
brew install yabai
```

## [WezTerm](https://wezfurlong.org/wezterm/)

ターミナルのタイトルバーを消したり、仮想フルスクリーンにできるので必須。最高

![CleanShot 2023-03-16 at 09.23.18@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7565/1daf38d9-e198-0a93-f62c-0a20e324f3a6.png)

```sh
brew install wezterm
```

フォントは[Comic Code](https://tosche.net/fonts/comic-code)

## [Cron](https://cron.com/)

時は金なり。シンプルで軽いカレンダーアプリ「[Cron](https://cron.com/)」もちろんGoogleアカウントのカレンダーも出せる。UIがきれいで好き。

![CleanShot 2023-03-16 at 13.17.12@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7565/ac997182-c3f7-705c-7770-af8251766c4f.png)

## [Obsidian](https://obsidian.md/)

やっぱりMarkdownだよね…。ローカルで使えるMarkdownエディタ件管理[Obsidian](https://obsidian.md/) 最近追加されたCanvas機能が神すぎる。これがあればNotionいらんやろ…。ObsidianはLinuxでも使えるけどね。

![CleanShot 2023-03-16 at 14.28.11@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7565/1c8c8412-eda4-2e5b-a18a-d715068d1c6f.png)

```sh
brew install obsidian
```
ElixirでS3にファイルアップロード/ダウンロード

# パッケージ

https://hexdocs.pm/aws/readme.html

## インストール

mix project の場合

```elixir:mix.exs
  defp deps do
    [
      {:aws, "~> 0.13"}
    ]
  end
```

Livebook の場合

```elixir:aws_s3.livemd
Mix.install(
  [
    {:aws, "~> 0.13"}
  ]
)
```

# Config設定

```elixir
# AWSにアクセスするためのパラメータを指定(以下は環境変数で指定する例)
access_key = System.get_env("AWS_ACCESS_KEY_ID")
secret_key = System.get_env("AWS_SECRET_ACCESS_KEY")
region = System.get_env("AWS_REGION")

# AWS.Clientを作成
client = AWS.Client.create(access_key, secret_key, region)
```

# アップロード (s3:PutObject)

```elixir
bucket = "your_bucket_name"
key = "elixir.txt"

content = "Elixir - S3"
md5 = :crypto.hash(:md5, content) |> Base.encode64()

AWS.S3.put_object(client, bucket, key, %{"Body" => content, "ContentMD5" => md5})
```

- md5
    - アップロードしたファイルの破損チェックをしてくれる
    - 指定しなくてもアップロード可能

# ダウンロード (s3:GetObject)

```elixir
download_content =
  AWS.S3.get_object(client, bucket, key)
  |> elem(2)
  |> Map.get(:body)

content === download_content # true
```
【レビューで指摘されがちシリーズ】OfType はキャストも行ってくれます

レビューで指摘された内容をそのまま放流するシリーズ。まとめページも作りましたので他の記事も良かったら見て下さい。

https://qiita.com/lx-sasabo/items/c2d2e5ccae10ff3ecabd

では早速いきます。

Human クラスがあり、 Human クラスを継承した Man クラスがあります。
そして Humans は Human 型のリストです。この Humans の中に Man クラスのオブジェクトを 2つ追加しておきます。（そもそも、なぜそんなコードを？というツッコミはあると思います。が、見逃してください…）

``` C#
class Human { }
class Man : Human { }

class OfTypeTest
{
    static void Main()
    {
        var man1 = new Man();
        var man2 = new Man();
        var Humans = new List<Human>(){ man1, man2 };
    }
}
```

さて、ここで Humans から `List<Man>` を生成したいとします。
そこで自分はこんなコードを書きました。

``` C#
var men = Humans.Select(h => (Man)h).ToList();
```

Man 型の List になっています。
![~_works 2023-03-15 14.22.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960076/a97cf958-7718-3e1e-7a56-aad5628d45be.png)



そして、レビューで指摘をもらいました。「 `Humans.OfType<Man>()` でいけそうです。」
なるほどこうです。

``` C#
var men = Humans.OfType<Man>().ToList();
```
![~_works 2023-03-15 14.24.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960076/739875e0-ac27-33ca-de28-0c5031110bd1.png)

おお！こちらも Man 型の List になっています。Select より意図が分かりやすそうです。

OfType を使うとフィルタリングした戻り値が `IEnumerable<TResult>` となり指定した型にキャストされることが分かりました。
こりゃ便利～。（このとき僕は今後 OfType の罠にハマることをまだ知らないのであった…。この話はまた今度。）

### 参考
https://learn.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.oftype?view=net-7.0
【Rails】titleタグの内容をページ毎に切り替える

プログラミング初心者の備忘録です。
間違った部分がありましたらご指摘いただけると幸いです。
### やりたいこと
Railsでviewで表示されるtitleタグの内容をページ毎に切り替えたい。
### 環境
macOS
rails 6.1ver

### 1.共通レイアウトの編集
layouts/application.html.erbに下記のコードを記述する。
```php:application.html.erb
<html>
  <head>
    <title><%= content_for?(:title) ? yield(:title) : "デフォルトタイトル" %></title>
  </head>
</html>

```
yieldメソッド ・・・ 個別レイアウトのビューコンテンツを挿入する位置を指定できる。
content_forメソッド ・・・ レイアウト内の名前のついたyieldブロックの位置にコンテンツを挿入する事ができる。上記コードでいう名前とは :title の部分を指す。

タイトルをつけていない個別レイアウトには :"デフォルトタイトル" の部分が反映されるコードになっている。
### 2.個別レイアウトの編集
個別レイアウトのファイルに下記のコードを記述する。今回はindex.html.erbとする。
```php:index.html.erb
<%= content_for :title do %>
  Qiita記事一覧
<% end >

```
content_for ~ endで囲んだ内容が :title に代入される。
このレンダリング結果がレイアウトに挿入されると、下記のHTML記述になる。
```
<html>
  <head>
    <title>Qiita記事一覧</title>
  </head>
</html>

```
### 参照サイト
https://materializer.co/lab/blog/41
https://railsguides.jp/layouts_and_rendering.html