OmniAICreator/Qiita-1.07M huggingface dataset:
ChatGPT 翻訳 ＋ stream print (like official site) コラボ環境

```python
import openai

openai.api_key = ""


def chatbot(message):
  response = openai.ChatCompletion.create(
      model='gpt-3.5-turbo',
      messages=[
          {"role": "user", "content": message},
      ],
      temperature=0,
      stream=True  # again, we set stream=True
  )

  # create variables to collect the stream of chunks
  # iterate through the stream of events
  fin = []
  for chunk in response:
      chunk_message = chunk['choices'][0]['delta'].get('content', '')  # extract the message
      fin.append(chunk_message)
      if len(fin) % 60 == 0 :#60は出力行の長さ
        print(chunk_message)
      else:
        print(chunk_message, end = "")
translation_template = "次の文章を日本語に翻訳して。 : "
inputMessage = input()
chatbot(translation_template + inputMessage)

```
このコードで、翻訳が便利になります。streamingさせたのでみやすいと思います。
結果図![스크린샷 2023-04-04 오후 2.09.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2371882/e754f847-faef-1cf7-d365-dfdc9946a797.png)
【Flutter】 Stored properties cannot be marked potentially unavailable with '@available'の解決法

# xcodeを14.3に上げるとiosビルドが失敗する。。。
最初はこんなエラーでビルドが失敗しました。

```console
Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a

Error (Xcode): Linker command failed with exit code 1 (use -v to see invocation)

Could not build the application for the simulator.
Error launching application on iPhone 14 Pro Max.
```

どうやらこれはxcodeを14.3にアップしたからだそうです:frowning:


https://zenn.dev/ischca/articles/a00c3adf626ea0#自動でやる場合

このエラー自体は解決したのですが、今度はまた別のエラーが発生しました。。。

# flutter_inappwebviewが原因？でビルドが失敗。。

```console
/Users/user/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.3.2/ios/Classes/Types/UserScript.swift:13:6 Stored properties cannot be marked potentially unavailable with '@available'
```

どうやらアプリで使ってるwebviewのパッケージである「flutter_inappwebview」のバージョンが原因で発生しているっぽいです。。

**上記の参考記事の中でPodFileに追加した部分である`['IPHONEOS_DEPLOYMENT_TARGET']`を13.0から14.0に変更することで解決できました:raised_hands:**


```ruby:ios/Podfile
post_install do |installer|
  installer.generated_projects.each do |project|
    project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
      end
   end
  end
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = ""
      config.build_settings['CODE_SIGNING_REQUIRED'] = "NO"
      config.build_settings['CODE_SIGNING_ALLOWED'] = "NO"
      config.build_settings['ENABLE_BITCODE'] = "YES"
      config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
    end
    if ['SwinjectStoryboard'].include? target.name
      target.build_configurations.each do |config|
        config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'NO'
      end
    end
  end
end
```

これで

```console
pod install --repo-update
```

を実行すればOK！！






# 参考

https://github.com/pichillilorenzo/flutter_inappwebview/issues/1216

https://stackoverflow.com/questions/72970985/xcode-14-beta-error-stored-properties-cannot-be-marked-potentially-unavailable
android Studioでのエミュレーターの設定方法

・事前準備
android studioのデスクトップアプリをインストールしておく。

・手順
android studioを開く
画面真ん中のMore Actionsをクリックする
Virtual Device Managerをクリックする
Create Deviceをクリックする
play storeにアイコンがあるデバイスを選択する
次へを押す
対象のSystem imageをダウンロードする。
あとは道なりに進めていく
Githubのラベルを管理・運用する俺的ベストプラクティス

GitHubを使って開発を進める時、ラベルを使うと思います。(使わない人はこの記事は対象外です)

