OmniAICreator/Qiita-1.07M huggingface dataset:
手書き風ロゴアニメーション

# 前提
SVG作成はinkscapeで作成する


# 参考サイト
https://linksbase.net/css-svg-animation/

※参考サイトはイラレを使っているのでinkscapeに置き換えて考える

# inkscapeでsvgを作成する

## ドキュメント設定
### 「ファイル」→「ドキュメントのプロパティ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/de7213ab-4841-a4cd-9956-197ebba95685.png)

### 「ページ」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/7559c650-fd80-fdfe-1d78-24bee03e2bdc.png)

### 表示単位「px」カスタムサイズで「単位」をpx 「幅」500　「高さ」200に設定する ビューボックスを「幅」500　「高さ」200に設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/73c79089-4e0f-3374-e4f2-0daabcb70310.png)

## ベーステキスト作成
### レイヤー名をベースに変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/d008991f-f7db-3deb-3156-bf7fb968de54.png)


### テキストツールを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/4776d198-5625-1453-1c59-7a209b5f7410.png)

### 任意の文字を入力しフォントサイズを調整しなるべくページサイズ一杯にテキストを表示させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/74c7ab5d-6562-f6a1-24a0-5a54ffec1b66.png)

## ストロークをパスに変換
### テキストを選択ツール選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/8f856e60-09f9-118a-82a1-72650f8b32a7.png)

ストロークをパスに変換を選択する(イラレではアウトライン化)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/facc06fd-c362-bfe4-1c4c-df64fff010c5.png)

### パスの結合
※イラレでは複合パス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/f8956ce5-df06-0196-aa3c-1a05380883cd.png)

## マスクパス作成
### マスクレイヤー作成
マスクレイヤーを作成しテキストのレイヤーをロックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/6eccb04f-7136-bec2-0d1c-16912e589556.png)

## 
ペンツールを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/db7b7acc-a286-5356-0215-380950e23cf0.png)

スナップを無効に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/72999d7f-3f50-e642-b667-52141d9fcaa8.png)

バーのフィル／ストロークを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/e15cf710-8060-1af2-c75d-f74cfa96813f.png)


ストローク単一色で設定する(ここでは赤)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/50067ae1-b4bd-4c5b-1dca-26f923005e0f.png)

ペンツールでテキストを塗りつぶすように描く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596059/0bf09603-1aa4-7d37-fa60-9b7a831897b1.png)


## CSSアニメーションの設定
https://fuuno.net/ani/ani17/ani17.html
Azure Fundamentals(AZ-900)：Azure の基礎: Azure のアーキテクチャとサービスについて説明する「Azure ストレージの冗長性」

Microsoft Learnを用いたMicrosoft Azure Fundamentals(AZ-900)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始める方の参考になれば幸いです。

## 今回の学習内容
**◆「Azure ストレージの冗長性」**
◇対応するMicrosoft Learn ラーニングパス
[Azure の基礎: Azure のアーキテクチャとサービスについて説明する](https://learn.microsoft.com/ja-jp/training/paths/azure-fundamentals-describe-azure-architecture-services/)
◇対応するモジュール
[Azure のストレージの冗長性について説明する](https://learn.microsoft.com/ja-jp/training/modules/describe-azure-storage-services/3-redundancy)

※前回の投稿は下記から確認できます。
[Azure Fundamentals(AZ-900)：Azure の基礎: Azure のアーキテクチャとサービスについて説明する「Azure ストレージアカウント」](https://qiita.com/fsd-jume/items/8d46b21dec8700e149e8)

## Azure ストレージの冗長性
**計画/計画外のイベントからデータを保護するため、常にデータの複数のコピーが格納される**
⇒冗長性オプションによりコピーの格納方法が異なる

### 冗長性オプション選択判断のポイント
・プライマリリージョンでのデータの複製方法
・セカンダリリージョンでのデータ複製の有無
・セカンダリリージョンに複製されたデータへの読み取りアクセスの必要性

### プライマリリージョンでの冗長性
**常にプライマリリージョンで3回レプリケート(複製)される**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851723/b5818ce9-e765-a869-20dd-dab14b5e75f9.png)

### セカンダリリージョンでの冗長性
**セカンダリリージョンに非同期的にLRSでレプリケート(複製)される**
⇒プライマリリージョンへの最新の書き込みとセカンダリリージョンへの最後の書き込みに間隔がある
＝回復ポイントの目標(RPO：Recovery Point Objective)と呼ばれ、通常15分未満の間隔

・セカンダリリージョンへのフェールオーバーが発生しない限り、セカンダリリージョンのデータ読み取り/書き込みが不可
⇒フェールオーバーが完了すると、セカンダリリージョンがプライマリになり、データの読み取り/書き込みが可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851723/72114858-e590-d856-09e2-0dec3e74e868.png)

### セカンダリリージョンのデータへの読み取りアクセス
**機能を有効にした場合、プライマリリージョンが稼働中の場合もデータへの読み取りアクセス可能**
※セカンダリリージョンのデータはRPOにより、最新ではない可能性がある
**・読み取りアクセスgeo冗長ストレージ(RA-GRS)**：GRSで読み取りアクセスを有効化
**・読み取りアクセスgeoゾーン冗長ストレージ(RA-GZRS)**：GZRSで読み取りアクセスを有効化

## 次の学習内容
**◆Azure ストレージサービス**

https://qiita.com/fsd-jume/items/f809c7c05932af38fe19

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8
データベース操作はTablePlusがおすすめ【SQLクライアントツール】

10/24更新
zennにも同じ記事を記載しました。
https://zenn.dev/hirahara/articles/ca27397848f036




SQLクライアントツール使ってますか？この記事では、SQLクライアントツールであるTablePlusを紹介します。

TablePlusはネットではあまり出てこないですが、実はかなり便利なデータベース操作ツールです。

実際にデータベース操作のベストツールだと言っている人もいます。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">This is probably our most loved issue on Github ever ❤️😍💯🎉✨<a href="https://t.co/tAYiq3vsGX">https://t.co/tAYiq3vsGX</a><a href="https://twitter.com/hashtag/TablePlus?src=hash&amp;ref_src=twsrc%5Etfw">#TablePlus</a> <a href="https://twitter.com/hashtag/Database?src=hash&amp;ref_src=twsrc%5Etfw">#Database</a> <a href="https://twitter.com/hashtag/Issue?src=hash&amp;ref_src=twsrc%5Etfw">#Issue</a> <a href="https://twitter.com/hashtag/Github?src=hash&amp;ref_src=twsrc%5Etfw">#Github</a> <a href="https://twitter.com/hashtag/love?src=hash&amp;ref_src=twsrc%5Etfw">#love</a> <a href="https://twitter.com/hashtag/best?src=hash&amp;ref_src=twsrc%5Etfw">#best</a> <a href="https://twitter.com/hashtag/client?src=hash&amp;ref_src=twsrc%5Etfw">#client</a> <a href="https://t.co/vEDGb0lWxv">pic.twitter.com/vEDGb0lWxv</a></p>&mdash; TablePlus (@TablePlus) <a href="https://twitter.com/TablePlus/status/1010349013151830017?ref_src=twsrc%5Etfw">June 23, 2018</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## これまで使っていたmycli
これまではMac用のmycli使っていましたが、データを表示するにも1つのデータを追加するのにも毎回コマンド入力が必要でした。

### mycli
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685152/034cffdd-b371-b152-df08-ad5244e18768.png)

www.mycli.net


## TablePlus
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685152/e0e15259-0244-638e-5cae-627202373221.png)

そのため、もっと効率化したいなということで、SQLクライアントツールを探していたところ、TablePlusを見つけました。

画像


### 料金プラン
実はTablePlusは無料で使えますが、制限があります。使っていると、「プランを上げますか？の文字がたびたび出てきます。

価格自体は買い切り型の70$〜100$です。一応、学割プランもあり、大体半額になります。

## まとめ
実際に操作スピードは上がったので満足です。初めは無料で使えるので、実際に使ってみて操作性はどうか確認すると良いかなと思います。

質問等あれば、コメントかDM等で飛ばしていただければ回答いたします。
本番環境WordPressをAll-In-One WP Migrationを使って開発環境にお引越しする際に詰まったポイント

本番環境構築済みのWPを、Localを使って建てた開発環境に復元したかったのですが、
all in one migrationを使ったところ、インポートが100%で止まって進まなくて困ったので、解決方法シェアです。

# 手順

１．
以下からAll-In-One WP Migrationの古いVersionをダウンロードする

https://github.com/d0n601/All-In-One-WP-Migration-With-Import

２．
上でダウンロードしたプラグインを画面上からアップロードする
→これがうまくいった人は次の３～４は飛ばして５に進んでください。私はうまくいかなかったので、以下３～４の方法で手動アップロード？しました。

３．
画面上から現バージョンのAll-In-One WP Migrationをインストールしてアクティベート

４．
/app/public/wp-content/plugins/all-in-one-wp-migration を消して、代わりにNo3でダウンロードしたAll-In-One-WP-Migration-With-Importを置く

５．
/app/public/wp-content/ai1wm-backups に復元したいファイルを置く（もともとのファイル形式のままでOK）
これをすると、↓のような感じで、All-In-One WP Migration>Backupsの画面上に表示されるはず
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/3a5bd87a-ebb0-11a1-bd58-2e755465a464.png)

６．
画面上から、All-In-One WP Migration>Backups>Restoreを押下し、復元する
これで復元完了！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/244ecd90-9dfd-42b6-4d6e-c735c8eb95be.png)

７．
パーマリンク設定しろと言われるので、言われたとおりにする。もうログインは復元したWPのログイン情報でできます。




# 参考

https://techsolutionshere.com/how-to-fix-all-in-one-wp-migration-when-stuck-at-100/
QuickSight ダッシュボード公開までの基本の流れ

# はじめに
Amazon Quicksightのハンズオンを行ったため、備忘録としてダッシュボードを公開するまでの基本操作をまとめていきます。

# ダッシュボード公開までの大まかな流れ
1. データセット作成
1. 分析（ビジュアル）の作成
1. ダッシュボード公開


# データセット作成
データセット作成には、Athenaにクエリを発行して取り込んだり、Auroraで取り込むなど様々な方法があります。
今回は、CSVファイルをSPICEアップロードする方法で行います。

1. 新しいデータセットからファイルをアップロード
1. 「準備(PREPARE)」ツールで分析用にデータを加工
1. 保存して視覚化でSPICE にデータが取り込み
1. 分析作成画面へ

データ取り込み完了後は自動的に分析作成画面の遷移します。
もし分析作成画面でデータセットの編集や作成を行いたい場合は、画面左上のデータセットの右にある鉛筆マークボタンからデータセットを選択または新規追加を行うことができます。

# 分析（ビジュアル）の作成
ここでは垂直積み上げ棒グラフの作成を例にビジュアルを作成していきます。

* ビジュアル作成の手順
    1. フィールドリストの表示方法の変更
    1. ビジュアルタイプの選択
    1. フィールドウェルの設定

1. フィールドリストの表示方法の変更
分析画面（可視化）のフィールドリストの各フィールドの「...」から表示方法を「数値, 通過, パーセント」の中から選択できます。
なお、このように表示方法を変更できるのはデータタイプが「#(整数, 10進数)」となっているフィールドのみです。
データタイプの変更はデータセットの作成画面で変更ができます。

2. ビジュアルタイプの選択
フィールドリストの下にあるビジュアルタイプから一つ選択します。

3. フィールドウェルの設定
画面上部のフィールドウェルを押下すると、選択肢したビジュアルタイプに必要な出てきます。
フィールドリストから表示させたいデータをドラッグ&ドロップしてフィールドウェルを設定します。
フィールドウェル（値）の下向き矢印を押下すると、集計方法を平均・カウントなどに変更することができます。（初期状態は合計となっている）
また、ここで表示形式も変更することができます。

# ダッシュボード公開
分析画面の一番左上にある共有ボタンを押下してダッシュボードの公開を選択します。
ポップアップが出るので、
「新しいバッシュボードとして公開」または「既存のダッシュっボードと置き換える」
のどちらかを選び、ダッシュボード名を指定して「ダッシュボードの公開」ボタンを押下します。
これで作成した分析をダッシュボードとして公開することができました。

# まとめ
以上がダッシュボード公開までの基本的な流れになります。
ビジュアル作成の詳細や計算フィールドなどについてはまた別途記事を作成していきたいと思います。
【NodeJS(TypeScript)】標準入力から読み取る

CLIツールを作るときにいつも使っている関数を紹介します。
NodeJSでは、標準の`readline`モジュールを使うことで標準入力から入力を受け取ることができます。

## ソース

```ts
import * as readline from "readline";

export const readFromCli = async (message: string, accept?: (input: string) => boolean): Promise<string> => {
  while (true) {
    const ans = await readFromCli2(message);
    if (!accept || accept(ans)) return ans;
  }
};

const readFromCli2 = async (message: string): Promise<string> => {
  const readlineInterface = readline.createInterface({ input: process.stdin, output: process.stdout });
  return new Promise<string>((resolve) => {
    readlineInterface.question(message, (ans) => {
      resolve(ans);
      readlineInterface.close();
    });
  });
};
```

## 使い方

```ts
const color = await readFromCli('好きな色を入力 >', (input) => ['red', 'blue', 'yellow'].includes(input));
```

第1引数で入力を受け付ける前にコンソールに出す文字列を指定します。第2引数は省略可能で、関数を指定するとその関数がtrueを返却するまで入力を再度促します。
上記の使い方では、好きな色を聞いて、red,blue,yellowのいずれかが入力されるまで繰り返し入力を受け付けます。

## 記事紹介

ここまで読んでいただき、ありがとうございます。
最近、毎週投稿を初めて何とか続いているので、もしよければ他の記事も見て頂けると嬉しいです。
TypeScriptが好きなので、それ関連の投稿をしてます。