そのラベル、ちゃんと管理できていますか？
[手動でポチポチ設定・管理する](https://docs.github.com/ja/issues/using-labels-and-milestones-to-track-work/managing-labels)こともできますが、ええいめんどくせええええと思いませんか？

リポジトリごとの管理をコードベースで行ってみようと思います。
今回は、mainブランチへのPushをトリガーとして設定しますが、用件や開発フローに合わせてカスタマイズ可能です。

下記のパッケージを使います。昔から使われている良ツールです。

https://github.com/azu/github-label-setup

# 必要な設定
## PersonalAccess Tokenの生成・格納
1. https://github.com/settings/tokens でアクセストークンを作っておきます。
    - 権限のスコープはは`repo`があれば十分です
1. リポジトリの`settings`から、Actions Secretを設定
    - これをWorkflowから呼びます
    - ![スクリーンショット 2023-04-04 13.22.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256853/7c7f769a-bcf0-4de5-43f2-87a4c476c952.png)

## 設定ファイル
- labels.json(ラベルの定義)
- Workflowファイル(GithubActionsのWorkflow定義)

## labels.jsonファイル
GitHubのリソース関連のファイルなので、`.github/labels.json`に置いてます。
```json:(例).github/labels.json
[
  {
    "name": "bug",
    "color": "FC2C2B",
    "aliases": [],
    "description": "不具合の修正",
    "delete": false
  },
  {
    "name": "feature",
    "color": "0E4BDB",
    "aliases": [],
    "description": "新機能",
    "delete": false
  },
  {
    "name": "document",
    "color": "F4BFD0",
    "aliases": [],
    "description": "ドキュメントの追加および修正",
    "delete": false
  },
  {
    "name": "refactor",
    "color": "AFD38D",
    "aliases": [],
    "description": "リファクタリング",
    "delete": false
  }
]

```

## Workflowファイル
※最小構成です
```yml:.github/workflows/labels.yml
name: Update Labels
on:
  push:
    branches: [ main ]
jobs:
  label:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup Node.js
      uses: actions/setup-node@v2
    - name: Install dependencies
      run: yarn add -D @azu/github-label-setup
    - name: update label
      run: yarn github-label-setup --token ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_LABELS }} --labels .github/labels.json

```

# 結果
適当なIssue作成画面からラベルを振る時に設定通りになっていればOK🙆
![スクリーンショット 2023-04-04 13.12.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256853/df3f2e9f-b87e-a4a3-66a1-e16e9ab2bd21.png)

# もちろん手動でもOK
もちろん、手動でラベルを登録することもできます。僕の前職の元CTOが記事を書いてます。

https://zenn.dev/suzu_prog/articles/5864ad2544b465
axiosでx-www-form-urlencoded形式のデータをpostする

自分メモ。
```
import qs from 'qs';
・・・
const config = {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }

const url = `http://hoge.jp/foo`;
const body = qs.stringify({param1: encodeURI('123'), param2: encodeURI('abc')});
axios.post(url, body, config);

```
Xcode14.3にアプデするとKingfisherでコンパイルエラーが発生する不具合の対処法

# エラー内容
Xcode14.3にアプデしたところ`Kingfisher`で以下のようなエラーが発生し、アプリがビルドできなくなってしまった

```
if let placeholder = context.placeholder, let view = placeholder(binder.progress) 
                                                              ^        
error: initializer for conditional binding must have Optional type, not 'AnyView'
```


# 環境
Xcode：14.3
Kingfisher：7.2


# 参考記事
こちらの記事が解決に導いてくれそう

https://github.com/onevcat/Kingfisher/pull/2029


# 対処法（結論）
バージョンを**7.6.2**にすれば問題なく動作する模様。
私は以下のようにPodのバージョンを設定した。

```.pod
pod 'Kingfisher', '~> 7.6'
```
UbuntuでBluetoothの設定をクリックしても反応がない

# はじめに

会社で8割くらいの人が使っているこのワイヤレスヘッドセットついに買いました

https://jp.shokz.com/products/bone-conduction-headphone-opencomm

やっと届いたのでさっそくPCにつなげようとしたところつまづいたのでまとめます

# 問題

Bluetoothをつなごうと`Bluetoothの設定`をクリックしたところ反応がありませんでした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/4318d889-8557-39e1-5c3e-a092ff791b40.png)

再起動しても何も表示されません

# 解決方法

「設定」アプリがそもそも開けなくなっていた
なので以下のコマンドを実行して入れ直しました

```shell
$ sudo apt update
$ sudo apt install gnome-control-center
```

するとみごとに表示されて無事接続ができました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/a55c1573-0204-f365-e36e-2cdb49b96474.png)

# おわりに

何度もワイヤレスや骨伝導を試しては優先に変えている私ですが、今回は会社の大人数が利用しているということで期待大です


# 参考

https://slash-mochi.net/blog/2022/11/19/ubuntu%E3%81%AE%E3%80%8C%E8%A8%AD%E5%AE%9A%E3%80%8D%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8C%E9%96%8B%E3%81%91%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%89/
TypeScript, React について +α

## 概要

会社の業務で TypeScript を扱う機会が増えることが予想されるため、技術をキャッチアップする目的で TypeScript 周りの知識をインプットする。

※自分用のメモであり、備忘録でもあります😭

## MEMO

### TypeScript とは

- TypeScriptで書かれたコードをコンパイルするとJavaScriptのコードに変換される
- JavaScriptは動的型付け、TypeScriptは静的型付け
    - 動的型付け：実行時に変数の型が決まる
        - Python、JavaScript、Ruby など
    - 静的型付け：コンパイルの時に変数の型が決まる（宣言時に型を指定する）
    ※大規模開発をするときはコーディングミスを減らせる
        - Java、C など

### JavaScriptのフレームワークの種類

- AngularJS（Google）
    - 様々な動作端末で動く
    - 管理画面系のアプリケーション
- React（Facebook）※サイトによってライブラリとフレームワークと言葉が違う
    - 動作が高速
    - SPAに向いている
    - Next.jsというフロントエンドのフレームワーク
        - サーバー機能を備えている
    - Next.jsのアプリを作成すれば、TypeScriptもReactも両方入る
    - こんな感じで？↓
    
    ```jsx
    yarn create next-app sample-app --typescript
    ```
    
- Vue.js（Evan You）
    - 小規模アプリから大規模アプリまで幅広い

## まとめ

- React をライブラリと言っているサイトもあれば、フレームワークと言っているサイトもあり結局どっちなのか曖昧
- ロードマップを読み漁りJavaScriptの勉強方法を模索する

## 参考文献

**TypeScriptを入門者向けに解説！JavaScriptとの違いや勉強法までわかりやすく**

[https://udemy.benesse.co.jp/development/system/typescript.html](https://udemy.benesse.co.jp/development/system/typescript.html)

****javascriptの勉強の仕方****

[https://qiita.com/barcarunrun/items/d451d6a4d897d5a981b3](https://qiita.com/barcarunrun/items/d451d6a4d897d5a981b3)
Go 副作用を期待して関数にSliceを渡す際の注意点


## 概要
Goの sliceは参照渡しだがややこしい
- 前提として Goのsliceは一応**参照渡し**である
- 参照渡しなので、呼び出し先の関数内の更新は、呼び出し元に**反映される** (`sli[0] = "updated"` 等)
- しかし goの**組み込み関数** `append`を使った更新は呼び出し元に**反映されない**
    - 理由は `append`による更新が、単なる変数の再代入で実現されているからである(`sli = append(sli, "appended")` 等)
    - このため呼び出し元とヒープで共有するメモリには一切変更が入らない

## テストコード
下記のテストコードでは下記の 3種類の関数を呼び出し、呼び出し元への影響を確認している
- 変数の再代入による更新
- 組み込み関数 appendを用いた更新
- 参照に閉じた更新

```golang
import (
	"github.com/stretchr/testify/assert"
	"testing"
)

func TestSlice(t *testing.T) {
	// 要素3を持つ sliceを3つ用意
	sli1, sli2, sli3 :=
		[]int{1, 2, 3},
		[]int{1, 2, 3},
		[]int{1, 2, 3}

	// 1:変数の更新, 2:append更新, 3:index指定の更新 を適用
	f1, f2, f3 :=
		func(sl []int) { sl = []int{4, 5, 6} },
		func(sl []int) { sl = append(sl, 4) },
		func(sl []int) { sl[2] = 5 }

	// 変数の更新
	// -> 呼び出し元に影響なし
	f1(sli1)
	assert.Equal(t, []int{1, 2, 3}, sli1)

	// appendによる更新（変数の更新）
	// -> 呼び出し元に影響なし
	f2(sli2)
	assert.Equal(t, []int{1, 2, 3}, sli2)

	// index指定の更新（参照先の更新）
	// -> 呼び出し元に影響あり（sort.Ints(), reverse()等も同様の仕組み）
	f3(sli3)
	assert.Equal(t, []int{1, 2, 5}, sli3)
}

```


## 学び
- 要素数の変更の無い更新であれば関数に副作用を適用できる
- 要素数の変更の無い更新とは、具体的にはソートやリバース等の並べ替えのことである
- 具体例として`sort`パッケージの `sort.Ints([]int)` 等が当てはまる
- 例外系の方が多いので、一般的な更新系の関数は引数にコレクションを渡し副作用を期待する形式より、結果を戻り値に戻す形式を採用した方が無難そうだ
AWS JumpStart2023 レポート

## 概要
* 日時：2023/3/8(水)-3/9(木)　9:00~18:00
* 講師：AWS研修担当の方
* 参加人数：約600名（年齢層は20代~50代まで幅広い）
* 開催場所：自宅（リモート）
* 使用ツール：Zoom（カメラ・マイク必須）、Slack

## 研修の目的・学べること

![2023-03-08 09_10_20-Zoom ミーティング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3057370/059204f4-a2e4-9a2b-885f-39e261fde375.png)
![2023-03-08 09_11_05-Zoom ミーティング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3057370/89b4cd5a-f8cb-f289-900c-40065be1fa44.png)
⇒受講後に右のアーキテクチャ図が理解できるようになる。

## スケジュール
![2023-03-08 09_11_53-Zoom ミーティング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3057370/7c9245fb-3a64-836d-19fb-7eb158d4e060.png)

## 1日目 レポート
### 講義
事前学習動画（約3時間）の内容を、1時間でおさらいします。

### ハンズオン
実際にハンズオン用のAWSを使って、TODOリストを作成します。
資料の手順に沿ってALBやECS等のサービスを使用することができます！

_作成したTODOリスト_
![2023-03-08 13_50_53-【CF】【WalletSystem】API仕様書_共通仕様_エラーメッセージ一覧1 - Excel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3057370/bf63516d-1361-df4a-79ee-c1cadac6d80f.png)

### クイズ
研修の内容をクイズ形式でおさらいします。
回答は、Slackのチャンネルにてスタンプまたはチャットで行います。

### アーキテクチャ課題の説明・検討
2日目に行うアーキテクチャ課題の説明と、グループ内での発表に向けた個人でのアーキテクチャ図を作成します。
アーキテクチャ図の作成は、Miroというツールを使用します。（研修内で共有してもらえます。）
課題の大まかな内容としては、出された要件に合ったアーキテクチャ図をAWSのサービスを使用して作成するものになります。

## 2日目 レポート
### アーキテクチャ検討（グループ）
1日目の最後に出された課題を、グループ内で検討して1つのアーキテクチャ図を作成します。
グループの編成は、6人前後で同じ会社の人がいれば同じグループになる可能性が高そうです。※私のグループは3人同じ会社の方、3人他社の方（他社の方同士、会社は同じ）でした！

### 成果発表会＆SA解説
講師の方が3チームほど選んで、チームで作成したアーキテクチャ図を発表します。
チームごとに選定したサービスや構成が異なっていて、勉強になります！

_チームで作成したアーキテクチャ図_
![スクリーンショット 2023-03-09 16.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3057370/b07d3d7f-3e1e-d311-0522-88fbd2959506.png)

## 研修を受講した感想
この研修でAWSをガッツリ使えるようになるというよりは、プロジェクトで使用する前に最低限の知識を身に付けられる印象でした。
私自身、AWSはほとんど使用したことが無い状態での参加でしたが、AWSのサービスやインフラも含めたアーキテクチャ設計についての知識を蓄える場となり、有意義な時間となりました。
また、研修中に分からないことがあればSlackで質問でき、講師の方やAWSに詳しい参加者の方が回答してくれるため、気負わずに参加することができました。
Slackの質問チャンネルでは、沢山の質問が飛び交っているため、チャンネルを眺めるだけでも勉強になります！
今後受講予定の方は、**研修前に配布される事前学習動画（約3時間）の内容が研修内でたくさん登場するため、全部見るのは大変だと思いますがなるべくしっかり見ておいた方が、より研修の内容がスムーズに理解できると思います！！**
【ドラゴンボール風解説】IAMについて

# はじめに
この記事はAWSの説明は今ひとつよくわからないのでドラゴンボールに例えて説明してほしい。
というAWS初学者向けの記事です。
※投稿記事作成にはchatGPTを使用しております

# IAM 
おーい！聞いてくれ！AWS IAMってやつはフリーザ軍の権限管理のように**AWSアカウント内のリソースへのアクセス権限を管理するんだ**！
ギニュー特戦隊のように**複数のユーザーを一括で管理し、それぞれに特殊な権限を与えたり制限したりできるんだ**！
また、ザーボン、ドドリアように必要な権限を持ったユーザーに、**管理者権限を与えずに一時的にアクセス権限を付与することもできるぞ**！つまり、AWS IAMは強力なセキュリティを提供し、AWSアカウント内のアクセス権限をより管理しやすくするんだ！分かったか？

# ルートユーザ
フリーザ：AWSアカウントの管理者にあたり、すべての権限を持っています。IAMポリシーを使用して、他のユーザーに必要な権限を与えたり、制限したりすることができます。

# IAMグループ
ギニュー特戦隊：AWSアカウント内のグループにあたり、複数のユーザーをまとめて管理することができます

# IAMユーザ
隊員：ギニュー、ジース、バータ、リクーム、グルト

# IAMロール
許可：ベジータを倒す許可をいただいたドドリアは、ベジータを倒すことができます

# IAMポリシー
命令書：フリーザ軍の構成員たちはフリーザ様から与えられた範囲内でのみ行動しより効率的で安全な作戦を実行することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3304054/4bc7cf27-84b1-4e41-c860-cedc95ac629b.png)
Azure OpenAI Service で ChatGPT を REST API から使う

※本記事は2023年4月4日時点での情報を元に書かれています。

# はじめに
Azure OpenAI ServiceとTeamsの連携アプリを作りたいと思いREST APIの操作方法を調べていたのですが、過渡期なのか様々な情報があり、URIやBodyの正しい形式を見つけるのに苦労したので、備忘録としてシェアします。

# Azure OpenAI Service の ChatGPT を呼ぶ REST API の例
- メソッド: POST
- ヘッダー: 
 Content-type: application/json
 api-key: Azure Portal で取得したキーを入れます

```API:URI
https://[AOAIのリソース名].openai.azure.com/openai/deployments/[AOAI上で作成したChatGPTのモデル名]/chat/completions?api-version=2023-03-15-preview
```

```JSON:Body
{
    "messages": [
        {"role": "system", "content": "Assistant is a large language model trained by OpenAI."},
        {"role": "user", "content": "質問内容をここに記載"}
    ],
  "max_tokens": 800,
  "temperature": 0.7,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "top_p": 0.95,
  "stop": [
      "
"
  ]
}
```

記事投稿時点では上記内容で200 OKが返ってきます。

※最新のEndpoint URIはプレイグラウンドの画面上 **コードの表示** から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/8f61c907-c017-04d5-d173-aed294db84d4.png)

# 参考文献
- 公式ドキュメント: https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/how-to/chatgpt?pivots=programming-language-chat-completions
- TeamsとAzure OpenAIの連携アプリ: https://techcommunity.microsoft.com/t5/integrations-on-azure-blog/integrate-azure-open-ai-in-teams-channel-via-logic-app/ba-p/3776048
AI開発の一時停止はダメなの原因

この記事は、[fastcompany](https://www.fastcompany.com/90874897/pov-why-pausing-ai-development-is-a-bad-idea)の翻訳です。
![QQ20230404105757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2298092/1826d613-5917-988a-3244-3c18633c67a0.png)

AIの未来をめぐる戦いに、グローブが外されつつある。

先日、マスク財団が支援する未来派非営利団体「Future of Life Institute」は、OpenAIの主要サービス「GPT-4」より強力な**AIシステムの訓練を6カ月間休止することを求める公開書簡**を発表しました。

「強力なAIシステムは、その効果がポジティブであり、そのリスクが管理可能であると確信した場合にのみ開発されるべきです。」と宣言するこの手紙には、イーロン・マスク本人、Appleの共同創業者スティーブ・ウォズニアック、AI研究者のヨシュア・ベンジオとゲイリー・マーカス、歴史家のユヴァル・ノア・ハラリら数千人が署名しています。「AI研究所と独立した専門家は、この間を利用して、独立した外部の専門家によって厳格に監査・監督され、高度なAIの設計と開発に関する一連の共有安全プロトコルを共同で開発・実施する必要があります。」

AIが安全で、責任と透明性のある方法で開発されるべきなのは間違いありませんが、現在最も重要な**テクノロジーをタイムアウトに置くことは**、**重要な瞬間に国を弱体化させかねない**、**実現不可能な解決策**です。

まず、AIが数十年にわたる誇大広告の末に素晴らしい可能性を示し始めた矢先のことであり、前代未聞の出来事です。また、この法律を施行することはほとんど不可能であり、経済の原動力であるイノベーションに打撃を与えることになるでしょう。

この書簡には有名なAI専門家たちが署名していますが、他のAI研究者はこのアプローチを批判し、AIのトレーニングデータの透明性を高めることや大規模な言語モデルの意思決定を必要とするなど、現在のAIがもたらす害やリスクを見落としていると述べています。Google Brainの創設者であるコンピュータ科学者のアンドリュー・ウンは、モラトリアムを実施するには政府の介入が唯一の可能な方法であるため、Twitterで「ひどいアイデア」と呼びました。

「教育、医療、食品......多くの人に役立つ新しい用途が見えてきた。GPT-4を改善することが助けになる」と、アンドリュー・ウンがツイートしました。「AIが生み出す大きな価値と現実的なリスクのバランスを取ろう。AIの安全性を高めるには、透明性や監査に関する規制がより現実的で、より大きな違いを生むだろう。」

1990年代半ばに、人々がNetscape、Microsoft、Mozillaにウェブブラウザの開発を中止するように頼んだことを想像してください。ネット上の児童ポルノやわいせつな言論に対する現実的な懸念に対処するために、それが正しい行動だっただろうか。そうではありません。これらの問題は、産業界、法律家、裁判所、規制当局によってより効果的に対処され、最終的には、インターネットにおける言論の自由の価値を確立する画期的な最高裁判決によって解決されました。

![QQ20230404105846.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2298092/09df54c4-d73b-a09d-5d29-32d6d290c9bb.png)
第二に、米国はAI市場をリードするために中国と競争しています。米国を拠点とするOpenAI、Microsoft、Google、Metaといった米国の多国籍企業、そして数多くの新興企業の最近のイノベーションにより、米国は、ほんの数年前まで中国がリードしていたと専門家が言っていたこのレースで、再びリードを取り戻したかもしれません。しかし、AIのイノベーションのペースは、モバイルコンピューティングのブーム以来、かつてないほど加速しています。OpenAIが画期的なChatGPTをリリースしてからGPT-4をリリースするまで、わずか4カ月弱しかかからなかったことを考えると、そのスピードは速い。もし米国とその主要企業がAI開発を6カ月間中断し、中国が先を急いだとしたら、米国は不利な立場に置かれ、世界の主要な敵対国に潜在的な隙を与えることになるでしょう。

第三に、仮に開発を一時中断したとしても、この「AIの夏」に何が達成できるのだろうか。なぜなら、AIのガバナンスは非常に複雑なテーマであり、新しい枠組みを作り上げるためには、複数のステークホルダーがしっかりとした包括的な議論を行う必要があるからです。このガバナンスシステムの基盤を構築するには何年もかかるでしょうし、業界の慣行や規制政策、世界的な法律の変更も必要になると思われます。

責任ある、信頼できる、説明可能なAIのための効果的なガバナンスシステムの設計について、より集中した取り組みと投資が必要であることは間違いありません。そして、これらのシステムの急速な進化は、気候変動が世界的な緊急課題となっているのと同様に、私たちが社会のより大きな優先事項にする必要があることを意味します。

テクノロジーは、それを管理する我々の能力を凌駕してきました。しかし、我々の歴史は、進歩を阻害することなく、**テクノロジーの発展とそのガバナンスを並行させる**ことが、より賢明なアプローチであることを示しています。

この書簡が見落としているのは、この作業の多くがすでに行われていることです。AIの主要なプロバイダーは、AIの安全性と責任に非常に真剣に取り組んでおり、リスク軽減ツール、責任ある使用のためのベストプラクティスの開発、誤用に対するプラットフォームの監視、人間のフィードバックからの学習を行っています。GPTの過去2回の迅速なリリースは、すでに価値、安全性、責任において大きな改善につながっています。

これで完璧か？もちろんそうではありません。これらの企業にもっと監視する必要があるのでしょうか？もちろん必要です。イノベーションは厄介なものです。間違いはつきものだが、それは学ぶためのプロセスとして不可欠なものでもある。この議論が渦巻く中、マスクはかつて彼が語ったこの言葉を思い出すべきだ：「**失敗しないのであれば**、**十分に革新的でない**。」

記事の紹介は以上になります。AIに関心を持つ方に、[AIお絵かき](https://vanceai.com/ja/image-generator/)ツールをおすすめします。
FreeCADで3Dプリントしよう！第1回「簡単なコップ」

# LESSON 001 「簡単なコップ」　Lv.1

- はじめに
FreeCADで3Dプリンティングしたい人のモデリング講座になります。
作成モデルに示している難易度を参考に進めてみてください。

- Lvについて
難しさの参考にしてください。今考えているざっくりとしたイメージは、
Lv.1~Lv.10 3Dモデルを初めて触る人。モノづくりの設計経験が無い人向けです。
Lv.11~Lv.20 3Dモデルを触った経験のある人。モノづくりの設計経験は無いが、学校とかで勉強した人向けです。
Lv.21~Lv.30 機械設計を意識したモデリングです。
Lv.31~      機械設計経験者の筆者の癖が存分に出たモデリング・設計です。現場の一例として参考にできる人向けです。

- モデリング
第1回目はXsimさんのモデリングチュートリアルを流用します。
以下、Xsimさんのモデリング手順リンクです。
https://www.xsim.info/articles/FreeCAD/tutorial-mug/modeling3.html

- 完成データ
私が作成したモデルは以下からダウンロード可能です。
答え合わせにご活用ください。
https://grabcad.com/library/tutorial_cup_01-1
log(7,x)+28log(x,7),x>1の最小値「西南学院大学2023年商・経済・法学部第１問(2) 」をwolframalphaとsympyでやってみたい。

グラフがでます。
logの引数の順番は、wolframとsympyは逆です。sympyは、底が第２引数です。

オリジナル

https://mathmathmass.exblog.jp/33176111/

上と同じです。大学入試数学問題集成＞テキスト (2023/04/04)未登録 


# wolframで
極小値

https://www.wolframalpha.com/input?i=log%287%2Cx%29%2B28log%28x%2C7%29&lang=ja

最小値

https://www.wolframalpha.com/input?i=log%287%2Cx%29%2B28log%28x%2C7%29%2Cx%3E1+%E6%9C%80%E5%B0%8F%E5%80%A4&lang=ja

最小値　極小値

https://www.wolframalpha.com/input?i=log%287%2Cx%29%2B28log%28x%2C7%29%2Cx%3E1+%E6%A5%B5%E5%80%A4&lang=ja



# sympyで(オリジナルのやり方で)
T氏様の方法を勉強中。参考の「相加平均≧相乗平均」より

# sympyで(微分関数diffで)
x>1を使っていません？
```python
from sympy import *
x=Symbol("x", positive=True) 
f=log(x,7)+28*log(7,x)
xmin=solve(diff(f))[1]
print("#",xmin,f.subs({x:xmin}).simplify())
plot(f,(x,1,2))
# 49**(sqrt(7)) 4*sqrt(7)
```
縦横比が、異なります。
![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/1c31f0bb-d98a-0a97-8419-2bd1f1f485a6.png)

# sympyで(最小値関数minimumで)
・先に最小値です。最小値よりxの値を、solveで計算しています。
・２行を、ユーザー定義関数にしたほうがいいですか？　Intervalがありました？？？
教えて下さい。他にいい方法がありますか？
```python
from sympy import *
x=Symbol("x", positive=True) 
f=log(x,7)+28*log(7,x)
fmin=minimum(f,x,Interval(1,oo)).simplify()
print("#",solve(Eq(f,fmin))[0],fmin)
# 49**(sqrt(7)) 4*sqrt(7)
```
①私の環境は,pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースをコピー貼り付けでも、できました。
黒背景の右上に、マウスを移動すると、コピーマークが発生します。

https://live.sympy.org/

# 参考
To take derivatives, use the diff function.

https://docs.sympy.org/latest/tutorials/intro-tutorial/calculus.html#derivatives

Returns the minimum value of a function in the given domain.

https://docs.sympy.org/latest/modules/calculus/index.html#sympy.calculus.util.minimum

以下は,使いたかった。

https://ictsr4.com/sw/compare/

https://qiita.com/mrrclb48z/items/d413ff75fb2efe332aab
面接時のエンジニアについて

今回は、エンジニア採用時の面接官の着眼点について書いていこうと思います。

## 今回のテーマ
・過去を活かしきれていない
・人柄
・経験不足


## 1. 過去を活かしきれていない
スキルシートに纏められている内容について、エンジニアの方に説明してもらうのですが、、
・過去の内容説明が薄い・曖昧
・全体を把握出来ていない
って方が結構います。

過去の現場で苦労した事を忘れてしまうのが、私としては不思議に感じます。
足し算、引き算、漢字を忘れない事と同様に、現場で苦労した事や作業内容は覚えているのがベターなのかと思います。
辛い思い出だけ覚えていても、スキルアップはあまり望めないかなと。

個人的には、現場が変わる度、スキルアップする度に過去の現場や経験を振り返り、スキルシートのアップデートを繰り返す事で、過去の経験が今の自分をアップデート出来ると思います。
例えば昔は出来なかった技術提案も、今だったらこういう提案出来たなぁとか、こういうロジックの方がパフォーマンス出せたのかもとか。

過去には自分で経験した色々なパーツが転がっています。
なぜあの現場ではこういう環境構成だったのだろう・・・自分ならこういう構成の方が負荷分散や性能・コスト面の観点から自分の考えた構成の方が良いとか。
最悪だったと思えた現場でも、なぜ最悪だったのか、改善点はどこだったのか自分がマネジャー・リーダーだった場合は何が出来たのかシュミレーションすることで自分をアップデートすることが出来ます。

また、自分の作業範囲外の部分も知ることで、全体概要や環境構成を意識できるようになります。
あの現場では予算がなく本番環境のスペックも低かったからすぐサーバーダウンしてたとか、あの現場では予算も潤沢だから、専用のビルドサーバーがあったとか、バッチサーバーと相乗りしてたとか現場を去った後からでも環境を把握することは出来ると思います。

そんな最悪だった現場も自分の良い経験値としてスキルアップ出来ると思います。

## 2． 人柄
どこの現場でも人柄は重要視されていると思いますが、少数精鋭な現場ほど重要視されているんじゃないかと思います。
個性は大事なポイントですが、我が強すぎるのはチーム内のバランスを崩しかねない要素の一つです。
現場内に新しい風を入れたい場合は、我が強くても状況を考慮して採用される場合もあるかもしれません。

また面接される人が思っている以上に、面接官は観察しているので、面接時に曖昧な回答や誤魔化しはバレています。
自分の限界を超えて下手な事を言うのも、不確かな内容を面接時に伝えることで印象は悪くなります。
土壇場になったら、この人は不確かな報告するかも？と思われます。

面接官はたまに意表を突く質問をして、咄嗟の状況判断内容や反応速度なども見てますので、咄嗟に出る人柄は重要です。

## 3. 経験不足
いくら面接の準備していても、何を聞かれるかは分からないので、毎回ど緊張してました。
自分のアピールポイントを話すのも、面接官の質問に対する回答も場に慣れていないと慌てたり、反応速度が遅かったりして経験不足が露呈してしまいます。

かく言う私も、昔は田舎から出てきたばかり都内の面接では標準語が上手く話せないことで、面接時のレスポンスがめちゃめちゃ遅かったです。（脳内変換に時間がかかるため）
特に私の地方（青森の田舎）では別言語かというほど、標準語とはかけ離れていましたので標準語圏の人は理解出来ないかも。

私が克服した方法としては、捨て面接を何十回も受ける事です。
手間はかかりますが、圧倒的に効果は出ました。
捨て面接をすることで、受からなくても良いと言う心持ちからリラックス出来て、面接官へ攻めた質問や意表を突く事も可能です(笑)

知り合いや友達とガチで面接練習するのも効果的です。
笑ってしまっては話にならないので、ガチでやればやるほど本番での面接の緊張は緩和されました。

## 最後に
少しでも参考になれば幸いです。
何歳からでもスキルは伸ばせます。
MacOS Venturaにアップグレードしたら、SSH接続ができなくなった！解決方法は？

久しぶりにssh接続しーよおっと〜

あれ..？

```bash
$ ssh hostname
Unable to negotiate with xxx.xxx.xxx.xxx port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
```

なんじゃこりゃあ。

## TL;DR

~/.ssh/config に下記を追加。

```bash
Host *
  HostKeyAlgorithms=+ssh-rsa
  PubkeyAcceptedAlgorithms=+ssh-rsa
  KexAlgorithms +diffie-hellman-group1-sha1
  Ciphers aes128-cbc
```

## 原因

https://osxdaily.com/2022/12/22/fix-ssh-not-working-macos-rsa-issue/

MacOSをVersion UPしたことによって、RSAキーを使用したSSH接続に問題が発生しているようです。

```bash
$ cd ~/.ssh
$ chmod 600 *
$ ssh-add -K ~/.ssh/id_rsa
```
のようにSSKキーファイルの設定を変更すれば解決するそうですが、万が一ぶっ壊れたら嫌なので、confに設定を追加しました。

## ようには

SSHなんかやめようぜ。
Googleデータアナリティクス：データのライフサイクル

# はじめに

本記事は、Googleデータアナリティクスのプロフェッショナル認定証のプログラムより、参照させて頂いています。興味を持った方は、是非受講してみてください。

https://www.coursera.org/professional-certificates/data-analytics-japanese

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/9ecfac9e-53bb-7cf3-3a30-dbc832717f52.png" width="800">

# データのライフサイクル

データ ライフサイクルには 6 つのステージがあります。

| ステージ | 内容  　| 
| :--- | :--- | 
| 計画 | どのようなデータが必要なのか、どのように管理するのか、誰が責任を持つのかを決める。　 | 
| 取得 | さまざまな異なるソースからデータを収集または取り込む。　| 
| 管理 | データを維持、管理する。保管方法、保管場所、保管ツールの決定も含む。　| 
| 分析| データを使って問題を解決し、意思決定を行い、ビジネス上の目標をサポートする。　　 | 
| 保管 | 関連するデータを長期的かつ将来的に参照できるように保存しておく。　　 　| 
| 破棄 | ストレージからデータを削除し、共有コピーもすべて削除する。　 | 


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/80c237d1-1aec-d1cf-4261-4c9739b470ea.png" width="600">

### <font color="MediumBlue">計画</font>

実はこのフェーズは分析プロジェクト開始より だいぶ前に実施されます。 計画フェーズでは必要なデータと それをライフサイクル全体を通じて 管理する方法、 責任者、そしてベストな結果は何かを 決定します。 

具体的に、電力会社が、顧客が電気を 節約できるようにするための インサイトを得ようとする例で 考えてみましょう。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/2c7fa59b-65c8-e774-80e2-687198f3a201.png" width="600">

- 計画フェーズでは、 顧客の年間電力消費量、 電気が使われている建物の種類、 屋内の電気製品について情報を得たいと 判断します。
- 次に電力会社は データの収集、保管、 共有について各担当者を決めます。 これらすべてが計画フェーズでの作業になり、 その後のプロジェクトの基礎となります。 

### <font color="MediumBlue">取得</font>

このフェーズでは さまざまな情報源からデータを集め 組織内に取り込みます。 日々発生する膨大なデータを 集める方法は数え切れません。 外部のリソースからデータを取得する方法が 一般的です。

例をご紹介します。 天気情報についてデータ分析する場合、 そのデータは 政府の気象データセンターなど一般公開された データベースから取り込むことになるでしょう。 他にも、自社のドキュメントやファイル からデータを取得することも考えられます。 一般的にはデータベース化されているはずです。  

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/1dcab270-f50b-6abc-fe20-c770467f1e6a.png" width="600">

ここで想定している電力会社の場合、 

- 自社データベースで管理している 顧客の電力消費データを使って調査する ことを考えるでしょう。 

顧客情報データベースを運用する場合、 データの整合性、 信頼性、プライバシーをすべて担保するのが 大事です。 データを取得したことにします。 

### <font color="MediumBlue">管理</font>

ここではデータをきちんと管理する方法、 どこにどう保存するか、 安全でセキュアな状態に保つためのツール、 適切な管理を確実に行う手段について 考えていきます。 

### <font color="MediumBlue">分析</font>

データ アナリストの腕の見せ所です。 このフェーズでは、 課題を解決し、重要な決断をし、 ビジネスの目標達成のために データを駆使します。 

例えば、先の電力会社の目標でいうと 

- 顧客の電力節約をサポートする 方法を見つけること、かもしれません。

### <font color="MediumBlue">保管</font>

保管とは、 今後使わないかもしれないデータを 常に利用可能な場所に保管しておくことです。 分析フェーズではアナリストは膨大な量の データを処理します。 そこでもし、 存在はするものの目下の作業には役に立たない データまで仕分けなければならないとしたら、 大変なことになるでしょう。 そんなデータは手元に置いておかずに、 アーカイブしてしまいましょう。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/db2fa560-9e50-6847-3c22-5d0f689bddfe.png" width="400">

### <font color="MediumBlue">破棄</font>

また電力会社の例に戻りましょう。 

- データは複数のハードドライブに 保管されているはずです。 このデータを破棄する場合、 セキュアなデータ消去ソフトウェアが使われます。 他に紙の資料があれば、 それもシュレッダーにかけます。 この作業は自社情報だけでなく、 顧客の個人情報を保護する上でも大切です。
[macOS]コマンドでファイルを安全に削除する方法

# 概要
rmコマンドだとファイルがゴミ箱に移動されずそのまま削除されてしまうので、操作を間違えると大惨事になる場合があります。ということで今回はコマンドでファイルを安全に削除する方法＆ツール２選を紹介していきます。

- 環境
    - (m2 pro)macOS Ventura 13


# 関数＆aliasを作る
ファイルをゴミ箱に入れたい場合、以下のコマンドが使えます。
```zsh
% mv <target file> ~/.Trash
```
このコマンドのaliasを作って、`~/.zshrc`(zshの場合)に追記すればOK。
コマンドに引数としてファイルパスを渡す必要があるので、関数を使います。
```zsh: .zshrc
function moveToTrash() { mv $1 ~/.Trash }
alias rm='moveToTrash'
```
動作確認します。
```zsh
% source ~/.zshrc
% cd /tmp
% touch test
% rm test
```
ゴミ箱に移動されましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/2eceb658-de57-d631-8266-44dd4edddf75.png)

※上記のようなmoveToTrash関数の書き方では、通常`rmコマンドのオプション`やコミ箱から`元のパスへのファイルの復元`が`できない`ので、ご注意ください。

# trashというツールを使う
[trash](https://formulae.brew.sh/formula/trash)というツールがあるので、こちらの方がもっと便利かもしれません。
まずbrewでインストールします。(Version 0.9.2)
```zsh
% brew install trash
```

```zsh
% trash
usage: trash [-vlesyF] <file> [<file> ...]

  Move files/folders to the trash.

  Options to use with <file>:

  -v  Be verbose (show files as they are trashed, or if
      used with the -l option, show additional information
      about the trash contents)
  -F  Ask Finder to move the files to the trash, instead of
      using the system API.

  Stand-alone options (to use without <file>):

  -l  List items currently in the trash (add the -v option
      to see additional information)
  -e  Empty the trash (asks for confirmation)
  -s  Securely empty the trash (asks for confirmation)
  -y  Skips the confirmation prompt for -e and -s.
      CAUTION: Deletes permanently instantly.

  Options supported by `rm` are silently accepted.
```

aliasを作っておきます。
```zsh: .zshrc
alias rm='trash'
```

動作確認します。
```zsh
% source ~/.zshrc
% cd /tmp
% touch test
% rm test
```
ゴミ箱に移動されましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/3a18ce8a-48b0-939e-acf9-81ebb47c6a23.png)

他にも色々なオプションがあるので、helpメッセージを読んでみてください。
MySQLを初めて学ぶ２

データベースを操作していく！

・データベースの一覧表示
```terminal
mysql> show databases;
...
```
これでMySQLサーバー自身が管理のために使用しているデータベースが見れる
ちょっと間違って
![Screenshot 2023-03-31 at 16.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125804/fa73630f-25e4-e0d6-afbe-cd40f5d89671.png)
とセミコロンを忘れて変なところに行き着いてしまった。
調べてみると、quit;と入力すると大丈夫らしい。結果元に戻れた。なんか元に戻るのと気持ちが良い。

・データベースの作成
```terminal
mysql> create database ab01;
Query OK, 1 row affected (0.01sec)
```
と下のQuery OK...とエラーなしに出てきてたら無事に成功。ab01というファイルができた。

・データベースの削除
```terminal
mysql> create database ab01;
Query OK, 1 row affected (0.01sec)
```
で、ファイルを削除。ここではab01が削除

・データベースの切り替え
```terminal
mysql> use ab01;
database changed
mysql> select database();
```
use ab01でab01にデータベースを切り替え。select database();で操作対象中のデータベースを調べられる。

```terminal
mysql> use ab01;
```

さらにMySQLにログインするときにデフォルトとして設定するには
```terminal
manabo:~/ environment $ sudo mysql -u root ab01
```
を打つ。


次は作業用データベースを作成。上記ではrootユーザー。rootユーザーは何でもできちゃうのでちょっと危ない。そこでデータベース毎に作業用ユーザーを使う。
作業用ユーザーを作るにはまずrootユーザーでログイン
```terminal
manabo:~/ enviroment $ sudo mysql -u root
...

mysql> create user abuser01@localhost identified by 'xxx000';
...
mysql> grant all on ab01.* to abuser01@localhost;
mysql> exit
...
manabo:~/ enviroment $ mysql -u abuser01 -p
Enter Password:
...
```

上から二列目のcreate user~のところで作業用ユーザーを作る。localhostは利用者が現在操作しているコンピュータのこと
'xxx000'はパスワード
Query OK,と出てエラーが出ていなければ成功

grant all on ab01.* to abuser01@localhost;で
"abuser01"に対してデータベースab01の全てのテーブルに対する使用権限を付与。
そして
manabo:~/ enviroment $ mysql -u abuser01 -p
で、設定したパスワードを打ってログイン。-pはパスワードを入力するという意味
TCAについて自分なりに調べてみた

## はじめに
今までSwiftUIを使用してアプリを作る際、アーキテクチャには、情報量なども多いことから「MVVM」を採用していました。
しかし、ふと「本当にMVVMが最適なんだろうか？」と思いネットで調べた結果、どうやら「The Composable Architecture(TCA)」というものがいいらしいという情報を見つけたので調べることにしました。
今回は、その調べたことを忘れないようにメモします。

## The Composable Architecture(TCA)とは
The Composable Architecture(TCA)とは、Apple製品プラットフォーム上でのアプリ開発におけるシステムアーキテクチャをフレームワークのかたちで提供してくれるフレームワークです。

### TCAが提供する機能
+ State Management
シンプルな値型を使ってアプリケーションの状態を管理し、多くの画面で状態を共有することで、ある画面での変異を別の画面ですぐに確認できるようにする方法。
+ Composition
大きな機能を小さな部品に分解して、それぞれ独立したモジュールに抽出し、簡単に接着して機能を形成できるようにする方法。
+ Side Effects
アプリケーションの特定の部分を、可能な限りテスト可能で理解しやすい方法で外界と対話させる方法です。
+ Testing
アーキテクチャで構築された機能をテストするだけでなく、多くのパーツで構成された機能の統合テストを書いたり、副作用がアプリケーションに与える影響を理解するためにend-to-endテストを書いたりする方法です。これにより、ビジネスロジックが期待通りに動作していることを強く保証することができます。
+ Ergonomics
上記のすべてを、できるだけ概念や可動部の少ないシンプルなAPIで実現する方法。

※[READMEから参照](https://github.com/pointfreeco/swift-composable-architecture#what-is-the-composable-architecture)

### TCAの主な概念
+ State
アプリケーションの状態を表します。Stateは、Viewによって表示される情報を保持します。
+ Action
アプリケーションで実行される操作を表します。Actionは、View、Reducer、およびEffectから生成されます。
+ Reducer
Actionを受け取りStateを更新する役割があります。Reducerは、アプリケーションの状態の変更を管理します。
+ Effect
外部とのやり取りを表します。Effectは、非同期タスク、ネットワーク通信、またはデータの保存などの副作用を処理します。
+ Environment: 
アプリケーションの環境を表します。Environmentは、Effectの実行に必要な依存関係を提供します。また、プロパティラッパーの＠Environmentとは全くの別物です。

## TCAを使用するメリット
+ Reduxを使用していた人には使いやすい
+ 可読性があがる
+ テストがしやすい
+ アプリケーションの開発プロセスを簡素化し、品質の向上が期待できる
## TCAを使用するデメリット
+ 学習コストが高い
+ テストコードを書いたことが無いと理解が難しい
+ 関数型プログラミングの知識が必要
+ Combineの理解が必要

## 感想
TCAについて色々調べてみた結果、初学者には学習コストが高い上に個人での開発にはあまりメリットがなさそうな感じがしました。ですが、TCAを採用することでメリットもたくさんあると感じました。また、今回完全に理解することができなかったので、今後サンプルコードをいくつか作りTCAの理解を深めていきたいと感じました。

## 参考記事

https://qiita.com/yimajo/items/77c204ab091223f9cb14

https://zenn.dev/yimajo/articles/b0616243746eb0

https://qiita.com/zeero/items/b77cb689d9a707d94ac7
ruby オブジェクト指向の三代要素とは？

# 対象者

* ruby初心者.  

* オブジェクト指向とはなんぞやという方.  
# この記事を読んでわかること

* オブジェクト指向が使われているプログラミング言語、pythonやrubyがどういうプログラミング言語であるのかをざっくり理解できます. 

# 目次

1. オブジェクト指向の三代要素とは.  

1. 継承とは.  

1. カプセル化とは. 

1. ポリモーフィズムとは.  

#オブジェクト指向の三代要素とは.  

1. 継承. 
1. カプセル化. 
1. ポリフォーフィズム.  
この３つの特徴がオブジェクト指向にはあります。


# 継承とは.  
⇨あるクラスを丸々コピーし、新たなメソッドを追加したりメソッドの中身を変更したりする（オーバーライド）.  
メリット⇨重複を排除しメンテナンスがしやすくなる。

```
class Car
  def accele
    puts("アクセルを踏みました")
  end

  def brake
    puts("ブレーキを踏みました")
  end
end
```
↑例えば車クラスというのがあったとして、スポーツカーを作りたいとします。

```
class SportsCar
  def accele
    puts("アクセルを踏みました")
  end

  def brake
    puts("ブレーキを踏みました")
  end

  def openRoof
    puts("ルーフを開けました")
  end
end
```
このようにスポーツカーが作れますが、
  def openRoof
    puts("ルーフを開けました")
  end を追加しただけなのにCar クラスにも定義されているものも書かないといけなく記述量が増えます。
またcarクラスのacceleメソッドに何か変更があるとSportCarクラスも合わせて２箇所修正する必要がありメンテナンスがしにくいです. 
そこで継承するを使うとメンテナンス性が高まります。
```
class SportsCar < Car 

  def openRoof
    puts("ルーフを開けました")
  end
end
```
↑このようにすることで SportsCarとCar クラスの重複をなくせるのとCarクラスに何か変更があってもSportsCarクラスの初期値も一緒に変更できる。
```
class クラス名 < 継承したいクラス名
```

#カプセル化とは. 
⇨イメージはモノにカバーを１枚かぶせて中身を隠してしまうようなこと。外からインスタンス変数の中身を参照したり変更したりをできなくする.　要は関連するデータと振る舞いを1つの単位にまとめ、外部からのアクセスを制限すること.データ属性と振る舞いをクラスというデータにまとめる

```

class Human
 def initialize(name)
  @name = name 
 end 
 
 def greet 
  put "こんにちは"
 end 
end 

tanaka = Human.new（"田中"）
tanaka.@name こんな感じで参照できない
tanaka.name = "井上"　こんな風に変更もできない
```







#ポリモーフィズムとは. 
⇨類似したクラスに対するメッセージの送り方を共通にする仕組み. 

例えば　社長が部下（部長、マネージャー）を起立させるという状況と仮定して、
この時たとえ部長クラスの中身を変更しても
社長クラスで部長に起立させる時に呼び出し方（shain.standup）は変わらない.
もちろん部長クラスのインスタンス作成時はshain = Bucho.newとする必要がある。
![スクリーンショット 2023-04-03 22.31.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602256/b03cb698-771c-334d-477d-4dae51a0ea19.png)


メリット⇨メンテナンスがしやすい.  
例部長クラスの中身を変更するとき『この変更は社長クラスで呼び出す時に何か問題が起きないだろうか』と心配する必要がなくなる。
Education Data Architecture (EDA) 

Education Data Architecture(EDA) は、教育機関が Salesforce を標準で使用するのに役立つ
コミュニティ主導のデータアーキテクチャです。
Education Data Architecture (EDA) は、教育機関での CRM 構築の開始点を標準化します。
また、核となる共通のデータモデルを提供し、K-20 学生ジャーニー全体をサポートします。
これはオープンソースアーキテクチャであり、誰でも GitHub でソースコードを参照できま
す。一般的に受け入れられるように、顧客、パートナー、K-20 コミュニティとの密接なコ
ラボレーションにより開発されました。EDA 上に構築されたソリューションは、広範な使
用事例とエンドユーザカスタマイズに対応する、オープンで柔軟性がある拡張可能な同一の
フレームワークを共有します。EDA を使用すると、アーキテクチャに加えて、教育向けに調
整された設定済みのオブジェクト、ロジックと機能、オートメーションを標準で取得できま
す。
Salesforce Platform でサポートされる EDA フレームワークは、次のような部門で、機関全
体のデータおよびデータリレーションを管理するための基盤として機能することができま
す。
• 指導
• 同窓会およびアドバンスメント
• ビジネスイネーブルメント (住宅、IT ヘルプデスク、施設、セキュリティ)
• 教職員
• 財務
• マーケティング
• 募集および入学
• 教務

https://www.salesforce.com/content/dam/web/ja_jp/www/documents/org/eda-product-jp.pdf


# エラー

+ [取引先責任者追加時のエラーについて](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000OsPFn)

一旦設定を無効にするらしい
JAVA学習の記録⑧【コレクションフレームワーク】

前回までの学び[JAVA学習の記録⑦【ポリモーフィズム】](https://qiita.com/rion0726ittoti/items/a217da2646c448f331ac)

# 目次
１．コレクションフレームワークとは
２．Listインターフェース
３．ArrayListクラスのインスタンスを生成してList型の変数に代入する
４．ListインターフェースとArrayListクラスを使ってみる
５．Mapインターフェース
６．HashMapクラスのインスタンスを生成してMap型の変数に代入
７．MapインターフェースとHashMapクラスを使ってみる

## １．コレクションフレームワークとは
コレクションフレームワークとは、コレクション（オブジェクトの集合）を操作するために用意されたJava標準のAPIのこと。用途に応じて、リスト（List）、Set（セット）、Map（マップ）、Queue（キュー）といったインターフェイスを使い分けることができます。
本記事では、リスト（List）とMap（マップ）について記述します。

## ２．Listインターフェース
Listインターフェースは、順序を持った複数のデータを格納するもので、データにインデックスという番号を振って管理します。インターフェースなので単独では使うことはできません。ArrayListやLinkedListなどのクラスに実装されているので、それらのインスタンスを生成して利用します。

## ３．ArrayListクラスのインスタンスを生成してList型の変数に代入する
```java
List<String> list = new ArrayList<>();
```
```java
List<格納する要素の型> 変数名 = new ArrayList<>();
```
リストに格納する要素の型は、クラス型、インタフェース型しか指定できない。基本データ型（int,double,boolean）に対応するラッパークラス型（Integer,Double,Boolean）を指定します。

## ４．ListインターフェースとArrayListクラスを使ってみる
```java
import java.util.ArrayList; //①ArrayListクラスをインポート
import java.util.List;     //②Listインターフェースをインポート

public class ListSample {
  public static void main(String[] args) {
 List<String> petList = new ArrayList<>();  //③ArrayListクラスのインスタンスを生成
    
    petList.add("にゃんこ");    //④リストに要素を追加
    petList.add("わんこ");      
    petList.add("ハムスター");  
    
    System.out.println(petList.get(0)); //⑤リストから要素を取り出す
    System.out.println(petList.get(1));
    System.out.println(petList.get(2));
    }
}
```
出力結果
```
にゃんこ
わんこ
ハムスター
```
手順としては、
①ArrayListクラスをインポート
②Listインターフェースをインポート
③ArrayListクラスのインスタンスを生成
④リストに要素を追加（addメソッドを使う）
⑤リストから要素を取り出す

イメージとしてはこんな感じです
![2023-04-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3185982/c032d6b2-a602-0974-bc13-864dac787754.png)
※インデックスは０から始まり順番に番号が割り振られます。

## ５．Mapインターフェース
Map（マップ）は、キーと値の組み合わせで要素を管理します。キーは重複せず、順番をもちません。
マップを利用するには、MapインターフェースとHashMapクラスを利用します。

## ６．HashMapクラスのインスタンスを生成してMap型の変数に代入
```java
Map<String,Integer> animalMap = new HashMap<>(); 
```

```java
Map<キーの型,値の型> 変数名 = new HashMap<>();
```
## ７．MapインターフェースとHashMapクラスを使ってみる
```java
import java.util.HashMap; //①HashMapクラスをインポート
import java.util.Map;     //②Mapインターフェースをインポート

public class MapSample {
  public static void main(String[] args) {
    Map<String, Integer> animalsMap = new HashMap<>(); //③HashMapクラスのインスタンスを生成
  
    animalsMap.put("犬", 1);  //④マップに要素を追加
    animalsMap.put("猫", 2);
    animalsMap.put("猿", 3);
    
    
    System.out.println("犬:" + animalsMap.get("犬"));  //⑤マップから値を取り出す
    System.out.println("猫:" + animalsMap.get("猫"));
    System.out.println("猿:" + animalsMap.get("猿"));
  }
}
```
出力結果
```
犬:1
猫:2
猿:3
```
手順としては、
①HashMapクラスをインポート
②Mapインターフェースをインポート
③HashMapクラスのインスタンスを生成
④マップに要素を追加（putメソッドを使う）
⑤マップから値を取り出す
イメージとしては、こんな感じです。
![2023-04-04 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3185982/652b4831-d4af-a1ad-752e-7b74157a4065.png)



参考文献・サイト
「いちばんやさしいJAVAの教本」著者　石井真
https://java-code.jp/238
https://java-code.jp/232
【github】新規リポジトリ作成手順【SSHキー設定】

# github新規リポジトリ作成手順

githubの新規リポジトリ作成手順についての記事を備忘録として作成します。

## git

gitに関する初期設定から行ったのでその時のメモを書いています。

### gitインストール

macでターミナルを開き、ターミナルから`git --version`を実行。

コマンドラインツールのインストールをするか聞かれたのでインストールを実行。

コマンドラインインストール（１５分程度）が完了し、`git --version`を叩いたら無事使えるようになった。

```zsh
$ git --version
git version 2.39.2 (Apple Git-143)
```

### git config（ユーザー名・メールアドレス）

```zsh
# ユーザー名を設定
git config --global user.name "ユーザー名"
# メールアドレスを設定
git config --global user.email "メールアドレス"
```

確認

```zsh
git config user.name
atsuaa

git config user.email
xxxx@xxxx
```

## SSHキー

SSHキーの設定について書いています。（ここが一番キライ、、）

### sshキー作成

```zsh
cd ~
mkdir .ssh
cd .ssh

ssh-keygen -t ed25519 -C "GitHubに登録したメールアドレス"

# Enter a file in which to save the key: ファイル名を入力
# 今回の場合
# github と入力して
# 秘密鍵：github, 公開鍵：github.pub の２つが作成された

# パスフレーズを入力
# もう一度パスフレーズを入力

ls
# github github.pub
```

### ssh config作成

configファイルを作成する

```zsh
pwd
# ~/.ssh
touch config
ls
# config github github.pub
vim config
```

configファイルに以下の内容を書いて保存（vimじゃなくてもエディタとかでおけ）

```
Host github
    Hostname github.com
    User git
    IdentityFile ~/.ssh/github
```

### known_hosts

githubと疎通確認を行う際にknown_hostsに追加するか確認されるのでyesを選択してknown_hostsに追加する。

疎通確認コマンド
```zsh
ssh -T github              
# The authenticity of host 'github.com (20.27.177.113)' can't be established.
# ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/xxxxxxxxxxxxxxxxxxxx.
# This key is not known by any other names
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes [Enter]
```

## 公開鍵登録

githubにログインしたらプロフィールアイコンから[Settings]を選択。

![スクリーンショット 2023-04-04 10.57.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608177/d95b6b54-8327-bca4-a1b5-a3d5ddb5a1d0.png)

サイドメニューの[SSH and GPG keys]を選択し、[new SSH key]ボタンをクリック。

![スクリーンショット 2023-04-04 10.58.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608177/9f38203a-0386-4194-757b-f28a48a74d96.png)

[Title]は任意。
公開鍵を[Key]に貼り付ける。
公開鍵をクリップボードにコピーするコマンド。（ターミナル）
`pbcopy < ~/.ssh/github.pub`

![スクリーンショット 2023-04-04 11.00.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608177/f65efd64-f5ae-969c-3ad4-9ce8b5835179.png)

## リポジトリ作成

リポジトリ作成については割愛します。

## git clone から git push まで

作成したリポジトリをg`it clone`し、テストファイルをコミット、`git push`したら無事pushされていることを確認。

# 参考

https://prog-8.com/docs/git-env

https://ormcat.net/blog/20210509_github-denied-publickey/

https://tech-blog.rakus.co.jp/entry/20210512/ssh
2023年4月 AIOps 定点観測

# 概要
AIOps の動向や学習のため、Google で AIOps を検索した結果を記録している記事です。

# 2023年4月4日の検索結果 (リスティング広告)

![20230403_AIOps_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/3f6d08b5-eedd-4b45-f86b-672223ab93b9.png)

* IBM
* Splunk
* Pure Storage

Google の表示が「広告」から「スポンサー」に変わったようですね。
今月は IBM がトップで Splunk、Pure Storage が続いています。

先月の結果はこちら --> [2023年3月 AIOps 定点観測](https://qiita.com/mkodera/items/9e5e3e007fa4b50afea9)

# 2023年4月4日の検索結果 (広告以外)

![20230403_AIOps_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/d8061580-3230-683c-09ea-f8afd0c9c71e.png)
![20230403_AIOps_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/b813c48a-96db-e017-2829-d8a7034039ed.png)

* HPE
* Splunk
* ServiceNow
* ITmedia
* intra-mart (NTTデータ イントラマート)
* JBSVC (JBサービス)

広告以外では HPE が強調スニペットでトップに表示されています。 その後に Splunk、ServiceNow が続いています。

先月の結果はこちら --> [2023年3月 AIOps 定点観測](https://qiita.com/mkodera/items/9e5e3e007fa4b50afea9)
ZoomとSalesforce

+ [PardotフォームとZOOM連携実行時に、サンクスページにリダイレクトできません。](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDdwt)

:::note
下記ページに詳細が記載されています。

https://allmeetinghelp.com/how-to-use-zoom-webinar-for-pardot/
フォームを pardot ランディング ページまたは iFrame に埋め込む場合は、 ***target=“_parent”*** を追加します。

```
<form action="your post url" method="POST" name="hidden_form" target="_parent">
```
:::

+ [フローによる Zoom Phone ケースの作成](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgInP)

Zoom と Salesforce の統合が意図したとおりに機能しませんでした。そのため、どこにもたどり着けず、フローを介したカスタム ソリューションを検討していました。(そして、各組織のサポートはお互いを向いていました。) 最後に、両方のサポート チームと協力した結果、最新バージョンにアップグレードし、アップグレードされたバージョンで OAuth 経由で Zoom に接続し、CTI アダプターを確認する必要があることがわかりました。 URL が正しいことを確認し、ケースに関連するすべてのレコード トリガー フローが停止されていることを確認します。その後、統合は最終的に在庫画面フローで機能しました。
Open Liberty / WebSphere Liberty最新情報：2022年12月〜2023年2月

この記事は[WebSphere 25周年， DB2/MQ30周年 アニバーサリー記念 Qiita記事投稿キャンペーン](https://community.ibm.com/community/user/wasdevops/blogs/kaori-asada/2023/03/16/qiita?CommunityKey=d6c93aa2-6e10-48da-96dc-3831da8ee185)の参加記事です。

Open Libertyおよび製品版のWebSphere Libertyについて，2022年12月にリリースされた22.0.0.12から2023年2月の23.0.0.2までで追加された新機能について紹介します。また，これ以外にも多くのバグやCVE脆弱性が修正されています。

# ライセンス

## EPLv2への移行

従来，Open Libertyは[EPLv1（Eclipse Public License version 1.0）](https://www.eclipse.org/legal/epl-v10.html)で提供されていましたが，2023年1月にリリースされた23.0.0.1から[EPLv2（Eclipse Public License version 2.0）](https://www.eclipse.org/legal/epl-v20.html)に変更されました。Eclipse [Foundationでの仕様策定手順（EFSP）](https://www.eclipse.org/projects/efsp/)に対応するためです。EFSPでは，新しい仕様をリリースするにあたって，一つないし複数のCompatible Implementationを含みますが，このCompatible Implementationの必要条件のひとつとしてEPLv2（もしくはEclipse Distribution LicenseかApache License 2）が要求されているためです。

# API

## MicroProfile 6.0対応

2022年12月にリリースされたMicroProfile 6.0に，1月にリリースされた23.0.0.1で対応しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/28ecbda6-d9d9-cb4f-7ec9-8b389c9b8c56.png)

今回から，Jakarta EE仕様と共通の仕様群が，[Jakarta EE Core Profile](https://jakarta.ee/specifications/coreprofile/)として定義されるようになりました。MicroProfile 6.0の更新内容の詳細については，[こちらの資料](https://docs.google.com/presentation/d/1GZ1WbGLsX29penO1uVoOwGlIP1IxEzJM/edit?usp=sharing&ouid=100525125446674392553&rtpof=true&sd=true)を参照ください。

# Core Runtime

## FFDCファイルの最大数の設定

FFDC（First Failure Data Capture）は問題判別のためのLibertyの機能です。Libertyランタイムの内部で意図しないエラーが発生した場合，問題判別に利用するため関連する内部コンポーネントが保持している情報をファイルに記録しておく機能です。

FFDCによって生成される情報はサーバー出力ディレクトリのlogs/ffdcディレクトリにイベントごとにファイルとして保存されますが，このファイルの数がしばしば非常に多くなることがあります。従来のLibertyでは，FFDCファイルは500に制限されており，これを超えると自動的に古いものから削除されていましたが，この最大数を構成により変更することなどはできませんでした。

2022年12月にリリースされた22.0.0.13から，FFDCを保持する期間を指定できるようになりました。サーバー構成ファイルの`logging`要素の`maxFfdcAge`属性を指定することで，一定時間以上経過したFFDCファイルを自動的に削除するように構成できるようになりました。以下のように構成すると2日以上たったFFDCファイルは自動的に削除されるようになります。

```xml
<server>
    <logging maxFfdcAge="2d" />
</server>
```

## Admin CenterおよびRESTクライアントからのDBテスト接続

2023年2月にリリースされた23.0.0.2から，Libertyで定義されたDBなどへのテスト接続の機能が提供されるようになりました。接続に必要な情報が正しく定義されているかをアプリケーションを実行することなく確認できます。これは，従来型のWebSphereであるWAS V9.0 Traditionalランタイムの管理コンソールで提供されていた機能と同等のものとなります。

詳細な構成方法や，実際のテストの実施方法については，[Open Libery Blog](https://www.openliberty.io/blog/2019/09/13/testing-database-connections-REST-APIs.html)を参照ください。

## サーバー停止時のタイムアウト時間の指定

Libertyでは，`server stop`コマンドでサーバーの停止を要求したときに，サーバーで実行中の処理が残っていると，30秒間処理の完了を待ちます。30秒のタイムアウト時間が経過しても処理が完了しないとサーバーの強制停止が行われます。

2023年2月にリリースされた23.0.0.2から，この処理の完了を待つまでの時間を，停止コマンドの引数で指定できるようになりました。処理完了まで最大で2分30秒待機させるには，以下のようにオプションを指定します。

```shell_session
$ ./server stop --timeout=2m30s
```

以下のように単位をつけずに数値を指定した場合には，秒数として解釈されます。以下の例では，最大3分間（180秒間）待機します。

```shell_session
$ ./server stop --timeout=180
```
RubyでAtCoder ABC290(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC290のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A - Contest Result
https://atcoder.jp/contests/abc290/tasks/abc290_a
```diff_ruby:a-290.rb
n, m = gets.split(" ")
a = gets.split.map(&:to_i)
b = gets.split.map(&:to_i)

- ans = 0
- b.each{|i| ans += a[i - 1]}
- puts ans

# 修正１
- puts b.sum{|i| i = a[i - 1]}
# 修正２
+ puts b.sum{|i| a[i - 1]}
```
## 解説
N, Mともに100以下と小さいので、問題文の通りに実装すれば十分間に合います。

# B - Qual B
https://atcoder.jp/contests/abc290/tasks/abc290_b
```ruby:b-290.rb
# 修正前
n, k = gets.split.map(&:to_i)
s = gets.chomp.chars

array = Array.new(n, false)
count = 0
s.each_with_index do|factor, index|
    if factor == "o"
        array[index] = "o"
        count += 1
        break if count == k
    end
end
puts array.join.gsub(/false/, "x")
```
```ruby:b-290.rb
# 修正後
n, k = gets.split.map(&:to_i)
s = gets.chomp.chars

ans = "x" * n
count = 0
s.each_with_index do|factor, index|
    if factor == "o"
        ans[index] = "o"
        count += 1
        break if count == k
    end
end
puts ans
```
<追記>
コメントでいただいた別解になります。順にindexを更新していき最後に"x"となる部分を連結しています。
```ruby:別解1
n, k = gets.split.map(&:to_i)
str = gets.chomp

index = 0
k.times do
  index = str.index("o", index) + 1
end

puts str[0, index] + "x" * (str.length - index)
```
```ruby:別解2
n, k = gets.split.map(&:to_i)
s = gets.chomp

i = 1
puts s.each_char.map {|c|
  if c == "o" && i <= k
    i += 1
    "o"
  else
    "x"
  end
}.join
```
## 解説
まず、N個の`x`からなる文字列を用意します。そして、参加を希望する人数がKに達するまで先頭から順に調べていき、参加を希望する場合はそこに対応する要素を`o`に置き換えています。最後に、最終的な結果を出力すればOKです。

メモ
・indexの第２引数：第２引数の値のindexから調べることができる。

# C - Max MEX
https://atcoder.jp/contests/abc290/tasks/abc290_c
```diff_ruby:c-290.rb
n, k = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).uniq.sort[0..k - 1]
# [0..k-1]の部分は、[0...k][0,k]でも可能です。

- if a[0] != 0
-   puts 0
-   exit
- end

+ a.unshift(-1)

a.each_cons(2).each do|i, j|
    if j != i + 1
        puts i + 1
        exit
    end
end
puts a[-1] + 1
```
## 解説
まず、与えられた配列の重複を取り除きソートした後、先頭からK個取り出しています。また、先頭が0でない場合は答えは０となるので、aの先頭に-1を入れることでコードをまとめています。そして、each_consメソッドを使って隣り合う要素が条件を満たすかどうか判定を行うことで答えが求まります。

余談
昨日教えていただいたeach_consメソッドが早速使えました！

# 終わりに
今回の問題は、比較的簡単であったように感じました。また、コメントで教えていただいたメソッドのおかげでスムーズに実装することができました！

次回は、AtCoder ABC289を解いていきたいと思います。

https://qiita.com/shoya15/items/50fd17e37d7c64f2b166
rex0220 計算式プラグイン 追加項目の初期値設定

kintone アプリで、項目を追加した場合に既存レコードの追加項目はブランクになっています。
[計算式プラグイン](https://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)を使って、追加した項目の初期値設定を行うことができます。

# 概要

項目の追加後と、初期値設定後の比較
![2023-04-04_09h35_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/10944889-a45e-f265-d365-fdbe8c793d3a.png)

追加項目：　件数（計算項目）とテーブルの数値（数値項目、初期値1）
![2023-04-04_09h59_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/ee8fbc03-678a-539d-d9c6-e1861784404f.png)

# 計算式プラグインの設定

追加した「数値」項目の計算式に「1」を指定
![2023-04-04_09h31_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/dbe10a67-c188-e196-fccd-d32226f40b70.png)

# 既存レコードを変更

「既存レコードを変更」ボタンをクリックすると、確認用ダイアログが表示され、「更新」ボタンクリックで更新されます。

- 計算項目で指定された「数値」が更新されることで、計算項目も更新されます。

![2023-04-04_09h35_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c8b3f776-dabe-68a8-bd0a-cfb5cde93590.png)
Goでの書式付き出力

`%s`を使う
```go
package main

import "fmt"

func main() {

    weather := "晴れ"
    fmt.Printf("今日の天気は%sです", weather) // 出力結果：今日の天気は晴れです
}
```

整数の場合は`%d`を使う
```go
package main

import "fmt"

func main() {
    month := 6
    day := 19
    
    fmt.Printf("今日は、%d月%d日です", month, day)
    
}
```