- 直近4週間：
  - 10/15週_[[TypeScript小テクニック]プロパティ名にパターンがあるときの型定義 - Template Literal Types](https://qiita.com/charon1212/items/572402b81230b741f106)
  - 10/08週_[【TypeScript】Union TypeとConditional Typeの組み合わせに注意！Distributive Conditional Typeについて](https://qiita.com/charon1212/items/f06db517e3e8e3550c99)
  - 10/01週_[「Announcing TypeScript 4.9 Beta」を読む](https://qiita.com/charon1212/items/1af23a4701ef9db0c8e0)
  - 09/24週_[【TypeORM】ちゃんとinitializeしないと、「EntityMetadataNotFoundError」が出るよ](https://qiita.com/charon1212/items/aac45421798a70193d73)
Terraform 基礎(環境変数の定義)

```ruby:main.tf
variable "project" {
  type = string
}
variable "environment" {
  type = string
}
```

```ruby:terraform.tfvars
project     = "terraform-test"
environment = "dev"
```

terraform.tfenvは指定の名前でファイルを作成する。
variable で変数のタイプを設定して terraform.tfenv で変数の値を書く
【NewRelic】Infrastructure Agent Flexを使ってカスタムメトリクスを収集する

## 概要
サーバ内にインストールしたInfrastructure AgentのFlex機能を使って、任意のコマンド実行結果をメトリクスとしてNewRelicに送信する方法について記述。

**CloudWatchでは得られないメトリクス**を収集したいときに役に立つ。

## 前提
- 実行環境はAmazon Linux 2 
- Infrastructure Agentはインストール済み
    - `newrelic-infra`コマンドが使える状態
    - インストール手順については[こちら（公式ドキュメント）](https://docs.newrelic.com/jp/docs/infrastructure/install-infrastructure-agent/get-started/install-infrastructure-agent/)


## 手順

### 1: ymlファイルを作成
`/etc/newrelic-infra/integrations.d`配下にymlファイルを作成する。
ファイル名は自由。今回は`flex.yml`とする


以下サンプル
```yml

integrations:
  - name: nri-flex # ここには必ずnri-flexを指定
    interval: 30s # データを取得する間隔。デフォルトは30秒
    config:
      name: dfFlex # 一意の設定名をつける。
      apis:
        - name: dfOutput # メトリクス名。NewRelicのクエリビルダーでは"dfOutputSample"という名前になる。
          commands:
            - run: df -i # 実行するコマンド
              split: horizontal
              set_header: [filesystem,inodes,iused,ifree,iusedPerf,mountedOn]　# 後述のsplit_byで分割された値をそれぞれ格納するvalue
              regex_match: true
              split_by: (\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+) # 正規表現でコマンド実行結果を分割
          perc_to_decimal: true

```

このサンプルでは`df -i`コマンドの実行結果をメトリクスとして収集できる。

```
ファイルシス    Iノード  I使用    I残り I使用% マウント位置
devtmpfs         499594    297   499297     1% /dev
tmpfs            501843      2   501841     1% /dev/shm
tmpfs            501843    377   501466     1% /run
tmpfs            501843     16   501827     1% /sys/fs/cgroup
/dev/xvda1     15727552 129528 15598024     1% /
tmpfs            501843      1   501842     1% /run/user/1000
```

ymlを設定した時点でメトリクス収集設定は完了！

### 2: ちゃんとメトリクスが送信されているか確認


以下コマンドで確認可能
`sudo /var/db/newrelic-infra/newrelic-integrations/bin/nri-flex -verbose -pretty -config_path /etc/newrelic-infra/integrations.d/flex.yml`

`/var/db/newrelic-infra/newrelic-integrations/bin/`配下にnri-flexというバイナリファイルが存在しており、これによってエージェントの挙動を確認することができる。

出力結果として以下のように、自分が設定したメトリクスが送信されているよーってログが確認できていればOK

```json
"metrics": [
	{
		"event_type": "dfOutputSample",
		"filesystem": "devtmpfs",
		"ifree": 499297,
		"inodes": 499594,
		"integration_name": "com.newrelic.nri-flex",
		"integration_version": "1.5.2",
		"iused": 297,
		"iusedPerf": 1,
		"mountedOn": "/dev"
	},

```

**メトリクスが送信できていない時**

以下のケースが考えられる
- ymlファイルの正規表現にマッチしない
- コマンドの出力結果が意図するものになっていない（権限エラーなど）


### 3: NewRelicでクエリ作成

上記手順で作成したメトリクスをもとに、NewRelic側でクエリを作成する。

```
FROM dfOutputSample 
SELECT average(ifree) 
facet filesystem, mountedOn
```
ファイルシステム・マウント位置ごとの空きノードを取得してみる。

![スクリーンショット 2022-10-21 10.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689205/7eaa950c-2a71-d262-c378-f87cb8cc53dd.png)


データが取得できることが確認できた。


## 参考
[New Relic Flex：独自のインテグレーションを構築](https://docs.newrelic.com/jp/docs/infrastructure/host-integrations/host-integrations-list/flex-integration-tool-build-your-own-integration/)

[dfコマンドの出力結果を送信するymlサンプルの元ネタ](https://github.com/newrelic/nri-flex/blob/master/examples/linux/df-inode-example.yml)

[Flex トラブルシューティング](https://github.com/newrelic/nri-flex/blob/master/docs/troubleshooting.md)
#7 Reactが開かない！fileが起動できない場合の対処法と原因（初学者の単純ミス）

ご覧いただきありがとうございます。

reactファイル一式をダウンロードしてローカルで立ち上げたら、起動しない状況が発生しました。

今回、
- ①事象
- ②実行したこと
- ③参考URL
- ④原因
- ⑤最後に

という構成で残します。

初学者にありがちだと思いますが、エラー発生時は**なんとなく検索したコマンドを実行して解消する**ということってしますよね？

私は理解したくないコマンドを打ちたくはないと思っているけど、結局そうなっています…。

そのため、出来る限り原因究明に努めたいと思います。

なお、色々見返してわかったのですが、今回はnode_modulesファイルがないという単純ミスが原因でした。

ただ、原因究明をする過程で、気づきがありましたのできちんと言語化し残したいと思います。

## ①事象：ファイルが開かない

reactが起動しない事象が発生しました。

1. Reactで作成されたファイル一式をダウンロード
1. `npm start`と起動
1. 下記エラー文

```
///var/folders/4f/69vfwfg91c1d76wm6w6w5wq80000gn/T/start-a35cecf0.sh: command not found
```

なお、事象が起きた背景としては、現在Udemyでreactの勉強をしています。

600本の動画があり、現在200本が過ぎたあたりです。

ファイル一式をダウンロードしてローカルで立ち上げてみたら、起動しない状況が発生しました。

## ②対処：エラー解消のために実施したこと

下記、ファイル削除とインストールを実施したら出来ました！

1. delete node_modules directory:
  `rm -rf node_modules`
2. reinstall all dependencies  
   `npm install`

私の場合は、(再)インストールしたらローカルで起動できました。

**そもそもファイルがありませんでしたので、インストールしたというだけです**

## ③参考URL：３つ

1. React公式ドキュメント
1. エラー文の一部をコピペして検索したQAサイト
1. Qiita

https://ja.reactjs.org/docs/optimizing-performance.html#create-react-app

https://stackoverflow.com/questions/40546231/sh-react-scripts-command-not-found-after-running-npm-start

https://qiita.com/kskumgk63/items/bde9178ec7f8d1880ecd

## ④原因：node-modulesのファイルが欠けていた

エラー文はnot foundとなっていたので振り返ってみました。

1. node-modulesのファイルが欠けていた(これ)
1. 使用しているパッケージマネージャがyarnだったからコマンドが違った（当方はnpm)

### 判明した背景

解凍したzipファイルをみたら、「node-modules」ファイルが一式ありませんでした。

そりゃ `not found` て出ますよね！

ただ、今まで　`npx create-react-app my-app`のコマンドで何のファイルを作成しているかきちんと理解していなかったことがわかり、勉強となりました。


### 調べている中で他に起こりそうなエラー：コマンドの間違い（npm start/yarn start）

まず、Reactの公式には、「Create React App」で起動した場合、npm start で起動してくださいと記載されていました。

```
Create React App

プロジェクトが Create React App で構築されているなら、以下のコードを実行してください。

...(中略)

通常の開発作業では、npm start を使用してください。
```
[参考：React公式](https://ja.reactjs.org/docs/optimizing-performance.html#create-react-app)

そして、Githubを確認すると`yarn start`で起動とも記載されています。

```
npm start or yarn start
Runs the app in development mode.
Open http://localhost:3000 to view it in the browser.
```
[参考:facebook/create-react-app](https://github.com/facebook/create-react-app)

今後、Reactのファイルをインストールしてローカルで起動する場合は、パッケージマネージャによってコマンドが違うことを意識したいなと思いました。

## ⑤最後に 

今回は、単純なミスが原因のエラーでした。

勉強をしていて、**エラーを解消できたはいいものの、原因は何だろう**ということは多々あったので間違ってもいいので言語化していきたいと思います。
プログラミング言語ランキングサイトのローンチ二ヶ月後

## FlameValue概要

https://flamevalue.short-tips.info/

<img src="https://raw.githubusercontent.com/kawadasatoshi/minegishirei/main/flamevalue/flamevalue.png">

Flamevalueのトップページです。

**プログラミング言語からフレームワークにインフラ、開発手法に至るまでエンジニアリングに関わる全てのスキルをスコアリングしています。**

ちなみにトップページにあるレーダーチャートはスコアが高い順に並んでます。
(この画面だとReactが最もスコアが高く、下に行けば行くほど低いスコアとなってます。)

稼働開始から2ヶ月は経ちましたが、ぶっちゃけプログラミング言語のヒエラルキーが明確になるので、引き続き楽しんで運用してます。（少なくとも5年はサービスが続きそう）

詳しい内容は以下の記事参照

https://qiita.com/kawadasatoshi/items/dd91d39bad157a927ffb



## アプリケーションをローンチ後、2ヶ月の成果

ユーザーの数ですが、**Qiitaからの流入が多い状態**です。

それに引っ張られる形で検索順位が上がってきており、「Apache 年収」等のキーワードであれば一位に入っていました。

流石にJavaやPython等のキーワードで上位に食い込むのはまだ難しそうですが、ユーザー数は一日でまだまだ10人程度で一位をキープできていたので
これから本格的に力を入れて開発しても良さそうではあります。


## 課題

少しずつ流入数が増えてきた状態ですが、まだまだ**分析にたるユーザーが少ない状態です。**

一日に2~3人ではなく、可能ならば100人規模のアクセスがほしい所。

個人開発全体に言えることですが、「営業」が課題となります。


## 推定した原因


原因は様々ですが、

- 機能面で不備不足がある

- ドメインエイジが若いので検索順位が低い

- SNSでの宣伝が足りない

- キーワード選定で致命的に間違えている

- 自動的なページと思われている。

等々が予測されます


## 確定した原因

### 機能面での不備不足

本アプリは「Openwork」というサイトを参考に造られています。
そのサイトを確認すると、

- ユーザー登録機能
  - コメント書き込み機能→議論や賑わいがほしい
  - 求人応募機能
  - Good機能

- 検索機能

- システム説明機能

これらの機能がまだまだ足りていない事が確認できます。

その中でも最も大きい点は**ユーザー登録機能**ですね。

その他には軽微な改修では以下の点が改良ポイントとなりますね。

- 軽微な改修

  - Django画像とDjangoタグの変更

  - レーダーチャートへの平均値表示

  - 求人票を見る時に、別のページに飛ぶようにする（_blank="target"）

あるいはブログを運営しているのでそこからのリンクを増やしてみるか..?

- 営業

  - リンクの増加

### キーワード選定で致命的に間違えている:半分事実

JavaやPythonなどのビッグキーワードでは、広告で投資している企業に到底勝てるはずがない。

だが、LaravelやApacheなど部分的に対抗できているサイトもある。


### ドメインエイジが若いので検索順位が低い:事実


### SNSでの宣伝が足りない:事実だが永続的に対応できない



### 自動的なページと思われている:事実でない

自動的なページであれば、より厳しいペナルティが課せられるはずだが今のところはない。




## 次の施策

### 年収ランキングページの作成

- キーワード選定で致命的に間違えている:半分事実だった。
であれば他のページで勝負しに行くしかないのではないか...?

- 機能面での不備不足:半分事実


これらを踏まえ、「プログラミング言語年収ランキング」と称して特集ページを組むのはいかがだろうか...?


「＋＠プログラミング言語ランキング」は誰もが見たいページ（のはず）だ、
しかも目につく。


### 検索機能の実装

APIとhtmlのdatalistの機能を用いて検索機能を実装しました。


## その後

また何か改善あれば報告します
Python,Ruby,PHP,Java,JavaScript,Perlの算術演算子の比較 | プログラミング言語比較


<a href="https://qiita.com/yuki_kimoto/items/f9c2454e7f9130ddb003">Qiita > プログラミング言語の比較</a>

プログラミング言語Python,Ruby,PHP,Java,JavaScript,Perlの算術演算子の比較

# Python

https://qiita.com/G-Rape/items/cd3f2f284ba990164564

# Ruby

https://qiita.com/SUZUKI_Masaya/items/eeea6cd36cc265d2dbf0

# PHP

https://qiita.com/mzmz__02/items/8bfbcf2cd48d9e9f2806

# Java

https://qiita.com/morioheisei/items/63088c61e8234dc1f7f5

# JavaScript

https://qiita.com/uhyo/items/cc92a553059274d85403

# Perl

https://perlzemi.com/blog/20080910122105.html
Slack翻訳のKiara Inc. 業務ハンドブック(GitLabにインスパイアされて作ってみた) 【QiitaCompanyHandbook】

はじめに

GitLabに憧れて、会社の業務マニュアルを公開で作っていきます。
インスパイアされた方は、御社にも導入くださいませ(無料)

https://jp-handbook-gitlab.tech4u.dev/handbook/
https://qiita.com/e99h2121/items/ea5822922d83d00ebc4a

---
Guidebook Principle = GP = Phylosophy 
(日本国でいう憲法にあたるもの=哲学)
GP
1)社内外含め、お互いの最小の時間で最大の効果を上げるように常に行動しましょう(=なぜなら人間の生産性の研究会社だから)
Champion KPI = mt + yt = min
my time + your time = minimum 
つまり私の時間とあなたの時間の和が最小
(人間は結構私の時間の最小ばかり考えてしまう)

![Screen Shot 2022-10-24 at 7.31.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76304/0f007594-cb84-3eff-9aa8-4704091ed6ba.png)

![Screen Shot 2022-10-24 at 7.31.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76304/8b1cb711-7e1f-aea7-eda1-a3a50e5ab948.png)



---
更新(上が最新)
(日本国でいう法律/行動規範にあたるもの)

(20221024B)

仮説ですが、というマジカルワード

相手と話すときに、
Opinion 意見
Assumption 推測
Fact 事実 
Hyphothesis 仮説
Proof=Theorem 定理
Law 法則
を分けて話すことはとても大切です。
(つづく)

(20221024A)

GP1に基づき、Question=質問時には、必ず
Top 1 to 3の"自分が考える最良の行動オプション"を相手に聞きましょう
そうすると相手は番号で選べばいいので、お互い楽です。
私の長い説明を読んでください、というのはおもてなしが足りないと思います。
PREP = point, reason, example,point フレームワークは結構効きます

(good) from me to you
Point : パフェですけど、a)シャインマスカットにします？ b)いちごにします？ 仮説ですが、私はこの順でお勧めします
Reason : だって私の故郷岡山ではマスカットは名産ですから
Example :最近だと石ちゃんもまいうー、と言っていますよ
Point : シャインじゃかなったらガースー総理がお勧めする秋田のいちごでしょうね。もちろん強制じゃないですが。

my time = 2min = 構造化して重要度の高い情報を強調して書いている=慣れれば簡単
your time = 0.01min = 絵文字のA or Bを押せばいい＝秒殺
my time + your time = 2.01min
お互い=happy

(bad)
えーと、えーと。私XXXXXXでYYYYでZZZZだと思うんですよね。。。。
えーと、えーと、PPPPが流行っていますよねそういえば、、、
QQQQQという芸能人はRRRRと言っていますよね。
でも健康を考えると、WWWWという手もあるなああ。。
うーんどれもいいなあ。。。
で、あなたはどうしますか？
my time = 2min = つれづれと書いている = 自分目線
your time = ああああ、読むの面倒だな、、、また今度。。(結局2週間後になる) = 20,160min
my time + your time = 20162min

(good)/(bad) = 1/(10,000)
つまり(good)のやり方の方が1万倍効率がいい

---
Google Chrome 拡張機能 2FA

よくわからないですが、機能していないようですね。

+ [Google Chrome 拡張機能 2FA](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000EBkuOSAT)
+ [Salesforce MFA using Google Chrome Authenticator Extension](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000KeeJxSAJ)

電話を使いたくないユーザーのために、MFA 用の Google Authenticator Chrome 拡張機能を使用しようとしています。私たちの管理者の 1 人がそれをテストし、2 ～ 3 週間正常に使用したところ、突然機能しなくなりました。現在、この方法を使用して MFA の新規ユーザーを登録することはできません。Edge の Google 認証拡張機能が機能しています。Chromeでのみ機能しなくなりました。同様の問題に直面している人はいますか？Edge を使用してユーザーを登録できますが、Chrome で機能しなくなった理由がわからない状況にはなりたくありません。数日後に Edge でも機能しなくなったらどうなるでしょうか? ヘルプ/提案はありますか?
WordPressで画面上からのFTPがうまくいかない

WPで画面上からのFTPが必要な操作（テーマの削除とか画像アップロードとか）ができなくてハマったので備忘録です

# 状況
クライアントPCからftpコマンドたたいてアクティブモードで接続すると：lsできる
クライアントPCからクライアントソフトでアクティブモードで接続すると：一覧見れるしダウンロードとかもできる
FTP接続が必要な画面上からの操作をしようとすると：できない

# 解決策
### 1. wp-config.php編集　
一番下に以下を追加した。
~~~
define('FS_METHOD','direct');
~~~

### 2. functions.php編集
私はこれ空ファイルだったので、ただただ追加した。
~~~
function set_fs_method($args) {
return 'direct';
}
add_filter('filesystem_method','set_fs_method');
~~~

### 3. 権限変更
~~~
sudo chown -R apache:apache /var/www/html
~~~


おわり。
最初ずっと「パッシブモードでの接続がうまくいかないせいなのでは？？」と思い込んでしまって、長くかかってしまいました。ちなみにパッシブモードはpsv_min_port～max_portを指定しているのになぜかそれから外れたポートで通信し始めてしまって、どうしてもうまくいかない、、、。（超広く通信を許可しておけば大体大丈夫だけど、それはつまり大丈夫ではないので、、。）こちらは今後の課題ですが、とりあえずやりたかったことはできたのでよしとして解散します。

# 参考

https://qiita.com/tako_tako/items/fb85f7cb519ddc0b2dff

https://stackoverflow.com/questions/17768201/wordpress-on-ec2-requires-ftp-credentials-to-install-plugins
唯一無二のドメイン名を取得するために上代日本語を参照してみる

先週、WordPressでブログを作った。まだ工事中だが、ホスティングサービスを決めて、ドメイン名を取得して、WordPressを設定して、記事を書くというところまではたどり付いた。今回は、その中で一番悩んだドメイン名について書いてみようと思う。Qiitaで技術と無関係の自分語りをするのも気が引けるが、ドメイン名取得の体験談ということならば問題ないだろう。

# 言葉の選び方を決める

「なるべく人とカブらない言葉を選んだほうがよいぞ」と友人が言っていたのだが、どうやって決めたものか。そもそも、言葉というものは、人の間で話されて意味を持つものだ。人が使っていない言葉なんて基本的に存在しない。・・・ということは逆に、<b>現に人が使っていない言葉</b>なら、ドメイン名取得し放題なのではないだろうか。小説の中の人工言語や、近年になって再構築された祖語などのことだ。とはいえ、自分と無関係な小数民族の言語を使えば文化盗用と怒られるから、今回は、上代東国方言から選んでみたい。

ということで、尊敬するYouTuber、minerva scientiaさんの下記動画で教わったONCOJの上代日本語単語リストを全部読む。

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

https://oncoj.ninjal.ac.jp/list_of_words_English.html

上記の単語リストは、ほとんどが古事記、日本書紀、万葉集といった古典、特に和歌からの引用だ。リストのアルファベット表記は万葉仮名の上代特殊仮名遣いで母音が区別され、破裂音から摩擦音への子音弱化（p→h）も織り込まれている。「聞き覚えが無いけれども微妙に分かる」というような、独自性のあるドメイン名を選ぶことができそうだ。

# 言葉を決める

ただし、出典もいちおうチェックが必要だ。あまり性的な内容の和歌から引用したくないし、神話や皇族に関わる言葉を使うことが不敬になる可能性もある。気になる言葉を見つけては出典をチェック、微妙なものを排除し、候補を一つに絞った。

<b>"mapitogoto: rumours, gossip (what others say)."</b>

マピトゴト。万葉集14.3552の東歌に出てくる単語だ。マが強調。ピトは現代語のヒトだが、用法としては「人妻」と同じ"others"の意味だ。現代でも「他人事(ヒトゴト)」という単語があるが、「他人言」とは言わない。古代では専ら噂話という意味だそうだ。ピトゴトであれば万葉集で複数使われているが、マを付けているのは14巻3552番のみである。作者は不明。詩の内容は、噂話を波の音に見立てて困っている二人の会話だ。恋歌とも取れるが、そうでないような気もする。前述の出典のハードルはクリアだ。そして、試しにGoogle検索すると、同ONCOJのサイトたった1件のみしかヒットしない！

mapitogoto.net。どうだろうか。「ト」は上代特殊仮名遣いのオ段乙類のため、現代語の「オ」とは違う音だが、ONCOJに倣ってアルファベット表記は"o"でよいだろう。mapitogoto.com だと、なんか「噂話を売る仕事」、タブロイド紙のようになってしまうが、.netなら「人々の声が行きかうネットワーク」という含意が込められる。名前からして、個人ブログよりもSNSや匿名掲示板サービス名向けかもしれないが、ちょっと悪い意味の言葉を再解釈しているから、ますます人とはカブらないだろう。そもそも「.com」は高い。この名前がダメになっても、別の手法で別の候補が見つかるだろうし、とにかくやってみよう！

# ホスティング申込み、その後

ホスティングサービスをいろいろと比較し、Hostingerに決めた。日本語サポートは無いが、僕が比較した時点では、WordPress＋.netドメイン名で世界最安の部類だったと思う。セットアップしてサイトが見られるようになるまで3日ほど使っているが、今のところ大きな問題には直面していない。

https://www.hostinger.com/

一つ戸惑ったことと言えば、最初にドメイン登録の申し込みをする時に住所や名前を書くが、その時点ではWHOIS秘匿オプションが表示されておらず、後からそのオプションを探すのに手間取ったことくらいだ。WordPressの方はプラグインをいろいろ試したりしてまだ格闘中である。でも、とりあえず今回の記事と同じような内容を最初のポストとして記載しておいた。

・・・ということで、Googleで1件しかヒットしない1300年前の無名の詩人の言葉を、無事ドメイン名にすることができた。経緯は以上！

# おまけ(宣伝)

俺しか使ってねえってことはよー、シャツに印刷して売ってもいいってことだよなぁー。

https://suzuri.jp/B3QP/

万葉集14巻3552番を白い字でデザインしたTシャツ・スウェットシャツを販売中です！ ONCOJ準拠アルファベット表記版、万葉仮名版の2パターンをご用意しました！　「噂話を波の音に見立てて鬱陶しい思いをしている」という歌ですので、ゴシップ報道に反発したい有名人の方！　人が自分のことを悪く言っていてイライラしている方！　それとなくこれを着込んで、「うるせーよ」というアピールをしてみてはいかがでしょうか！？　色も濃い色なら複数から選べます！　

~~なお、作ったサイトはこちらです。~~
~~試行中なので、アクセス時に工事中だったらごめんなさい。~~

2024年9月8日追記
本日より、当ドメインは使われておりません。個人のサイトは以下に移行しております。
https://b3qp.net
2022/10/24主にITとかセキュリティの記事

サイバー攻撃　中小企業は危険性認識も資金、人材に課題(10/22)
https://www.sankei.com/article/20221022-T5PLGULABBOGHBDXIEENCPWL3Q/

HTTPSをデフォルト採用のWebサイト、80%を突破(10/22)
https://news.mynavi.jp/techplus/article/20221022-2485155/

何もしていないのに急にクレジットカードが使えなくなった！ と思ったらまさかの企業が原因だった話(10/22)
https://rocketnews24.com/2022/10/22/1706116/

【独自】中国 ロシアから1日約1000件　日本へ侵入狙う不審なアクセス(10/22)
https://news.yahoo.co.jp/articles/81d8cf2818696195c5e88157168024a333b3782b

攻撃者が試すパスワードの上位が明らかに--デフォルトの認証情報は変更を(10/21)
https://news.yahoo.co.jp/articles/f7383a32a0bd34db0d4fcbe827274242f3bfe576

LinuxカーネルとZimbraの脆弱性の活発な悪用を確認、更新を(10/22)
https://news.mynavi.jp/techplus/article/20221022-2486910/

暗号屋、NFTメディアプロトコル「VWBL」のソフトウェア開発キット発表(10/21)
https://news.yahoo.co.jp/articles/e97eacb5075d740fe1f73a48f2ebd008ebdf916c

サイバー戦争 終末のシナリオ（上・下）　ニコール・パーロース著
コンピューターと人の脆弱性(10/22)
https://www.nikkei.com/article/DGXZQOUD11A1F0R11C22A0000000/
EC2で自分で自分を追い出してSSH接続できなくなった人

こんにちは、初心者です。
初心者なので、よくわからないままごちゃごちゃいじっているうちに、自分で自分を追い出してしまって困った（けど解決した！）ので、経緯を書き残しておきます。

# 原因
以下コマンドを実行して書き込み権限を広く許可しすぎてしまいました。鍵ファイルへのパーミッションが広すぎるとssh接続ができなくなるらしいです。
~~~
chmod -R 777 /home/ルートユーザ
~~~
https://misaki-blog.com/190611-ssh-public-key/
https://qiita.com/Hobteru4484/items/a6ad1cdbe17369468a1a

# 対処法
以下の方法４を試し、SSH接続できました。入った後にすぐ、755 -Rにしました。
私の環境では方法１～３は使えなそうだったので、試していません。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-linux-fix-permission-denied-errors/

大は小を兼ねるけど、大きけりゃいいってわけではないですね。おわり。
コメント駆動のすすめ

# はじめに

開発・設計時に絶対といっていいほど行っていることがあるので
その方法をご紹介いたします。

それは、**メモ書き（コメントアウト）** してから開発をするというシンプルな方法です。

## 対象読者

- 未経験からエンジニア転職した方
- マルチタスクを強く求められる環境にいる方
- 物事をシンプルに考えたい方
- ロジックの整理が苦手な方

# 目次

- [はじめに](#はじめに)
- [対象読者](#対象読者)
- [目次](#目次)
- [概要](#概要)
- [何がいいか](#何がいいか)
- [まとめ](#まとめ)
- [参考資料](#参考資料)

# 概要

やることはとてもシンプルで、メモ書きするだけです。

APIの実装を例にとります。

実装したいことが明確にあれば、それをするためにはどのように順を追って開発すればよいのかというのが整理できます。

↓はほんのかんたんな例ですが、このような感じで、メモ書きしていきます。
（このような実装が本来あるかどうかはおいておいてください。）

```json-doc
// 数字でパラメータを２つ受け取る

// 受け取ったパラメータが同じ数値であれば和を求める

// 受け取ったパラメータが違う数値であれば差を求める

// 計算結果を json にして返却する
```


まずコメントアウトで実装の方針を決めて
**「入り口から出口までの方針」** をざっと書くだけです。
この条件に気をつけないといけないなとか、複雑に考えすぎていたなとか気づくことができます。

考えていることを文字に起こすだけで思考の整理が案外できるものです。
また、実装の準備をこのようにすることにより実装するときにそれを一つ一つクリアするだけの状態をつくることができます。


# 何がいいか

- はじめに流れを決めてしまうのでそこからの実装で後戻りが少ない
- 足りていない要件・条件など意識されていなかったことが早い段階で気付ける
- ワーキングメモリを節約できる

などがメリットとしてあげられます。

まずは手順をまとめるために
Notion だったり VSCode に書いたりで思いついたことを羅列したりもすることよくあります。

他にも
- 機能開発するとき
- なにか新しいことを始めるとき
- 何からはじめるか悩んでいるとき

などあらゆるケースで有用だと考えています。


# まとめ

- 「その目的を達成するためにどの順序でやるのか、どのような手段がありどのような手段を取るのか、どのような制約があるのかな」どを思いつくことをとにかくコメントしていく。
- 思考が整理されて後戻りが少なくなる。
- ワーキングメモリの節約になる。


# 参考資料

- [コメント駆動開発(コメントドリブン)という考え方](https://qiita.com/shimajiri/items/fa5c97df3bceb22ab630)
- [コメントドリブン開発 - コメントを書いてからコードを書くことの効能](https://news.mynavi.jp/techplus/article/20071011-comment/)
音楽がメインなSNSを作ってみたい

## Intro
この10年間、SNSが私たちの生活を侵入しました。
Twitter, Instagram, Tik Tok, Facebook, Snapchatは、
私たちの日常生活に大きな影響を与えられました。
友達今日はどこに遊びに行ったか、今日のニュースは何があったが、
今一番流行ってるのは何か、次のお休みはおしゃれなところに行きたいけど、どこにいけばいいのか
ほぼ全部の情報収集はSNSでできています。

## 音楽がメインなSNSを作ってみたい理由
こんなに色々なSNSがあるのに、
音楽がメインなSNSは1つでもない(もしかしてあるけど、ただ流行ってないかも)
私は作りたいです。

なぜならば、
1.この世に音楽が好きな人は多い
2.SNSは自分のアイデンティティを表現できるところであり、音楽のセンスはとても代表的なモノです
3.音楽は美しから、音楽をメインとしてなアプリを作りたい

## プロトタイプを実現するために使う技術と困難点
使う技術は、アプリ開発です

困難点としては、
1.大手な音楽サービス会社とコラボする方法
2.Instagramとか音楽機能があるSNSは既に存在していますが、そういう人気なSNSと区別する方法

## Last
このプロトタイプは妄想と言われても間違いないと思いますが、
本当に実現できれば、
今の写真(InstagramとSnapchat)と文書(Twitter)がメインなSNS現状を変えられると思います。
新しい媒介で人それぞれのアイデンティティを表わせることは素敵だと思います。
タトゥーある人(外国観光客)に向け温泉・銭湯マップ

## Intro
私は温泉大好きです！
日本で住んでいて、温泉・銭湯は絶対に自分が大好きなtop 3です。
日本人、または日本に住んでいる外国人にとって、
温泉に入る前にのルールはよく知っていると思います。
しかし、海外から来た観光客は日本の文化・ルールについてよく知らないところいっぱいあると思います。
’多いの温泉・銭湯に対してタトゥーある人はNG’を知らない観光客も多いです。
今回は、このテーマに狙うプロトタイプを考えました！

## このプロトタイプを作ってみたいきっかけ
最近、台湾から来た友人と高松に行きました。
朝はとても充実なスケジュールがあり、２人とも疲れましたので、
夜はちゃんと銭湯でリラックスしたかったですが、
友人はタトゥーがあるので、断れました。
(友人のタトゥーは小さくて、龍、虎、鬼、浮世絵とかではなく、その映も怖くないです。)

さすがに日本にきったので、やはり銭湯に入りたいので、
次の日、絆創膏を貼っでも、NGだったです。

このエピソードがきっかけで、タトゥーある人(外国観光客)に向け温泉・銭湯マップ　を開発したいと思いました。

こういうことは多分よく発生し、お店と観光客両方に対しても迷惑だと思いますので、
もし専用なマップがあれば、とても便利だと思います！

## 実現するために使う技術とある困難点
観光客に対してアプリで情報見るのは一番便利だと思いますので、
(旅中でもどこでもマップを見える)
使う技術はアプリ開発です。

今のプロトタイプを実施するために、一番困難的なポイントは情報収集です
##### 各温泉・銭湯はタトゥーある人を歓迎するかどうか？
##### どこまで大きなタトゥーがOKなのか？
の情報収集がどうすればいいのか、
正直わからないです。

それ以外の困難点はアプリを実際に開発するときに細かい設計だと思います。

## Last
銭湯が断れた友人にこのアイデアを話しました。
彼からとてもポジティブなFBをもらいました。
このプロトタイプを実行できれば、海外観光客にメリットがあるし、
お店に対しても、いつも同じ断る言葉言わなくていいから、
win winです！
functoolsのlru_cache, cacheデコレータはメソッドには使用してはいけない

Pythonの標準ライブラリ[functools](https://docs.python.org/3/library/functools.html)にある、`cache`と`lru_cache`デコレータですが、メソッドにも使えそうですが、使ってはいけないということが下記のビデオで詳しく解説されています。


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

使ってはいけない理由は、キャッシュ付きメソッドがコールされたインスタンスは、一生ガーベージコレクションされないで残ってしまうからということです。メソッドの第一引数に`self`が渡されるので、キャッシュが`self`をキーとして保存してしまうためです。

この問題は回避可能で、その方法も上記のビデオで紹介されています。
例えば、下記の`double`をキャッシュしたいとします。

```python
from functools import cache

class Foo:

    def __init__():
        pass

    def double(self, x):
        print("Double ", str(x))
        return 2 * x
```

次のように、インスタンス変数にデコレータに通した元のメソッドを代入するとよいようです。

```python
from functools import cache

class Foo:

    def __init__(self):
        self.double = cache(self._double)

    def _double(self, x):
        print("Double ", str(x))
        return 2 * x
```
Pythonで jsonファイル読み書き(UTF-8)

Unicodeエスケープなし そして
jsonファイルが読みやすいように改行やスペースをいれてファイルに書き込む
```python
import json

# 読み込み
def read(path):
    with open(path, 'r', encoding="utf-8") as file:
        return json.load(file)

# 書き込み
def save(path, data):
    with open(path, 'w', encoding='utf-8') as file:
        json.dump(data, file, indent=4, ensure_ascii=False)
```
## jsonファイルを読み込む時
```python
json_data = read("ファイルの場所")
```
で json_dataという変数に代入されます
## jsonファイルを書き込む時
```python
save("ファイルの場所","保存したい内容")
```
で 指定したファイルに保存できます
IMDBと繋がりLINE BOTを作ってみたいです！

## Intro
みなさん、IMDBを知っていますか？！
` https://www.imdb.com/ `　
こちら👆のウェブサイトです！
IMDB(インターネット・ムービー・データベース)は、世界中の映画情報を見つけられるサイトです。
ここで、作品の紹介、キャスト、映画制作スタッフ、評価、批評家のレビューなど、全部見えます。

好きな映画があったら、私はよくこのサイトで検索しています。
同じ監督の早期作品、スタイルが似ている映画とか、探しています！

## IMDBと繋がりLINE BOTを作ってみたい理由
では、IMDBのサイトがあるのに、なぜLINE BOTを作りたい理由を説明します。
確かに、IMDBのサイトだけ使えばいいけど、自分的にスマホバージョンのサイトは少し使いにくいと思っています。

よく映画館から出たら、とてもワクワクなときに、すぐ先に見終わった映画館の情報を探したいときがあります。
しかし、そのときはスマホしか持っていません。

もしかしてIMDB専用なLINE BOTがあったら、映画名を入力すれば、すぐに監督、キャスト、もらった賞とかが見れば、
すごく便利だと思いますので、このLINE BOTを作ってみたいと思いました〜

## プロトタイプを実現するために使う技術と困難点

今回の計画を実現するために、
まずはLINE Developersで新しいLINE BOTを作成します。
` https://developers.line.biz/ja/ `　

LINE BOTで新規プロバイダーとアカウントが作成できたら、
Step2はIMDBのAPIを連携することです。

今のところは、無料なIMDB APIを見つけました：
` https://rapidapi.com/blog/how-to-use-imdb-api/ `　

Node-redを応用し、コネクトしたいと思います。
しかし、実行する前にまだ2つ解決しないといけない問題があり：
1. Node-redでhttp request用なIMDB API URLを見つけること
2. その後Node-redでfunctionの設定

## Last
今回のプロトタイプは映画大好き人に向けのアイディアです！
すごく映画についての知識が充実な人も、よくわからないけどもっと知りたい人も、
是非このプロトタイプを使えると思います！
リソースグループについて

●リソースグループ
複数のリソースをまとめてグループ化し、一元的にデプロイ、管理、監視するためのフォルダ機能。Resorce Manageの デプロイモデルではリソースグループを作成し、関連するリソースをリソースグループ単位でまとめて管理することができる。

※リソースグループがリソースの動作に影響を与えることはない。

▲１つのリソースは、いずれかのリソースグループに追加する必要があるが、複数のリソースグループへの追加はできない
▲種類の異なるリソースを１つのリソースグループに追加できる
▲様々なリージョンのリソースを、１つのリソースグループに追加できる

Azureポータルからリソースグループを作成するには、サービス一覧から全般のカテゴリ内にある「リソースグループ」クリックし、表示画面の作成をクリック。

※作成時は、サブスクリプションの選択やリソースグループの名前の入力などを行う必要がある
※Azure上に作成するリソースやリソースグループの名前は後から変更できない。

●別のリソースグループへの移動
仮想マシンなどのリソースをどのリソースグループ内に作成するかは、リソースの作成時に選択する。ただ、一部を除くリソースは作成した後で別のリソースグループに移動することができる。

Azureポータルの場合、移動したいリソースの選択後に「・・・」を押し、移動メニュー内にある別のリソースグループに移動するをクリックし、移動先のリソースグループなどを選択すればリソースを移動できる。
また、Azure PowerShellのコマンドレットである「Move-AzResorce」を使用する方法でも移動が可能。移動まで時間がかかる場合もあるが、移動がリソースの動作に影響を与えることはない。

●リソースグループの削除
リソースグループの削除操作では、確認のためリソースグループ名の入力が必要
【色変記事】AtCoder水色になるまでにやって良かったこと

# はじめに
**ABC272**で**入水**することができました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/62b57d76-934f-6f21-3b2a-1d6d8a967762.png)

本記事では、水色になるために**個人的にやって良かったこと**を中心に書きます。

# やってよかったこと一覧
* [使用言語をPythonに変更](https://qiita.com/rapirapi/items/17e161268b67349fa629#%E4%BD%BF%E7%94%A8%E8%A8%80%E8%AA%9E%E3%82%92python%E3%81%AB%E5%A4%89%E6%9B%B4)
* [典型90問](https://qiita.com/rapirapi/items/17e161268b67349fa629#典型90問)
* [解けなかった問題の復習](https://qiita.com/rapirapi/items/17e161268b67349fa629#%E8%A7%A3%E3%81%91%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E5%95%8F%E9%A1%8C%E3%81%AE%E5%BE%A9%E7%BF%92)
* [スニペット・ライブラリの用意](https://qiita.com/rapirapi/items/17e161268b67349fa629#%E3%82%B9%E3%83%8B%E3%83%9A%E3%83%83%E3%83%88%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E7%94%A8%E6%84%8F)
* [周辺機器の購入](https://qiita.com/rapirapi/items/17e161268b67349fa629#周辺機器の購入)

## 使用言語をPythonに変更
**本業**（Webアプリ開発）でC#を使用していたので、初めのころはC#で競プロをしていましたが、
以下の理由で**Python**に切り替えました。

### Pythonに切り替えた理由
* **文法がシンプル**
    文法がシンプルなため、コーディング速度があがりました。
* **解説が多い**
    C++ほどではありませんが、解説記事が多いです。
    解説をアップしてくださる方には感謝しかないです。
* **Pythonに興味があった**
    人気が高く、様々な種類の開発で利用できる言語ということで興味がありました。

## 典型90問
[競プロ典型90問](https://atcoder.jp/contests/typical90)の★4までを解きました。
自分の**知らない・苦手なテクニック**を知ることができた気がします。

## 解けなかった問題の復習
コンテストに参加して解けなかった**水色Diffくらいまで**の問題を解説を見ながら復習しました
問題のDiffは[**AtCoder Problems**](https://kenkoooo.com/atcoder/#/table/)を参考にしています。
[**かつっぱさんのYouTube**](https://www.youtube.com/channel/UCqqeYOh1gk_TJ16sxazWhUg)解説が分かりやすく、おすすめです。

# スニペット・ライブラリの用意
汎用的に使用できるアルゴリズムは**スニペット**か**ライブラリ**にして、コーティングを**効率化**しました。
[使用しているスニペットはこちら](https://qiita.com/rapirapi/items/1e868cea4afb82445540)

## 周辺機器の購入
競技プログラミングのために購入したわけではありませんが、
周辺機器を揃えることで**コーティング速度**や**モチベーション**が上がります。

### 周辺機器の写真
![desk.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/04a65346-c368-0f8f-6356-caf49c03ec55.jpeg)


### 購入してよかったもの一覧
* **キーボード（HHKB）**

https://www.pfu.fujitsu.com/direct/hhkb/detail_pd-kb800bns.html

* **ウルトラワイドモニター**

https://www.amazon.co.jp/gp/product/B097275MTF/ref=ppx_yo_dt_b_asin_title_o04_s01?ie=UTF8&psc=1

* **机（L字デスク）**

https://www.amazon.co.jp/gp/product/B08B1BQG5R/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1

## おわりに
**競技プログラミング**はプログラミングを**楽しく**学ぶ手段として**有効**だと思います！
【android】各パッケージについて

## パッケージについて
androidstudioをインストールして、プロジェクトを作成してみました。
メモ程度に何のファイルがあるのか書いてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/cd29a3d4-616d-8e08-bb15-f2c3db23378b.png)


### java
```java:MainActivity.java
package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void exitButton(View view){
        super.finish();
    }
}
```
mainクラスのようなものですかね、、
```setContentView(R.layout.activity_main);```でメイン画面の描画をしています。
```exitButton```はボタンが押されたときに呼ばれるメソッドです。

### manifests
```xml:AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.helloworld">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HelloWorld">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
```
ヘッダーのタイトル部分を定義しているようです。
```android:label="@string/app_name"```で参照元を指定しています。（参照元にはxmlがあります。）

## res
```xml:strings.xml
<resources>
    <string name="app_name">テストアプリ</string>
    <string name="hello">こんにちは</string>
</resources>
```
ここではjavaのファイルや、manifestsからの参照元（xmlの定義）があります。
上記はAndroidManifest.xmlの```android:label="@string/app_name"```と紐づいているxmlファイルです。
```name="app_name"```と記載があるので、manifestsの```"@string/app_name"```と紐づいていることがなんとなくわかりますね。
DatadogのLogMonitorからの通知件数が少ない

## はじめに
DatadogでLogMonitorを設定し、大量のログを投入しても、遅滞なくNotificationされるか試験した際、想定20件のところ、5件しかNotificationされない事象が発生した。これについて原因と対策まとめ。

## 前提
この事象が発生したLogMonitorは、業務APで発生したエラーログを検知するためのもので、Multi-Alertで、GroupByに、以下4つのファセットを設定していた（※）。
・ログID
・host
・kube-deployment
・業務ID

20種類のログID分、ログを発生させたところ、Logsには全件収集されたものの、なぜかNotificationは5件に留まってしまった。

（※）当該エラーログの特性上、メッセージIDの種類が多く、かつ、運用中に増減もある。Monitorの設定変更を極力抑えようと、GroupByを活用し、**1個のMonitorで当該エラーログ全てを引っ掛けてしまう目論見でMonitor設計をしていた・・・**

## 原因分析
まず、DatadogのLogMonitorのドキュメントを読み直してみた。
https://docs.datadoghq.com/ja/monitors/create/types/log/
すると、以下の「**ディメンションの制限**」という記載を発見した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931968/dd4ddef3-73dc-d2f1-3624-1ba9b8beaca6.png)
ファセット4つの場合、ファセットごとに上位値5ということらしい。

そもそも、ログIDを20個も同時検知できず、5個が限界だったわけである。
たとえ残りのファセットに余裕があっても（上記の例でいうと、host、kube-deployment、業務IDが1個ずつとしても）、各々のファセットで検知できる枠は5しかない。

## 対策
採用した対策案は、「**Monitorに設定するファセットの数を減らす**」である。
というのも、各ファセットで発生しうる個数は、

・メッセージID　→　600個
・ホスト　→　50台
・kube-deployment　→　20個
・業務ID　→　25個

のため、1Monitorでは到底賄えず、なんならファセット1個しか設定できないではないか、といった状態である。
結果的に、諸々割り切り条件等を加えたうえで、数十個のLogMonitorを作成して当該対応はクローズ。

業務IDやkube-deploymentは、業務リリースに応じて増減するため、逐一Monitorの設定変更が必要になり、目論見は外れたが仕方ない( ;∀;)

## 補足
この「**ディメンションの制限**」を撤廃できないものか、サポートに確認してみたが、2022年8月現在は、できないとのこと。撤廃されたよ！という明るいニュースをGETされた場合は、教えていただきたい。
MacのUTMでWindowsServer2022を動かすときのメモ

## ビデオカードの設定
まともに使えそうだった設定
* Emulated Display Card : Spice QXL GPU(primary, vga compatible) (qxl-vga)
→Windows上でSPICEをインストールするとデバイスマネージャの「ディスプレイアダプター」に「Red Hat QXL Controller」として表示される

## ログインできない
* ログイン時のCtrl＋Alt＋Del相当のキーは　「Control」＋「option」+「fn」+「backspace」 (Delキーが無いMacの場合)
* 反応が無いようならしばらく待ってから再度押してみる(単に処理が遅いだけかも)
* <font color="LightGray">上記のキーを押しても無反応だったが、その後Enterを押したら反応したことがあった（単に遅かっただけかも）</font>

## 検証環境
UTM 3.2.4
【PHP フレームワーク】学習コストとリターンについて

「プログラミングを始めたは良いけど、どこから勉強したらいいのか？」
「PHPのフレームワークは多いけど、どれを習得する？」

プログラミングを始めたばかりだと、そもそも何から手を付けたらいいか分からない状況ってあると思います。
PHPは一通り理解したけど、その次マスターすべきフレームワークを何にするか。。。

かくいう、私も当時は分からなかったので、とりあえず何でも覚えてきました。
（色々試してみて、cakePHP→Laravel→WordPress→Zend→Symfony→EC-CUBE→AWSと覚えてきました笑）

メンターや師匠など業務面、勉強面でもサポートしてくれる人がいると、困らないです。
しかし、そういうサポートしてくれる人がいない時は、自分で調べ続けるしかありません。
そんな時に、次勉強するものを選ぶ時の考え方を書き残します。

## 次に勉強するものの選び方
人生はゲームと同じです。
**何かをする時には、「コスト」が必要であり、今あるもの（リソース）から、どうやって支払い、レベルアップをするかです。**
ポケモンだったら、限られたお金でわざマシンやタウリンなどの強くなる道具を購入して、レベル上げのために草むらを走り続けます。

**プログラミングの場合のコストは、”学習の時間”です。**
（本を購入するなら、お金もコストです）

例えば、フレームワークを覚えることは手間ですが、一度覚えると多くの案件で使えるスキルになります。
これは他の言語でも同じです。（JavaScriptやSwift、AWSなどなど）

せっかく勉強するなら、今後のプログラミング人生でリターンの大きいものを選びたいですよね。

### リターンが多いのは「今の時代流行っているもの」
これもゲームと同じです。
**今の時代のトレンドに応えられるようにすること**です。

システム開発も時代、時代において、トレンドが移り変わっています。（私がシステムエンジニアになった時は、Rubyが流行ってました→今では多くない）
PHPのフレームワークも、cakePHPが流行っていた時代もありましたが、今ではLaravelです。

Googleトレンドで調べると一発でわかります。
参考に、PHPのフレームワークの検索の違いです。（Laravelの圧倒的な存在感！圧倒的！！）
![スクリーンショット 2022-10-23 23.15.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883568/7ed1410f-1faf-5c4a-3b2b-18c1d2c8ecf4.png)

### さいごに
トレンドは常に変わるものなので、その都度調べることが大事です。
さらにプログラミングは移り変わりが速いので、3年前と今年だと異なることもよくあります。
この考え方はプログラミングに限らず、どの勉強でも必須ですよ。
【プログラミング学習方法】独学とは何かについてもやもやしていたから投稿してみる

こんにちは。
プログラミング見習いのSarasaです。
これまで数多のエラーとの戦いを記事にしてきた私ですが、
「そういえば自分の学習方法についてまとめた記事って書いてなかったよなあ～」
ということに気が付いたので軽～くまとめていきたいと思います。

# そもそもプログラミングスクールに通うという選択肢などなかった件について
私のスペックを簡単にまとめると
* 90分の授業が聞けない（お前は何をしに大学に行っていた）
* みんなと同じことができない（集団行動！？とは）
* 単純作業はできないのに考えることは大好きという矛盾を抱えた面倒なやつ（先生から嫌われるタイプｗ）
* とりあえず映画をみせておけばおとなしくなる（関係ない）

とまあダメダメスペックの塊すぎて少し自分でも自分のことが心配になってきました。

よくプログラミングスクールの是非についての議論やらなにやらをSNSで拝見しますが、そもそも「人の組んだカリキュラムに従って何かをする」ことのできない私にとって、スクールに通える人はもはや才能の塊にしか見えませんでした。

加えて、「本を読んでいると3分で寝る」ため、技術書も読めません。（卒業させてくれた大学には感謝しかない）

ちなみに質の高い動画が豊富と話題のUdemyも途中で眠くなって返品しました。
![ノースペック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2863909/1f857559-3391-b2b0-6ac7-16c77eb5d3ee.jpeg)


そんな私にできる唯一の学習方法は**とにかく手を動かし続けること**でした。

# 言語？フレームワーク？なにそれおいしいの？？
とりあえず「プログラミングを始めるなら何をやればいいの？」と、知人の現役エンジニアに聞いたところ「ReactとJavaScriptじゃん？」と返ってきたので、**とりあえずReactの動く環境を整えてみました**。（もちろんcreat-react-app)

公式サイトを見ると「チュートリアルやってみそ」と書かれていたのでとりあえずはじめてみることに。
クリックして○×が出現したときは感動したのですが、**長い、説明難しすぎてチンプンカンプン**だったので約2日ほどで挫折。
![チュートリアル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2863909/24ef262c-7e22-5468-4e35-de1b9592a9b6.jpeg)


**いや、もう自分でサイト作って勉強した方が効率よくないか**

# 意味も分からず手探りでググる日々
とにかく惰性で何かをやることが耐えられない私。
なんとなく作りたいサイトのイメージを書き出し、それっぽいワードをググってはコードをコピペし、エラーを出し、そのエラーの意味が分からずまたググるの日々が始まりました。

技術書やら難しい公式のページ（いや、こっちは読むべきか）を読んでいないので、基礎など皆無の状態でした。

しかも「自分が今何をやっているのか？？」がわからないままググっているので「んなこと知りたいわけじゃないんだよ！！」と思い涙で枕を濡らす日々もありました。
何というか、魚を切ろうとしているのに自分が手に持っている道具がはさみか包丁かわからないというか。。
![さかな.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2863909/7058a324-a609-d104-bce7-3734cae2ca01.jpeg)


それでもエラーを抜けると「やったぞおおおおボスを倒したぜえええ」とばかりに舞い上がり、逆にエラーが出ないと不安になるレベルのエラー依存症に陥りました（嘘。エラーは嫌いです）。

そして、プログラミングを始めて気づいたのですが、コード書いてる時間より調べている時間の方が長いですね。てか、コード書いてる時ほぼエラー箇所の検証な気もします。

謎のエラーが止まらなくなったときは別の簡易な方法を考えたりと、ただエラーをクリアするだけでなく、「**今の自分の実力でできること**」と向き合った上でコーディングを考えることもありました。

**教養面では人に勝てないのだから、とにかく制作物を完成させることにだけ集中しよう。**

その信念が、サイト完成に漕ぎつけた唯一の要因だと思っています。
関数やらライブラリの概念もよくわからない状態からとにかく一カ月間もがき続けて完成したサイトが[こちら](http://photoroom.html.xdomain.jp/)。
今でもちょくちょくgithubを微修正しています。
（写真撮影が好きなので写真紹介サイトを作りました～）

# 独学とはなんなのか
人に言われたことを言われたとおりにできるって才能だと思うんです。
だって、他の人にとっての「普通」に自分を合わせられるってことですよ？
それってなかなか難しくないですか？？
もちろん会社では他の人に合わせることを求められることもたくさんあります。
それでも**自分がやりたい、好きだ**と思ったことは自分なりのやり方を確立した方が楽しくないですか？？
（まあ性格的に独学しか選べなかったというのもありますが・・・（ほぼそれだろ

わからないを楽しむまでは行けなくても、「**今日のわからないと明日のわからないの種類が違っていたらいいな**」と思えたら、少しだけ学習のモチベーション上がってきません？？
【SwiftUI】EnvironmentValueのActionsについて

# はじめに

SwiftUIの`EnvironmentValue`の`Actions`の項目についてドキュメントを読んでみました

https://developer.apple.com/documentation/swiftui/environment-values

# 内容

### Environment Value

SwiftUIのViewは [Environmentプロパティラッパー](https://developer.apple.com/documentation/swiftui/environment)を使用して環境から読み取った設定情報に反応することができる


### カテゴリー

- Accessibility
- Actions
- Controls and input
- Display characteristics
- Global objects
- Scrolling
- State
- StoreKit configuration
- Text styles
- View attributesWidgets

と分類されていましたが、この中の`Actions`について見てみました（iOSで使いそうなものだけ）

## Actions

### [dismiss](https://developer.apple.com/documentation/swiftui/environmentvalues/dismiss)
現在の表示を終了させるアクション
`var dismiss: DismissAction { get }`

```swift
private struct SheetContents: View {
    @Environment(\.dismiss) private var dismiss

    var body: some View {
        Button("Done") {
            dismiss()
        }
    }
}
```

### [dismissSearch](https://developer.apple.com/documentation/swiftui/environmentvalues/dismisssearch)
現在の検索インタラクションを終了させるアクション

`var dismissSearch: DismissSearchAction { get }`

- [isSearching](https://developer.apple.com/documentation/swiftui/environmentvalues/issearching) を false に設定
- 検索フィールドのテキストをすべて消去
- 検索フィールドからフォーカスを外す
（ユーザーが検索フィールドを使っている場合にのみ）

### [openURL](https://developer.apple.com/documentation/swiftui/environmentvalues/openurl)
URLを開くアクション
`var openURL: OpenURLAction { get set }`

```swift
struct OpenURLExample: View {
    @Environment(\.openURL) private var openURL

    var body: some View {
        Button {
            if let url = URL(string: "https://www.example.com") {
                openURL(url) { accepted in
                    print(accepted ? "Success" : "Failure")
                }
            }
        } label: {
            Label("Get Help", systemImage: "person.fill.questionmark")
        }
    }
}
```

### [refresh](https://developer.apple.com/documentation/swiftui/environmentvalues/refresh)
Viewのリフレッシュアクション
`var refresh: RefreshAction? { get }`

Listは`.refreshable`とすることで、ユーザーがリストを下にドラッグして放すと、リフレッシュアクションが呼ばれる

```swift
List(mailbox.conversations) { conversation in
    ConversationCell(conversation)
}
.refreshable {
    await mailbox.fetch()
}
```

カスタムビューでリフレッシュアクションをを呼ぶこともできる
（どんな用途で使うのかは良くわかないですが）

```swift
struct RefreshableView: View {
    @Environment(\.refresh) private var refresh

    var body: some View {
        Button("Refresh") {
            Task {
                await refresh?()
            }
        }
        .disabled(refresh == nil)
    }
}
```

# おわりに

`Actions`の項目には他にもいくつかありますが、macOSでの使用を想定するものだったりしたので、一部iOSで使いそうなものだけを書きました。
また、他カテゴリーにも便利そうなものがたくさんあるので、少しづつ整理していこうと思います。


# 参考

https://developer.apple.com/documentation/swiftui/environment-values

https://qiita.com/1amageek/items/59c6bb32a6627b4fb712

https://gist.github.com/yimajo/6d47b406fe0161ac68c46cd7321f4b38

https://swiftuidoc.jp/page/environment_values
Githubを初めて使ってみた

# Githubにリモートリポジトリを作成した

Ubuntu 18.04.6 LTS



何も理解していないがとりあえず動いたので，備忘録として記録を残す．

githubにjisyupuroという名前のリポジトリを作成．
ローカルにもjisyupuroというフォルダを作成し，以下を実行した．

トークンは settings > Developer settings > Personal access token から作成した．Password for でGithubのアカウントのパスワードを入力して失敗し続けたので注意が必要．

```
$ git init
$ git add test.py
$ git commit -m "githubでファイル名の横に表示される文字列"
$ git remote add origin https://github.com/ユーザ名/リポジトリ名
$ git push origin master
Username for 'https://github.com': ユーザ名を入力
Password for 'https://ユーザ名@github.com: 発行したトークンを入力
```

以降test.pyを編集した際は，`$git push -u origin master` で良さそう．
以下の記事を参考にして.netrcを書きトークンを設定した．


https://qiita.com/4geru/items/704c6fd7dcd8a1ca3296
VueCLIでVue3＋Vuetify＋VueRouterをセットアップする

# はじめに
Vueを勉強しはじめたものの、開発環境をセットアップするために方法がありすぎて迷子になってしまったため、自分用にまとめました。
Vue3、Vuetify、VueRouterをインストールすることで、フロント側の開発環境をセットアップする手順です。

# セットアップ方法
## 前提条件
ローカルのバージョンは下記のとおりです。
OS：MacOS Monterey
Node:v16.17.0
npm:8.15.0
vue:@vue/cli 5.0.8

## プロジェクト作成（Vue3のインストール）
下記コマンドを実行する。どのバージョンのVueを使用するかなどが聞かれるので、Vue3を選択する。その他はお好みで。
```
vue create my-app
```
? Choose a version of Vue.js that you want to start the project with (Use arrow keys)
で3.xを選択する。
```
Vue CLI v5.0.8
? Please pick a preset:
  Default ([Vue 3] babel, eslint)
  Default ([Vue 2] babel, eslint)
❯ Manually select features

? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◉ Babel
 ◯ TypeScript
 ◯ Progressive Web App (PWA) Support
 ◯ Router
 ◯ Vuex
 ◯ CSS Pre-processors
 ◉ Linter / Formatter
 ◯ Unit Testing
 ◯ E2E Testing

# 3.xを選択する
? Choose a version of Vue.js that you want to start the project with (Use arrow keys)
❯ 3.x
  2.x

? Pick a linter / formatter config: (Use arrow keys)
❯ ESLint with error prevention only
  ESLint + Airbnb config
  ESLint + Standard config
  ESLint + Prettier

? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◉ Lint on save
 ◯ Lint and fix on commit

 ? Where do you prefer placing config for Babel, ESLint, etc.?
❯ In dedicated config files
  In package.json

? Save this as a preset for future projects? (y/N) N

```

## Vuetifyのインストール
Vuetifyはv2とv3があるようですが、Preview版のv3をインストールします。
```
vue add vuetify
```

Vuetify 3 - Vue CLI (preview)を選択する。
```
? Choose a preset:
  Vuetify 2 - Configure Vue CLI (advanced)
  Vuetify 2 - Vue CLI (recommended)
  Vuetify 2 - Prototype (rapid development)
  Vuetify 3 - Vite (preview)
❯ Vuetify 3 - Vue CLI (preview)
```

### VueRouterのインストール
VueRouterはインストール時に特に選択肢などはありません。
```
vue add router
```

### 画面確認
下記コマンドを実行後、localhostにアクセスする。
http://localhost:8080　

```
npm run serve
```
Vuetifyの画面が表示される。
![スクリーンショット 2022-10-23 22.59.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2381654/b9116224-afc9-e99e-bd02-3370804eb058.png)

# おわりに
VueCLIの開発環境でつまったため、まとめてみました。Nuxt.jsとかも便利という噂を聞くので使ってみたいです....。
自己紹介です．

# はじめに

こんにちは．初めてのQiitaの投稿です．
文情スイミーと申します．簡潔なプロフィールは下記の通りです．

## プロフィール
- 同志社大学文化情報学部（学部所属）
- 計算論的精神医学・統計・データサイエンス・非線形・複雑系・数理モデルがメインテーマ（興味持った内容）です．
  - 最近は統計の勉強サボり気味です．
  - 計算論的精神医学については今はノーコメント（気が向いたらまた投稿します）．

- 読書や旅行・食事が趣味です．
    - サヴァン『美味礼讃』や村上春樹『ノルウェイの森』がお勧めでしょうか（ベタですね）．
    - 旅行は鉄道でも飛行機でも（自動車の運転もできますが，ドライブスキルがあるわけでもないです）．
    - うどん・焼肉が好き．

- プログラミングはR・Python（未熟）・SQL（未熟）．メインはRです．
- データサイエンスの世界に飛び込んで早３年でしょうか…．あまり進歩がない．

# 何のためのQiitaか？
文化情報学部は高校の進路選択で言うところの文系・理系両方から入学できる文理融合のシステムを持っていますが，その点数学が苦手が学生も少なくありません（僕も大して得意なわけではないですが，アレルギーってほどではありません）．

うちの学部では1回生にて記述統計・推測統計（教養レベル），2回生にて多変量解析（教養レベル）を履修するのですが，数学にアレルギーを持つ学生にとってはやや難しいことかもしれません．

なお僕自身も数理統計レベルで理解しているのかと言うとそう言うわけでもないので，ちょっと勉強のメモがてらQiitaに投稿しようかなと思います．

（ただ忙しいのでどんな頻度になるかは不明瞭ですが．三日坊主かもしれない．それは避けたい．）

以上の点でよろしくお願いいたします．