OmniAICreator/Qiita-1.07M huggingface dataset:
Easy-ISLispでベンチマークテスト（４）

# はじめに
Easy-ISLispはこの度ver3.0の大台に乗ります。細々と改良を繰り返してきました。さて、どの程度、性能が向上したものでしょうか？
https://github.com/sasagawa888/eisl

# ベンチマーク
OpenLispの作者のJulienさんが公開しているものです。

# 結果
2秒台を切りました。Openlispが1.6秒程度です。かなり世界水準に近づきました。

```
Test 01: Fib     -> ok, time =   00000s.
Test 02: Tak     -> ok, time =   00000s.
Test 03: Stak    -> 12, time =   00000s.
Test 04: Ctak    -> ok, time =   00000s.
Test 05: Takl    -> ok, time =   00000s.
Test 06: Takr    -> ok, time =   00000s.
Test 07: Boyer   -> T, time =   0.03125s.
Test 08: Browse  -> ok, time =   0.125s.
Test 09: Destru  -> ok, time =   0.015625s.
Test 10: Travini -> ok, time =   0.03125s.
Test 11: Travrun -> ok, time =   0.250s.
Test 12: Deriv   -> ok, time =   00000s.
Test 13: Dderiv  -> ok, time =   0.015625s.
Test 14: Divit   -> ok, time =   00000s.
Test 15: Divrec  -> ok, time =   00000s.
Test 16: FFT     -> ok, time =   0.046875s.
Test 17: Puzzle  -> ok, time =   0.078125s.
Test 18: Triang  -> ok, time =   1.34375s.
Test 19: Fprint  -> ok, time =   00000s.
Test 20: Fread   -> ok, time =   00000s.
Test 21: Tprint  -> ok, time =   00000s.
Test 22: Frpoly  -> ok, time =   0.03125s.

Total   1.96875s.
```
SeleniumのChromeバージョンアップ時のエラーを回避する（Chrome for Testingの使い方）

# SeleniumBasicでのChrome for Testingを実行する方法

1.　Chrome for Testing をダウンロードする
下記URLから、使いたいバージョンのChromeをダウンロードする

https://googlechromelabs.github.io/chrome-for-testing/#stable

2.　ZIPファイルなので、下記フォルダに解凍する
フォルダ名は「testing」にしました。※Chromeのフォルダ内
C:\Program Files\Google\Chrome\testing

3.　VBAスクリプト上でドライバーの開始前にSetBinaryメソッドを追加。引数にtestingフォルダ内のChromeの実行ファイルを指定する
```vb
Dim driver As New Selenium.ChromeDriver
' この一文↓を追加
driver.SetBinary "C:\Program Files\Google\Chrome\testing\chrome.exe"
driver.Start
driver.Get "https://www.google.com/?hl=ja"    
```

4.　Chromeが起動すると下記のように「自動テスト専用です。」という文言が追加される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119135/12d56e0b-ffc6-df8e-8e24-c400ad7f18dc.png)


# 背景

2023年6月12日にGoogleはブラウザー自動化に特化した「Chrome for Testing」を発表しました。

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

これを使えば、バージョン違いのエラー※が回避できると思い、使う方法を調べました。

※実行時エラー33
SessionNotCreatedError
This version of chromeDriver only supports Chrome Version

# 補足

ユーザーのPCにSeleniumBasicをインストールしても、必ずと言っていいほどバージョン違いのエラーが発生して、バージョンの確認方法と更新方法を伝えてもできなくて、結局自分でやっていた作業が解消しそうです。
社内の人に提供するのが中心でしたが、社外の人でも最初のインストールからChrome for Testingでやれば、提供することできそうですね。

ドキュメントだと下記のような記載ですね。PythonやJava等の言語でも可能ですね。

> WebDriver.SetBinary Method  
> Set the path to the browser executable to use 

※翻訳)使用するブラウザ実行可能ファイルへのパスを設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119135/e0f1d690-336f-91e1-3371-12962212661c.png)


# Seleniumについて（記事リンク）

- 概要

https://qiita.com/Rui010/items/84e31fb99d00bab8b596

- インストール方法

https://qiita.com/Rui010/items/0a226c26fe44e56c9c39
Java Silver SE 11に出てくるコマンドをまとめたい

# 前置き
五日後に試験を控えた状況で、コマンド系がなかなか覚えられない。
なのでQiitaでまとめて書いてみることで覚えたいと思います。
網羅できてる保証とかはないので、参考程度にどうぞ。

# 実行 ( java )
```java.cmd
java Sample
```
コンパイルされた`.class`ファイルを実行する。

```java.cmd
java Sample.java
```
コンパイルなしで`.java`ファイルを実行できる。
この時、メモリ空間にクラスファイルが生成されている。
(Java 11から導入されたソースファイルモード)

```java.cmd
java Sample.java arg0 arg1 arg2...
```
ファイル名以降に書いた文字列は起動パラメータとして、`main(String[] args)`の引数部分に文字列の配列として入力される。

#### -classpathオプション ( -cp )
```--classpath.cmd
java -classpath ディレクトリ Sample.java
java -cp ディレクトリ Sample.java
```
javaでの実行はカレントディレクトリでのファイルが対象となるが、
`--classpath`でディレクトリを指定すると、そのディレクトリ内のファイルを対象とする。
上記の例ではディレクトリの`Sample.java`を実行する。
`javac`コマンドでも同様に指定ができる。

#### --sourceオプション
```--source.cmd
java --source バージョン ファイル名
```
`.java`拡張子のついていないファイルをソースファイルモードで実行する。
数字部分でjavaのバージョンを指定。

## コンパイル ( javac )
```javac.cmd
javac Sample.java
```
.java拡張子のついたファイルをコンパイルする。
同じディレクトリに`.class`ファイルが生成される。

#### -dオプション
```-d.cmd
javac -d dir1 Sample.java
```
簡単に言うと指定したディレクトリにクラスファイルが格納される。
指定したディレクトリがファイルのパッケージのルートディレクトリとなる。

# モジュールシステム
```--list-modules.cmd
java --list-modules
```
モジュール名が一覧表示される。

```--describe-module.cmd
java --module-path モジュールのディレクトリ --describe-module モジュール
```
モジュールの情報を確認する。
モジュール名、格納場所、`requires`と`exports`、含まれるパッケージといった情報が表示。

```jdeps.cmd
jdeps クラスファイルまたはJARファイル
```
依存関係を確認する。
依存するモジュール名や必要なパッケージ名が表示される。
dependencesが語源？

#### モジュールの実行
```module.cmd
java --module-path モジュールのルートディレクトリ --module 実行するクラス
java -p モジュールのルートディレクトリ -m 実行するモジュールのクラス
```
`--module-path`で指定したモジュールの、`--module`で指定したクラスを実行する。
クラスファイルの指定は完全修飾名でする必要がある点に注意。

```--show-module-resolution.cmd
java --show-module-resolution -p モジュールのルートディレクトリ -m 実行するモジュールのクラス
```
モジュール解決をした後、モジュールが実行される。

#### --add-exportsオプション
```--add-exports.cmd
--add-exports 参照側モジュール名/パッケージ名=利用側モジュール名
```
参照側モジュールが`exports`されてないときに、強制的に`exports`するオプション。
セキュリティ的には良くない。

# 後書き
こうみると意外と少ないコマンド集。こう書き出してみると覚えられそうな気がしてきました。
誤選択肢や実務では`jar`とか`jmod`とかあるみたいですが、多分試験には出ないでしょう。
なんかJavaSilverの受験料が37000円に爆上がりしてたので、一発合格目指して頑張りましょう。
Android Notification

Manifest.permission.POST_NOTIFICATIONSが必要になりました。

```kotlin
private fun showNotification() {
        // 通知をタップしたら、SubActivityを表示するためのintent
        val intent = Intent(this, SubActivity::class.java).apply {
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        }
        val pendingIntent: PendingIntent = PendingIntent.getActivity(
            this,
            0,
            intent,
            PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
        )

        val builder = NotificationCompat.Builder(this, "channelId")
            .setSmallIcon(R.drawable.ic_launcher_background)
            .setContentTitle("タイトル")
            .setContentText("テキスト")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)

        val nm = NotificationManagerCompat.from(this)
        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.POST_NOTIFICATIONS
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            return
        }

        nm.notify(0, builder.build())
```

https://www.vector.co.jp/soft/screen/win95/game/se394828.html
Ubuntuが急に起動しなくなった場合の対処一例

```sh
Linux 用 windows サブシステム インスタンスが強制終了されました
```

上記のメッセージが表示されて、Ubuntuを起動できなくなってしまった時
まずは Windowsの設定 > アプリ > Ubuntu > リセット にある、「修復」を試しましょう

わたしの場合は今回修復を実行した後に再度Ubuntuを開くと、正常に戻りました！
kintoneのアプリ間連携のTips

# はじめに

kintoneアプリを開発していて、アプリ間の連携で「これできるの？できないの？」的なことを調査したので、結果を簡単にまとめます。

# 異なるスペースのアプリ間でルックアップ参照できるのか？（できます）
部門ごとにkintoneのスペースを分けて、ユーザには所属している各部門のアプリだけ表示しているが、社内業務で使用するマスタデータアプリは共通スペースで一元管理にして、各部門のスペースから参照できるようにしたいといった場合を想定しています。
結論としては、参照側アプリを配置している各部門スペースのユーザを共通スペースに登録すれば、共通スペースのマスタデータアプリを参照可能です。

■部門スペースの参加メンバー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/31c95d0c-6bfe-8885-20e4-83eac4d26449.png)
■共通スペースの参加メンバー（部門スペースと同じユーザを参加させる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/d633efa0-1242-0187-d85a-78c98647bce3.png)

■共通スペースの店舗マスタ（マスタデータアプリ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/45538956-12f4-77a2-6918-5cc9f8248479.png)
■部門スペースの問い合わせ管理（参照側アプリ）
・ルックアップ項目（店番号）の参照設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/49e941db-d662-41bc-9e3d-8fd5d461d3e3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/a893bb88-7c70-434e-8447-e80ea4f1be75.png)
・ルックアップ参照の動作
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/7f5e8218-6f20-ab6e-2a64-d4f0e26f97d6.png)

# APIトークン認証（外部API呼び出し）でのレコード更新時、ルックアップ項目は更新できるのか？（できません）

レコード更新時にルックアップ項目を更新すると、関連付けられたコピー項目も更新されるので参照先のマスタデータアプリの値更新をRESTAPIを使用して反映する場合などに便利です。

今回のケースでは、マスタデータアプリの保守担当に、トランザクションアプリへの権限を与えたくない場合に、トランザクションアプリ（参照元）で発行したAPIトークン認証で外部API呼び出しを使用して、マスタデータアプリ（参照先）の更新内容を反映したかったのですが、結果としてはできませんでした。
APIトークンは、kintoneアプリ単位で発行されるため、ルックアップ項目の参照先アプリへのアクセス権が無く、参照先からの値取得ができないためエラーになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/de402ee4-9e06-01fe-aaf4-a34a21c5da2d.png)




## （補足）
kintoneのルックアップ項目は、項目自体に値を持っていて参照先のアプリで参照項目の値が変更されても反映されません。一方で画面上でルックアップ項目の「取得」押下時のダイアログでの選択や、RESTAPIによるルックアップ項目の更新時は、参照先アプリから値を取得して項目値を格納します。

REST APIでのルックアップ項目更新時は、実行時（kintoneアプリ操作時）のログインユーザの権限に依存するため、参照先アプリへのアクセス権を持つユーザでログインしていれば問題なく更新されます。

# おわりに
今回の内容は、kintoneをある程度の期間運用し、アプリの追加や利用部門の拡大を進めていくようになってから向き合うことになる問題ですが、将来的に複数部門での運用や多数のアプリ連携を想定されるのであれば、導入時点で検討しておいた方が良い課題かと思います。
DBに接続しているコネクションの接続元を調べる。

仕事上でコネクションの調査をした時のメモ


以下のようなSQLで調べられる。。今まで知らなかった。

```
SELECT * FROM information_schema.PROCESSLIST where host = 'localhost';
+-----------+----------+-----------+------+---------+------+-----------+-----------------------------------------------------------------------+
| ID        | USER     | HOST      | DB   | COMMAND | TIME | STATE     | INFO                                                                  |
+-----------+----------+-----------+------+---------+------+-----------+-----------------------------------------------------------------------+
| 168731364 | user | localhost | hoge | Query   |    0 | executing | SELECT * FROM information_schema.PROCESSLIST where host = 'localhost' |
+-----------+----------+-----------+------+---------+------+-----------+-----------------------------------------------------------------------+
1 row in set (0.01 sec)

```

``show processlist``コマンドでも調べられるが、絞り込めないので、上記の方が便利
php laravelをdockerで立てるとdbに接続できない

## はじめに
今回とあるハッカソンに出るにあたって`php`を用いた`APIサーバー`が必要になった。
それの構築中に起きた問題である。


## 環境構築
まずは`composer`をインストール

`brew install composer`

次に`composer`を用いて`laravel`の雛形を作成する

`composer create-project laravel/laravel --prefer-dist hoge`

これで`hoge`ディレクトリ配下に雛形が作成される。

次に`hoge`ディレクトリ配下の`.env`ファイルを編集してデータベース接続の設定をする。

```hoge/.env
~~~~~
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=test
DB_USERNAME=user
DB_PASSWORD=password
~~~
```


## 実行
これで`hoge`ディレクトリ配下で
`php artisan serve`
するとサーバーが起動する。
この時点でデータベースは`ポート番号:5432`で起動しており、テストデータが入っていることも`adminer`により確認できている

また
`curl localhost:8000/api/users`
でユーザー一覧が取得できるように実装済みで、データが取得できることも確認できた。



## 問題
今回api開発するにあたって`docker`を使う必要が出てきた。
てことで以下のように`Dockerfile`と`docker-compose.yml`を追加した

```dockerfile:hoge/Dockerfile
FROM bitnami/laravel
RUN mkdir -p /app
COPY . /app
WORKDIR /app


CMD [ "php", "artisan", "serve","--host=0.0.0.0" ]
```

```yml:docker-compose.yml
#====================
    db:
        container_name: mosa-db
        image: postgres:14
        volumes:
          - dbdata:/var/lib/postgresql/data/
          - ./db/init:/docker-entrypoint-initdb.d
        env_file:
          - .env
        ports:
          - "5432:5432"
    hoge:
        build:
            context: ./hoge
            dockerfile: Dockerfile
        container_name: hoge-php
        ports:
          - '50000:8000'
        volumes:
          - ./hoge:/app
#====================
```

以下コマンドを実行することで起動できる
`docker compose up --build hoge db`

起動が確認できたので以下コマンドを実行
`curl localhost:8000/api/users`


が、しかしなっがいエラー文が返されたので
`curl localhost:8000/api/users > hoge.html`


`hoge.html`の中身
![スクリーンショット 2023-06-13 13.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3230849/f1c622f4-90e6-dd2e-833c-b77b6fdf0d9d.png)


データベースに接続できていない

`docker`的な問題かと思い、接続文字列をクラウドデータベースに変更してもエラーの内容は変わらなかった


現在解決方法を模索中
分かり次第追記します。

また同じような事例があって解決方法がわかる方がいらっしゃれば教えていただければ幸いです。


## 追記
こちら結果といたしまして、dockerのネットワークの問題であると推測されました。
解決方法としては

[ローカルから踏み台経由で外部DBにアクセスする](https://qiita.com/kter/items/b55f208eeeafab488e8e)

こちらが考えられます。

今回作るプロダクトにはそってないと考えた結果、dockerの使用をやめ、vps上に環境を構築しました。
最大・最小（置き換え）「2023群馬大学【４】」をWolframAlphaとsympyでやってみた。

xyグラフがでます。

オリジナル

http://kamelink.com/blog/2023/06/10/3-5-23-gunmadai-rikou-zyouhou-4/

上と同じです。大学入試数学問題集成＞【４】　テキスト

https://mathexamtest.web.fc2.com/2023/202310201/2023102010100mj.html#top-0104

# WolframAlphaで
**0<=t<=2pi** のグラフが出ます

https://www.wolframalpha.com/input?i=x%3Dcos%28t%29%2Bsin%28t%29+%2Cy%3Dcos%282*t-pi%2F2%29-cos%28t-pi%2F4%29&lang=ja

https://www.wolframalpha.com/input?i=0%3C%3Dt%3C%3Dpi%2Cx%3Dcos%28t%29%2Bsin%28t%29+%2Cy%3Dcos%282*t-pi%2F2%29-cos%28t-pi%2F4%29&lang=ja


# sympyで(数学入試問題 様のやり方で)
勉強中

# sympyでminimum,maximum関数を使って)
```python
from sympy import *
from sympy import symbols, cos, sin
from sympy.plotting import plot3d_parametric_line
x,y=symbols('x,y',real=True,positive=True)
t,f=symbols('t f',real=True,positive=True)
(st,en)=(0,pi)
myX=Eq(x,cos(t)       +sin(t)     )
myY=Eq(y,cos(2*t-pi/2)-cos(t-pi/4))
print("#(1)",minimum(myX.rhs,t,Interval(st,en)),maximum(myX.rhs,t,Interval(st,en)))
print("#(2)",myY.rhs.subs({t:solve(myX,t)[1]}).simplify())
print("#(3)",sqrtdenest( minimum(myY.rhs,t,Interval(st,en)).simplify()).simplify(),
                         maximum(myY.rhs,t,Interval(st,en)).simplify()            )
plot           ( myX.rhs         ,(t,st,en))
plot           ( myY.rhs         ,(t,st,en))
plot_parametric((myX.rhs,myY.rhs),(t,st,en))
#(1) -1 sqrt(2)
#(2) x**2 - sqrt(2)*x/2 - 1
#(3) -9/8 sqrt(2)/2
```
plotコマンドは、縦横比が異なります。
点プロットの勉強中。

**θ-xのグラフ** -1≦x≦sqrt(2)
![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/ff5a5f12-9a26-8945-5493-eb12ea3052a7.png)

**θ-ｙのグラフ** -9/8≦y≦sqrt(2)/2
![1Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/222a9e76-7d95-e928-5aa1-a392acb530ab.png)

# x-ｙのグラフ
plotコマンドは、縦横比が異なります。
**x-ｙのグラフ** -1≦x≦sqrt(2),-9/8≦y≦sqrt(2)/2
![2Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/9b1e3ede-7798-8fbd-2eec-af927ccdec4d.png)

# 参考

https://kamelink.com/exam/index.php?%BF%F4%B3%D8II%A1%A6B%A5%C1%A5%A7%A5%C3%A5%AF%A1%F5%A5%EA%A5%D4%A1%BC%A5%C8%A1%A1%C2%E83%BE%CF%A1%A1%A1%F82%CA%FD%C4%F8%BC%B0%A1%A6%C9%D4%C5%F9%BC%B0%A1%A4%BA%C7%C2%E7%A1%A6%BA%C7%BE%AE%A1%A15.%BA%C7%C2%E7%A1%A6%BA%C7%BE%AE%A1%CA%C3%D6%A4%AD%B4%B9%A4%A8%A1%CB

https://qiita.com/mrrclb48z/items/cbf9dbe70d11b6b573ad

def sqrtdenest(expr, max_iter=3):

http://man.hubwiz.com/docset/SymPy.docset/Contents/Resources/Documents/_modules/sympy/simplify/sqrtdenest.html#:~:text=a1%0A%20%20%20%20return%20a-,%5Bdocs%5D,-def%20sqrtdenest(

https://qiita.com/WolfMoon/items/ad6b23cc72b5b340f27c


以下、いつもの?おすすめです。

https://qiita.com/mrrclb48z/items/75904cdc6e84ecef4d03#%E5%8F%82%E8%80%83wolframalpha-%E9%96%8B%E7%99%BA%E7%89%A9%E8%AA%9E
【Python】os、timeモジュール、sysライブラリについて

# はじめに

今回はos、timeモジュールとsysライブラリについて簡単に調べました。
基本的な使い方を載せていますが、簡単にしか書いていないで、詳しくはマニュアルなどを参考にしてください。

# osモジュールとは

OSに依存しているさまざまな機能を利用するためのモジュールです。
Pythonのコード上でosに関する操作を実現します。

ファイル操作が可能で、ファイルの一覧表示、パスの取得、新規ファイルの作成などが行えます。

# osの主要メソッド

osモジュールの主要メソッドについて見ていきます。


## os.walk()

ファイル一覧を取得します。
引数でファイル名を指定することで、ファイルや特定の拡張子の一覧、ファイルのパスなどを取得できます。

## os.system()

UnixコマンドをPythonで記述します。
よって、「ls」などが使用できるようになります。

別の方法としてsubprocessがあるようです。

https://www.sejuku.net/blog/65485

## os.listdir()

ファイルやディレクトリの一覧を確認できます。
引数に取得したディレクトリのパスを指定して使います。


## os.path()
ファイルやディレクトリの存在確認、指定したパスのファイル名の取得、パスやファイル名の結合などができます。

以下は、os.path()でよく使われるメソッドです。

|メソッド|何をするか|
| --- | --- |
|exists()| ファイル及びディレクトリの存在確認。戻り値はBool型|
|isdir()|ディレクトリの存在確認。戻り値はBool型|
|isfile()|ファイルの存在確認。戻り値はBool型|
|basename()|指定されたパスのファイル名を返す|
|join()|パスとファイル名などを結合させる|

## os.environ()

環境変数を取得、書き込み・上書きをする際に使用します。

## os.mkdir()

簡単にディレクトリを作成できます。

## os.rename()

ファイル名を指定した名称に変更できます。

## os.remove()

ファイルを削除します。

# timeモジュールとは

プログラム内で現在時刻の確認、処理の一時停止などを行うモジュールです。

ナノ秒まで時間を確認できます。

## datetimeモジュールとの違い

Pythonにはdatetimeという別の時間を扱うモジュールが用意されています。

datetime→カレンダーなど、日付や曜日を扱う
time→実行時間の計測

## 基本的な使い方

### タイムスタンプ形式で現在時刻の取得

```py:
print(time.time())
```

## 時間をわかりやすく表示する関数

### strftime()

タイムスタンプを好みを形式で表示します。

```py:
time.strftime('%Y/%m/%d %H:&M:%S')
```

### strptime()

日時などの文字列値を時間型に変換します。
時間型で扱うことで、日付計算が楽になります。
第一引数に文字列の日付、第二引数に時間型を記述してください。

```py:
time.strptime("05 Feb 2022", "%d %b %Y")
```

# sysライブラリとは

Pythonのインタプリンタや実行環境に関する情報を扱うためのライブラリです。
使用しているプラットフォームを調べたり、スクリプトの起動パラメータを取得できます。

## 基本的な使い方

### sys.version()

使用しているPythonのバージョンを文字列型で出力します。

```
sys.version
```

### sys.platform

スクリプトを実行したOSを表示します。

```
sys.platform
```

### sys.exit

例外を発生させます。

```
sys.exit
```





# 参考記事

osについて

https://www.sejuku.net/blog/67787

https://magazine.techacademy.jp/magazine/47498

timeについて

https://camp.trainocate.co.jp/magazine/python-time/

sysについて

https://docs.python.org/ja/3/library/sys.html
Swiftで解くAtCoder（ABC305）

# 1.はじめに
この記事では、[AtCoder（ABC305）](https://atcoder.jp/contests/abc305)のA~C問題をACしたコードの公開, 解説を行います。
Swiftを使ってコンテストに参加する方の参考になれば幸いです。

# 2.事前準備
標準入力を読み込むためのメソッドです。
コードの先頭に貼り付けて、適宜使用します。
```Swift
import Foundation

// 標準入力から整数を読み込む
func readInt() -> Int{
    return Int(readLine()!)!
}

// 標準入力から整数列を読み込む
func readInts() -> [Int]{
    return readLine()!.split(separator:  " ").map { Int(String($0))! }
}

// 標準入力から文字列を読み込む
func readString() -> String{
    return readLine()!
}

// 標準入力から文字列配列を読み込む
func readStrings() -> [String]{
    return readLine()!.split(separator:  " ").map { String($0) }
}
```

# 3.A - Water Station
問題文や制約は[こちら](https://atcoder.jp/contests/abc305/tasks/abc305_a)からご確認ください。
[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)によるDifficultyは10になります。
```Swift
var N = readInt()

switch N % 5 {
case 4:
    N += 1
case 3:
    N += 2
case 2:
    N -= 2
case 1:
    N -= 1
case 0:
    break
default:
    break
}

print(N)
```

# 4.B - ABCDEFG
問題文や制約は[こちら](https://atcoder.jp/contests/abc305/tasks/abc305_b)からご確認ください。
[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)によるDifficultyは23になります。
```Swift
let line1 = readStrings()
let p = line1[0]
let q = line1[1]

let storeX = ["A" : 0, "B" : 3, "C" : 4, "D" : 8, "E" : 9, "F" : 14, "G" : 23]
let distance = abs(storeX[p]! - storeX[q]!)

print(distance)
```

# 5.C - Snuke the Cookie Picker
問題文や制約は[こちら](https://atcoder.jp/contests/abc305/tasks/abc305_c)からご確認ください。
[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)によるDifficultyは159になります。
```Swift
let line1 = readInts()
let H = line1[0]
let W = line1[1]
var S = [[Character]]()
for _ in 0..<H {
    S.append(Array(readString()))
}

label: for i in 0..<H {
    for j in 0..<W {
        if S[i][j] == "." {
            var count = 0
            if j > 0 {
                if S[i][j-1] == "#" {
                    count += 1
                }
            }
            if j < W - 1 {
                if S[i][j+1] == "#" {
                    count += 1
                }
            }
            if i > 0 {
                if S[i-1][j] == "#" {
                    count += 1
                }
            }
            if i < W - 1 {
                if S[i+1][j] == "#" {
                    count += 1
                }
            }
            if count >= 2 {
                print(String(i+1) + " " + String(j+1))
                break label
            }
        }
    }
}
```

# 6.さいごに
間違いや改善点等あれば、ご指摘いただけると幸いです。
何卒よろしくお願いいたします。
Go言語において型を完全一致しなければならない時とその必要がない時

## はじめに

Go言語の学習中にinterfaceの扱い方に困惑しました。この記事では、その際に調べたことを踏まえてGo言語で型が完全一致しなければならない場合と、その必要がない場合について解説します。

## 1. 型が完全に一致しなければならない時

Go言語では、基本的に変数に対する代入時に、左辺の変数と右辺の値の型が一致しなければならないのが原則です。以下に具体例を示します

```diff_go
var i int = 10
var f float64 = i  // これはコンパイルエラー
```

上記の例では、`int`型の変数`i`を`float64`型の変数`f`に代入しようとしていますが、これはコンパイルエラーとなります。なぜなら、`int`型と`float64`型は異なるため、一致しないからです。

しかし、この問題は明示的な型変換を用いることで解決できます

```diff_go
var i int = 10
var f float64 = float64(i)  // これはOK
```

このように、型が一致しない場合、明示的な型変換が必要になることがあります。

## 2. 型が完全一致しなくても良い時

一方、Go言語ではインターフェースを利用することで、型が完全一致しなくても良い場合があります。以下に具体例を示します

まず、次のようなインターフェースとその実装があります

```diff_go
type Walker interface {
    Walk() string
}

type Dog struct {}

func (d Dog) Walk() string {
    return "The dog is walking."
}
```

そして、`Walker`インターフェースを引数として受け取る関数があります

```diff_go
func LetItWalk(w Walker) {
    fmt.Println(w.Walk())
}
```

この関数は、`Walk`メソッドを実装した任意の型の値を受け取ることができます。つまり、`Dog`型の値も渡すことができます

```diff_go
d := Dog{}
LetItWalk(d) // "The dog is walking."
```

この場合、`LetItWalk`関数は`Dog`型の値を直接受け取るわけではありません。その代わりに、`Walker`インターフェースを満たす任意の型の値を受け取ります。このように、Go言語のインターフェースは、型が完全に一致しない場合でも柔軟にコードを書くことを可能にします。

## まとめ

Go言語は静的型付けを採用していますが、その型システムは一部の場合に柔軟性を提供します。型が一致しない場合でも、明示的な型変換やインターフェースを利用することで、必要な動作を達成することが可能です。一方で、型が厳密に一致しなければならない場面も存在します。

以上、「Go言語において型を完全一致しなければならない時とその必要がない時」についての解説を終わります。読んでいただきありがとうございました。
ファイルアップロードやファイル移動がうまくいかないときに確認すべきことの一つ

# はじめに
ファイルのアップロード・ファイルのディレクトリ間の移動処理について実装する機会があり、うまくいかない場面がありました。
その際にいろいろ調べたのですが、今回原因だったことを解決策まで含めまとめました。
同じような場面で、原因の一つとして確認していただければと思います。


# まず、現在のファイルの権限を確認
権限確認の方法は、
```
ls -l
```
ここで現在の権限を確認します。

# 成功する権限
権限「drwxrwxrwx.」

# 成功する権限へ変更したい場合
下記コマンド実行
```
chmod 777 directory_name
```
※ここでのdirectory_name を変更したいディレクトリの実際の名前に置き換えます。

# chmod コマンドについて
chmod コマンドは、ファイルやディレクトリのアクセス権限を変更するために使用されます。
777 は、全てのユーザー（所有者、グループ、他のユーザー）に対して読み取り、書き込み、実行の全ての権限を与えるための数値表現です。
各数字は以下の意味を持ちます：
```
7: 読み取り (4) + 書き込み (2) + 実行 (1)
6: 読み取り (4) + 書き込み (2)
5: 読み取り (4) + 実行 (1)
4: 読み取り (4)
3: 書き込み (2) + 実行 (1)
2: 書き込み (2)
1: 実行 (1)
0: 権限なし
```

# 最後に
あくまでうまくいかないときの一原因と解決策を紹介しました。
実際に私の今までの実装での原因はほぼこれでした。
誰かの参考になれば幸いです。
【Java】ユーザー入力処理を行うScannerクラスの使い方

# はじめに
Javaでコンソールからのユーザー入力を受け取る場合やファイルからの入力を扱う場合には、java.util.Scannerクラスが便利です。Scannerクラスは入力ストリームからデータを読み取るための高水準なメソッドを提供しており、シンプルな使い方で入力処理を実装することができます。本記事では、Scannerクラスの基本的な使い方について学習したのでアウトプットします

## Scannerクラスの作成
まず最初に、ScannerクラスのAPIをインポートしたのち、インスタンスを作成する必要があります。以下のコードを使用してScannerを作成します。

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 入力処理を行う
        scanner.close();
    }
}
```
上記の例では、System.inを指定して標準入力からの入力を受け取るScannerインスタンスを作成しています。

## 入力の読み取り
Scannerクラスの主要なメソッドを使用して、異なるデータ型の入力を読み取ることができます。以下に代表的なメソッドを示します。

## 整数の入力を読み取る
```java
int number = scanner.nextInt();
```
nextInt()メソッドは、標準入力から次の整数を読み取ります。

### 小数の入力を読み取る
```java
double decimal = scanner.nextDouble();
```
nextDouble()メソッドは、標準入力から次の小数を読み取ります。

### 文字列の入力を読み取る
```java
String text = scanner.next();
```
next()メソッドは、標準入力から空白文字で区切られた次の単語や文字列を読み取ります。

### 1行全体の入力を読み取る
```java
String line = scanner.nextLine();
```
nextLine()メソッドは、標準入力から1行全体を読み取ります。

## 入力の確認と処理の制御
Scannerクラスでは、入力が特定のデータ型に一致するかどうかを判定するためのメソッドも提供されています。例えば、次の整数が入力されたかどうかを確認するには、hasNextInt()メソッドを使用します。

```java
if (scanner.hasNextInt()) {
    int number = scanner.nextInt();
    // 入力が整数の場合の処理
} else {
    // 入力が整数ではない場合の処理
}
```
hasNextInt()メソッドは、次の入力が整数であるかどうかを判定します。条件に応じて処理を分岐させることができます。

## Scannerのクローズ
Scannerを使用した入力処理が完了したら、close()メソッドを呼び出してScannerをクローズし、リソースの解放を行いましょう。

```java
scanner.close();
```
## まとめ
この記事では、Javaの入力処理におけるScannerクラスの基本的な使い方について解説しました。Scannerクラスを使用することで、標準入力やファイルからの入力を簡単に読み取ることができます。
エンジニアアルバイト&インターンサイトまとめ 2023

# 主題
エンジニアのアルバイト&インターン(2023)についての情報を収集

- 検索ワード
Web プログラマ 自社開発(受託でもいいがNo技術停滞) アルバイト　リモートワーク 休日出勤可能
## アルバイト関連
- [Paiza](https://paiza.jp/student/job_offers/employment_type/%E3%83%91%E3%83%BC%E3%83%88%E3%83%BB%E3%82%A2%E3%83%AB%E3%83%90%E3%82%A4%E3%83%88)
- [Wantedly](https://www.wantedly.com/projects)
- [Lapras](https://lapras.com/)　//?
- [Forkwell jobs](https://jobs.forkwell.com/)//?
- [Qiita Jobs](https://jobs.qiita.com/postings)
- [Indeed](https://jp.indeed.com/jobs?q=%E5%AD%A6%E7%94%9F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2&from=mobRdr&utm_source=%2Fm%2F&utm_medium=redir&utm_campaign=dt)
- [マイナビバイト](https://baito.mynavi.jp/shokushu/se/)
[マイナビバイト/もっとヒットするやつ](https://baito.mynavi.jp/kw/%EF%BD%97%EF%BD%85%EF%BD%82%E3%80%80%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%80%80%E3%82%A2%E3%83%AB%E3%83%90%E3%82%A4%E3%83%88/)
- [En-japan/キャリアバイト](https://careerbaito.com/)
[エンジニアHub](https://eh-career.com/)


## インターン関連
- [Renew](https://renew-career.com/)
- [JobPacker](https://jobpacker.app/)
- [type就活](https://typeshukatsu.jp/)
- [Infraインターン](https://www.in-fra.jp/long-internship)
- [ゼロワンインターン](https://01intern.com/job/list.html?freeword=%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2)
- [サポーターズ](https://talent.supporterz.jp/events/)
[サポーターズHub](https://lp.supporterz.jp/)
- [OpenES](https://open-es.com/)

魔法のスプレッドシート

https://magic-spreadsheets.pages.dev/

## ツール
ポートフォリオ作成サイト
- [Forkwell portfolio](https://portfolio.forkwell.com/)


履歴書作成サービス

https://rirekisho.yagish.jp/


## 追記
この話と似た話題でコミュニティ→インターンの記事を書かれていた人がいたので共有

https://qiita.com/nakaC256/items/13bd78285dd4e4bdc3d2?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share#%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%AD%A6%E7%BF%92%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AB%E6%89%80%E5%B1%9E


## 参照

https://qiita.com/KentoObata/items/19f0a8a1956d1beb470e

https://qiita.com/scythercas/items/cf1ea715ac7f606b7329
https://qiita.com/nakaC256/items/13bd78285dd4e4bdc3d2?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share#%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%AD%A6%E7%BF%92%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AB%E6%89%80%E5%B1%9E
【Python】ライブラリ、モジュール、パッケージ、コンポーネントの違い

# はじめに
Pythonでアプリを開発し始め、初歩的な疑問にぶつかったので、調べました。

# ライブラリ
ライブラリは外部提供のプログラム部品を意味します。
複数の機能のプログラムをまとめて部品化されています。

ライブラリ単体では実行することができず、他のプログラムの一部として実行されます。



# モジュール
モジュールは内部の部品を意味します。
部品単独でも動作可能ですが、他の部品と併用して使用しまう。

ソフトウェア開発で「登録機能」「検索機能」「削除機能」などと、機能を部品として分けて開発することがあります。この部品単体でも動作する機能がモジュールです。

Pythonでは、拡張機能が「py」のファイルがモジュールです。
ファイル名をそのままモジュール名となります。
importで呼び出すことで、モジュールの中のクラスや関数、変数を利用できるようになります。

モジュールを繋ぎ合わせるテストが結合テストです。

## モジュールとコンポーネントの違い
モジュールとコンポーネントはどちらも部品を意味しますが、内容に違いがあります。

モジュールは、モジュール単体でも動作可能であるため、モジュール単位で単体テストを実施しることができます。

# パッケージ
パッケージは、複数のモジュールをフォルダに入れてひとまとまりにしたものです。

機能が類似する複数のモジュールをまとめて扱いたいとき、それらのモジュールを同じフォルダに入れ、フォルダ名を「 __init__.py」とすることで、1つのパッケージとして扱うことができます。

モジュールを入れたフォルダ名がそのままパッケージ名となります。
import文で呼び出すことで、パッケージ内のモジュールを全て扱えるようになります。


# コンポーネント

コンポーネントは、特定の機能を単体で完結していますが、単体で使用することを目的としていません。他のプログラムから呼び出して使用するためのプログラムです。

# 最後に

参考記事

https://snowtree-injune.com/2019/07/01/word-a0046-48-module-package-library/

https://medium-company.com/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB/#:~:text=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF,%E3%82%92%E6%84%8F%E5%91%B3%E3%81%99%E3%82%8B%E8%A8%80%E8%91%89%E3%81%A7%E3%81%99%E3%80%82
PlayCanvasエディターを利用したローカライズの設定

PlayCanvasエディターの「LOCALIZATION」を利用して、複数の言語に設定をする方法を紹介します。
[ローカライゼーションのユーザーマニュアル](https://developer.playcanvas.com/ja/user-manual/user-interface/localization/)があります。

この記事で利用しているプロジェクトはこちらとなります。
https://playcanvas.com/project/1089714/

## 1. エディターからローカライズファイルの作成

![localization-create-new-asset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257048/9f756684-1e5a-747e-1539-afb748a66fa5.png)


PlayCanvas Editor でプロジェクトの「Settings」を開き、「Localization」を選択し「CREATE NEW ASSET」をクリックします。これにより、ローカライゼーションのための新しいアセットが生成されます。

次に、必要な言語用の設定ファイルを作成します。この例では、英語(en-US)と日本語(ja-JP)の設定ファイルを示します。

### 英語設定ファイル

```en-US.json
{
  "header": {
    "version": 1
  },
  "data": [
    {
      "info": {
        "locale": "en-US"
      },
      "messages": {
        "welcome": "welcome!"
      }
    }
  ]
}
```

### 日本語設定ファイル

```ja-JP.json 
{
    "header": {
        "version": 1
    },
    "data": [
        {
            "info": {
                "locale": "ja-JP"
            },
            "messages": {
                "welcome": "ようこそ!"
            }
        }
    ]
}
```

### 設定ファイルをアセットとして登録

![localization-asset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257048/111cf347-9059-39d3-94ce-8bea2ba4e266.png)

作成した設定ファイルをアセットとして登録します。
ローカライズには、必要に応じて複数のローカライズデータを登録できます。

## 2. テキストエレメントのローカライズ

![text-element.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257048/054a5a08-36e2-e291-85c6-926af1368303.png)

Text エレメントの Localized をチェックします。先程の JSON データでは、`welcome`という文字がキーとしてローカライズ対象になっているので、`welcome`を Text の値に入力します。

![font-asset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257048/29d3ff12-7404-c594-0ed2-a5f5f38c2f65.png)

PlayCanvas では、テキストエレメントを使用する前に、フォントを登録する必要があります。フォントを登録したら、「Process フォント」をクリックします。必要に応じて、各言語ごとにフォントの設定が可能です。

## 3. エディターの設定

![ja-JP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257048/6c482d6b-5268-b02c-42fe-da42684eae40.png)

デフォルト設定から「SETTINGS」→ 「Locale」を選択し、ここで希望のローカル(この例では"ja-JP")を設定します。これにより、指定したローカライズのテキストが表示されます

## 5. コードから文字列取得する方法

また、プログラムからローカライズされたテキストを取得することも可能です。この場合、API `this.app.i18n.getText` / `pc.app.i18n.getText`を使用します。

- [API リファレンス](https://developer.playcanvas.com/en/api/pc.I18n.html)はこちらにあります。

| メソッド      |                                                                       |
| ------------- | --------------------------------------------------------------------- |
| locale        | 現在のロケールを取得(例: "en-US")                                     |
| getText       | 指定されたキーとロケールに対する翻訳の取得                 |


### 6. 言語によって設定を変更する

```javascript
var Localization = pc.createScript('localization');

Localization.prototype.initialize = function () {
    const languages = {
        'en': { locale: 'en-US',  apiEndpoint: "/api/en"},
        'ja': { locale: 'ja-JP'  apiEndpoint: "/api/ja"},
    }
    const defaultSetting = languages['en'];
    const languageCode = navigator.language.slice(0, 2);
    const setting = languages[languageCode] || defaultSetting;
    this.app.i18n.locale = setting.locale
};
```

以上が PlayCanvas での多言語対応の設定手順となります。
RubyでAtCoder ABC244(A, B, C, D)を解いてみた

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

# A - Last Letter
https://atcoder.jp/contests/abc244/tasks/abc244_a
```ruby:a-244.rb
gets.to_i
puts gets.chomp[-1]
```

# B - Go Straight and Turn Right
https://atcoder.jp/contests/abc244/tasks/abc244_b
```diff_ruby:b-244.rb
- n = gets.to_i
+ gets.to_i
array = gets.chomp.chars

x = y = 0
- dx = [1, 0, -1, 0]
- dy = [0, -1, 0, 1]
- dir = 0

+ dx, dy = 1, 0
array.each do |c|
  if c == "S"
-   x += dx[dir]
-   y += dy[dir]

+   x += dx
+   y += dy
  else
-   dir += 1
-   dir %= 4

+   dx, dy = dy, -dx
  end
end
puts "#{x} #{y}"
```
## 解説
最初にx,yを0にdx, dyをそれぞれの向いている方向に対応させて初期化しておきます。そして、与えられた文字列を構成する文字がSのときはx,yそれぞれに対して`dx[dir]`, `dy[dir]`を足します。一方、Tのときは方向を定めるdirの値をインクリメントし、4で割った余りとしておきます。この操作を、それぞれの文字に対して行うことで、高橋君が最終的にいる座標を求めることができます。

# C - Yamanote Line Game
https://atcoder.jp/contests/abc244/tasks/abc244_c
```ruby:c-244.rb
n = gets.to_i
hash = {}
loop do
  for i in 1..2 * n + 1
    next if hash[i]

    puts i
    STDOUT.flush
    hash[i] = true
    break
  end

  n = gets.to_i
  break if n == 0

  hash[n] = true
end
```
## 解説
問題文の通りに、0が入力されるまで1~2n+1の整数で小さいものかつまだ出ていない整数を出力します。

# D - Swap Hats
https://atcoder.jp/contests/abc244/tasks/abc244_d
```ruby:d-244.rb
s = gets.split.join
t = gets.split.join
group = ["BGR", "GRB", "RBG"]
puts group.include?(s) ^ group.include?(t) ? "No": "Yes"
```
## 解説
（[公式解説](https://atcoder.jp/contests/abc244/editorial/3594)を参考にしました）

グループとして、`["BGR","GRB","RBG"]`を用意していきます。SをTにできるかどうかは、SとT両方がこのグループに含まれているか、あるいはどちらも含まれていないかと同じことなので、これは排他的論理和を用いることで判定することができます。

https://qiita.com/shoya15/items/50fd17e37d7c64f2b166
playframeworkのScalaテンプレート(*.scala.html)、routesに対する不適切なコンパイル警告を消す(unused import, never used)

playframeworkのバージョンアップ(->2.8)にともなって、Scalaを2.12.16にバージョンアップしたところ、冗長かつ間違った警告が大量に出力されるようになりました。
(Scalaの2.11のどこかでScalaコンパイラの仕様が変わったようです）

この警告出力を抑止するための設定です。

## 不適切な警告例

たとえばScalaテンプレート(*.scala.html)において、以下のようなケースがあります。

- `@import`に対して。利用しているにも関わらず!!
- 引数定義の`@(引数)`に対しての警告
- 先頭のコメント行（`@***@`)に対して

また`routes`ファイルでも色々とでます。

## 設定方法

こちらに答えが記載されていました。Play2.8、Scala2.13向けのようですが。Scala2.12でも意図した結果を得られました。

https://stackoverflow.com/questions/37413032/ywarn-unused-import-triggering-on-play-routes-file

`build.sbt`に以下を記述すればOKです。(`scalacOptions := Seq()`としているので上書きしています）

```sbt:build.sbt
// =============================
// Disable annoying warning output in sbt
// https://stackoverflow.com/questions/37413032/ywarn-unused-import-triggering-on-play-routes-file
// =============================
scalacOptions := Seq(
    "-Wconf:cat=unused-imports&site=.*views.html.*:s", // Silence import warnings in Play html files
    "-Wconf:cat=unused-imports&site=<empty>:s", // Silence import warnings on Play `routes` files
    "-Wconf:cat=unused-imports&site=router:s", // Silence import warnings on Play `routes` files
    "-Wconf:cat=unused-imports&site=v1:s", // Silence import warnings on Play `v1.routes` files
    "-Wconf:cat=unused-imports&site=v2:s", // Silence import warnings on Play `v2.routes` files
    "-Wconf:cat=unused-imports&site=views.v1:s", // Silence import warnings on Play `views.v1.routes` files
    "-Wconf:cat=unused-imports&src=.*routes.*:s",
    "-Wconf:cat=unused-imports&src=.*html.*:s",
    "-Wconf:cat=unused-imports&src=.*txt.*:s",
    "-Wconf:cat=unused&site=.*views.html.*:s", // Silence import warnings in Play html files
    "-Wconf:cat=unused&site=<empty>:s", // Silence import warnings on Play `routes` files
    "-Wconf:cat=unused&site=router:s", // Silence import warnings on Play `routes` files
    "-Wconf:cat=unused&site=v1:s", // Silence import warnings on Play `v1.routes` files
    "-Wconf:cat=unused&site=v2:s", // Silence import warnings on Play `v2.routes` files
    "-Wconf:cat=unused&site=views.v1:s", // Silence import warnings on Play `views.v1.routes` files
    "-Wconf:cat=unused&src=.*routes.*:s",
    "-Wconf:cat=unused&src=.*html.*:s",
    "-Wconf:cat=unused&src=.*txt.*:s",
    "-Wconf:cat=deprecation&site=controllers\\.v1.*&origin=scala.util.Either.right:s", // Silence deprecations in generated Controller classes
    "-Wconf:cat=deprecation&site=.*v1.Routes.*&origin=scala.util.Either.right:s"
)
```
Unity 複数キャラクターが被った時アニメーションレイヤーが上下する問題と解決

2023/06/13
Unity エディターバージョン 2021.3.23f1

Unityで複数のキャラクターアニメーションを設定した時に、二つのキャラクターのレイヤーが上下してしまう問題が発生した。
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/7dec2f9c-14e6-3b7f-a32f-351066ca8daa.gif)

解決策
1.まずUnity画面右上　Leyers > Edit Lreyers　を選択。![60CB3C29-0D3F-436F-B740-AC79FE0C5798_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/f16a3af7-46f3-ff01-a610-acddb2b1a1e4.jpeg)


2.つぎに、　Sorting Leyers > +　をクリックしてレイヤーを追加する。(名前は自由)
※番号が大きい方が上のレイヤーになる。
![3AB4EC4C-BD27-429B-819A-EDA1386D13F6_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/54f568cb-7fcd-0fbc-bf9e-0baadee2422f.jpeg)
![Videotogif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/b5e1be43-87f7-6a46-7764-6acd430bc7fd.gif)

3.最後に、レイヤー設定をしたいオブジェクトを Hierarchy から選択。
Inspector > Sprite Renderer > Additional Settings > Sorting Leyer
に先ほど作ったレイヤーが表示されるので、レイヤーを変更する。![9E1CD667-C6CC-46AF-8E45-2E10C3483BB7.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/442738fb-ce3d-0db2-179b-398cfcfe9ac9.jpeg)
![8972F864-D4E1-44CF-9333-FCF46D16BE2B.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/0a9b88af-438f-6d5c-a3ac-1ee38518627c.jpeg)
![Videotogif (4).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/8521d991-a42d-f342-27d6-66e8f475dd00.gif)

解決後
![Videotogif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/44c3eec4-f5a2-419b-d6d2-30af4fda3abd.gif)
自作webアプリケーション概要（制作途中）

# はじめに
まだ制作途中ですが、図面やどのような制作をしていきたいかを今回載せさせていただきます。
# Gocan
[概要] ・東京の一部分のみの電車案内アプリ（全範囲を作ると収集つかなくなるから）
・検索条件には、出発駅、移動時間、上限運賃、経由駅、使いたい路線を指定する ・GoogleMapAPIを用いて、駅ごとに色分けして視覚的におすすめ降車駅を教えてくれる
・降車した駅を記録してスタンプラリーのように図鑑を埋めていくことで駅の特徴や路線を覚えられるようにできる
[ターゲット]
・10代〜20代中盤の東京観光に来た人向け
・地方の人は東京の地理が難しくgoogleMapやYahooの路線案内ではルート案内が文字のみで分かりづらいと感じる声を聞いて需要があると考えた
[解決策] ・視覚的に色分けや動的に画面を作り替えるRuby等の言語を用いれば分かりやすく見ることができると考える
・また、駅一つ一つに個性や無人駅、木造建築等の種類分けをしてその一覧を図鑑のようにコンプリートすることでユーザは称号を獲得できる ・上記のような駅とゲーム性を組み合わせることで楽しく覚えることができる 
[問題点]
・駅の情報をサーバが持つかどうか（毎回スクレイピングするのはAPI的にアウトだと聞いたのでサーバでデータを持つべきだと考える）
・乗り換え等のルート案内するためのテーブルの数がすごく多い
・GoogleMapAPIを用いるとエラーが多くエラー修正に時間がかかると聞いたのでそれが懸念点

![スクリーンショット 2023-06-13 10.56.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/2ad19193-ac85-69f7-9885-7e270025097c.png)
![スクリーンショット 2023-06-13 10.56.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/43e880a3-4322-531f-bc13-07eed4cd1526.png)
![スクリーンショット 2023-06-13 10.57.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/daa24cae-2fe5-0fca-fab2-bac8d3202bed.png)
![スクリーンショット 2023-06-13 10.57.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/d09534e3-2507-18f3-a1dc-cbe908f008fe.png)
![スクリーンショット 2023-06-13 10.57.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/eaef5b0a-ac5f-d7a2-5e5f-13863d0dbea7.png)
![スクリーンショット 2023-06-13 10.58.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/818460b9-8dbf-2ffc-30fe-72037c6d55f6.png)
![Sitemap-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/fc80a689-ec6c-c179-665b-aed6b820a0bd.png)
![Gocan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/cecea158-0d01-ee2a-29eb-cefe7184f038.png)
![Wireframe-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/b18e1463-9c44-d30c-d983-aa7b58b38c57.png)
![IMG_7910 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326702/cffd7483-829e-98eb-ced9-692282a96951.jpeg)

# 最後に
今回載せさせていただいたものはまだ設計段階で形にはなっていませんが、このウェブアプリケーションは自分がどうしても作り上げたい作品なのでこれからも作品の進捗状況を載せていこうと思っています。
秋月GPSを設定してみた。

以前は設定しなくても動いてのですが、突然ntpdが同期できなくなったので、NMEAセンテンスを限定する設定をおこないました。

GPSモジュールをつないでいるFONにはPinctlでRXになるGPIOしかなくTXが出来ません。

![FON2405_GPIO.png](https://qiita-image-store.s3.amazonaws.com/0/104066/d02079b7-e06c-df2b-2ae8-d9eca63d804d.png)

NMEAを10で受けてPPSをgpioppsで12で受けています。

いろいろ考えて他のモジュールにUSB接続されたFTDIモジュールのTXを使うことにしました。

![GPSST1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/f70c1b77-7502-186c-f97d-b37a517ac18d.png)

これでmrubyのスクリプトで設定します。

```ruby
port = "/dev/cuaU0"

ser = SerialPort.new(port, 9600, 8, 1, 0)

# only GPRMC
ser.puts("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n")
```

以前からときどき挙動がおかしかったのは、この設定を行っていなかったからもしれません。

![filename(26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/b8a6e799-f082-4a35-87fd-cd213efe95f4.png)

この設定は電池が入れてあれば保存されているようです。

受信しているセンテンスは/var/db/ntp/clockstatsに残ります。

こちらの記事が大変参考になりました。

https://qiita.com/R800/items/48eff85c240e3059d780
クライアント（HTML）のformからサーバサイド（Node.js+Express）に送信した内容をエコーバックする

クライアント（HTML）のformからサーバサイド（Node.js+Express）に送信した内容をエコーバックするサーバサイドのJavaScriptコードを紹介します。
formタグの内容がサーバサイドにhttpパケットが飛んでいるか確認するのに便利です。

``` server.js
const express = require('express')
const app = express()
const formidable = require('express-formidable');
const port = 3000

app.use(formidable());

app.get('/uRes', (req, res) => {
    res.send(req.query)
})

app.post('/uRes', (req, res) => {
    res.send(JSON.stringify(req.fields))
})

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})
```

サーバの起動の仕方は以下。
```
node server.js
```

後はクラアントのformタグのaction属性に`http://localhost:3000/uRes`を指定して、送信ボタンを押すとクライアントのブラウザページに入力したformタグ内で入力した内容がエコーバックされます。
誰かのお役に立てれば幸いです。
Marvelで作る高校生ITアプリアイデアコンテスト

目次
[１．webマーケティングについて](#1web-マーケティングについて)
[２．marvelの活用について](#2-marvelの活用について)
[３．作品過程について](#3-作品過程について)
[４．生徒作品](#4-生徒作品)
[５．その他](#5-その他)


#1．webマーケティングについて
<font color="OrangeRed">マーケティングの手順として</font>
・ペルソナ　→　・カスタマージャーニーマップ　→　・SWOT分析　→　・STP分析　→　・4P分析
の順番で行う。

<font color="OrangeRed">ペルソナ</font>
　ペルソナに関しては以下のようなものをまとめている。また、それらをCanva・PPなどでまとめる。
・名前・年齢・性別・職業・収入・学歴
・家族構成・居住地・性格（価値観・人生観）
・趣味・余暇の過ごし方・人間関係（友人の数など）
・習慣・買い物をする場所・利用しているSNS
・好きなサイトやアプリ・情報源の種類（WEB、新聞、雑誌、TV）
・所持しているPC、モバイル端末・仕事上の目標、課題、挑戦したいこと


<font color="OrangeRed">カスタマージャーニーマップ</font>
カスタマージャーニーマップとは、商品やサービスの購入までのプロセスを顧客の行動パターンを、思考や感情も踏まえて分析できるフレームワークです。 カスタマージャーニーマップを活用すれば、顧客体験を向上でき、商品やサービスのアプローチを最適化できます。それらのものを生徒が各自で作成をします。

<font color="OrangeRed">SWOT分析</font>
SWOT分析は、自社の内部および外部の環境を分析するためのフレームワークであり、4つの観点から分析を行う。
・Strength（自社の強み）
・Weakness（自社の弱み）
・Opportunity（チャンスとなる外部要因）
・Threat（脅威となる外部要因）

<font color="OrangeRed">STP分析</font>
STP分析とは、セグメンテーション（市場細分化）、ターゲティング（狙う市場の決定）、ポジショニング（自社の立ち位置の明確化）の3つの英単語の頭文字をとって名付けられた分析法であり、マーケティング論で知られるフィリップ・コトラーが提唱したフレームワークで、業種や商材などを問わず活用できるものです。
今回の授業では地域の課題についてSTP分析をして、セグメンテーションで市場の全体像を把握し、ターゲティングでその中から狙うべき市場を決定し、ポジショニングで競合他社との位置関係を決定し「ユーザー目線」「ユーザーの行動」を客観的に把握し、それに応じた考え方を行うことしています。

<font color="OrangeRed">4P分析</font>
商品やサービスを販売する際、顧客のニーズに応える製品を提供するために、「何を」「いくらで」「どこで」「どのようにして」売るのかという自社のマーケティング戦略を立案しています。

Product（製品）
Price（価格）
Place（流通）
Promotion（販売促進）


<font color="OrangeRed">※授業の中で地域のことについて生徒が選定ををして作成しています。無許可な部分も有りますがご了承ください。また、何かありましたらすぐに削除しますのでご連絡ください。</font>

#2．marvelの活用について
「コードを書かずに5分以内で」ブラウザ上でプロトタイプ作成ができるツールです。Sketch、Photoshopからデザインを読み込み可能、さらに、ブラウザ上の膨大な素材も活用できます。作成したプロトタイプはすべてクラウド上に保存され、どこからでもアクセス可能。ユーザテストやシェア機能もあります。<a href="https://marvelapp.com/">「Marvel」</a>(詳しくはリンク先からお入りください）

#3．作品過程について
今回は高校生ITアプリアイデアコンテストに応募するためそのコンテストに合わせた形をとる。

➀場所の選定
募集テーマ
<font color="OrangeRed">「自分に関係がある地域で問題・課題となっていることを解決するアプリ」</font>
となっていることから、選定した。
⓶マーケティングの実施
マーケティングということから上記にもあげた手法を用いて作成をする。個人学習をすることで今までのグループとは違った個の力を付け、得るものが多い。
③プロトタイプコンテンツの作成
Marvelにてコンテンツの作成をする。

以上のことを実施した。詳しい内容は生徒作品から見てください。今回実施した生徒は島田商業高校情報ビジネス科２・３年生が実施しました。

#4．生徒作品
※設置場所からQiitanの記事にリンクがあります。（島田商業高校内）
<h1>２年生作品</h1>

https://qiita.com/shigeru-suzuki/private/8fce7ecfbda515cf3630
<h1>３年生作品</h1>

https://qiita.com/shigeru-suzuki/private/2c34f3aee303c4ab0d5f



静岡県立島田商業高校　こちら[クリック][link-16]

[link-16]:http://www.edu.pref.shizuoka.jp/shimada-ch/home.nsf/IndexFormView?OpenView

Marvel　HP　こちら[クリック][link-17]

[link-17]:https://marvelapp.com/
【Shopify】画像バナーのカスタムCSSで画像サイズを変更する方法

画像バナーのカスタムCSSで画像サイズを変更する方法を解説します。

バナーの高さを「小」に設定し、下記のコードをカスタムCSSに追加します。
`.banner__media`に設定する`background-color`の色は背景と同じ色にしてください。

```css:custom.css
.banner {
  min-height: 240px; #任意の高さ
}
.banner__media {
  background-color: #FFFFFF; #任意の色
}
img {
  object-fit: contain;
}
```
Android Studio 実行時にLogcatのログを消去する

[実行] - [実行構成の編集]でダイアログを表示する

以降は下図参照
![logcat.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99276/e957de4b-be24-8fd4-99cc-a09fc50f5eb7.jpeg)

https://www.vector.co.jp/soft/screen/win95/game/se394828.html
times を使った繰り返し処理の練習

1~10の数値を順番に足し合わせ、足し算の合計値がターミナル出力されるプログラムを、
timesを使ったループ処理を用いて書こう。

自己演算子使わない場合はこうなる。
```ruby
score = 0

10.times do |n|
  score = score + n + 1
end

puts score
```

自己演算子使うとこうなる。

```ruby
score = 0

10.times do |n|
  score += n + 1
end

puts score
```

後者の方がプログラムがスッキリしていてみやすい。

合計値を保存する変数scoreを用意する。
常に結果を保存しておく変数scoreは必要。
何も足していない状態の０をscoreに代入しておく。
times文では、変数nの中に繰り返しの回数が数値として自動で代入される。よって、変数nを使えば繰り返しの回数を変数scoreに足していくことができる。

ただし、プログラムなので1回目のnの数値は0となる。よってscoreに足すのは1増やしたn + 1にする。
Swiftとは

## Swift

Appleが開発したプログラミング言語
iOS、macOS、watchOS、tvOSなどのAppleのプラットフォームでのアプリケーション開発に使用

Objective-Cに代わるプログラミング言語として設計
→より現代的で安全なプログラミング環境を提供

## Swiftの特徴

- 文法
シンプルな文法で、読みやすく直感的なコードを書ける
CocoaやCocoa Touchフレームワークとの統合もシームレスに行える

- 安全性
安全性に重点を置いて設計されいる
→実行時エラーやメモリ管理の問題を最小限に抑える
オプショナル型や型推論などの機能により、実行時のエラーを事前に検出できる

- 高速な実行
コンパイラ最適化により高速な実行が可能
低レベルの制御が必要な場合は、直接CやObjective-Cとの統合も可能

- マルチプラットフォーム開発
さまざまなAppleのプラットフォームでのアプリケーション開発に使用
SwiftにはLinuxやその他のプラットフォームへの移植も進んでおり、クロスプラットフォーム開発にも利用可能
先輩がノリで作ったAWSをちゃんとコード化してみた1 (AWS CDKの導入)

## 先輩がノリで作ったAWS

先輩が開発環境を構築。ノリでAWS環境に構築したらしい
そこで後輩はコード化と本番環境構築を対応します
完了したので手順などのメモです

全5話
1. AWS CDKの導入(この記事)
1. [CodePipelineのコード化](https://qiita.com/emi_yoshi/items/9e178c975cece3a5ad1b)
1. [EventBridge Schedulerのコード化](https://qiita.com/emi_yoshi/items/f19044eb0ac843e6cfca)
1. [ECS clusterとserviceのコード化](https://qiita.com/emi_yoshi/items/62311276cb84ca7e4db6)
1. [ElastiCacheのコード化、本番環境構築](https://qiita.com/emi_yoshi/items/93913cca44658067cd98)

## 開発環境とコード化の対象
リポジトリはAPI用、管理画面用、バッチ処理用の3つ
バッチ処理はEventBridge Schedulerで定義している
APIと管理画面はGithubのdevelopブランチにpushされたらCodePipelineでECSサービスのデプロイまで完了するように設定されている

先輩から開発環境構築を行った結果コード化したいとの要望があったリソースは下記
- ECS（クラスタ、サービス、タスク定義）
- VPCの基本機能らへん（サブネットとか）
- CodePipeline（設定ややこしいので絶対やりたい）
- EventBridge Scheduler

## 選定とか
- AWS環境でコード化なのでAWS CDKを使用する
- インフラ用のリポジトリを作成する
- アプリケーションの言語がサーバーサイドkotlinなので合わせてkotlinに決定

## 早速AWS CDKの導入
コマンド実行してインストールとか構築とか
```
$ npm install -g aws-cdk
$ mkdir infra
$ cd infra
$ gradle init
$ cdk bootstrap
```

### 試しでS3のバケットを作成
```kotlin:App.kt
package infra

import software.amazon.awscdk.App

fun main(args: Array<String>): Unit {
    val app = App()

    InfraStack(app, "developmentInfraStack")
    app.synth()
}
```
```kotlin:InfraStack.kt
package infra

import software.amazon.awscdk.Stack
import software.amazon.awscdk.services.s3.Bucket
import software.constructs.Construct

class InfraStack(parent: Construct, name: String): Stack(parent, name) {
    init {
        Bucket.Builder.create(this, "cdkTestBucket").build()
    }
}
```

`cdk deploy`でデプロイ実行すると、
CloudFormationにスタック(developmentInfraStack)が作成されて
![スクリーンショット 2023-06-07 16.06.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457018/e63c419a-f36b-290c-5b4b-6326c42c178c.png)
S3にもバケットが作成されました！
![スクリーンショット 2023-06-07 16.16.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457018/0c1390e9-ceff-17d4-4a4e-96f19d2ac263.png)
不要なので `cdk destroy` で削除
リソース残るタイプなのでバケット削除も実行

## 次回
CodePipelineを少しだけ触ったことがあったのでCodePipelineからコード化していきます
IBM Security Verify Privilege Vault のカスタムランチャーを作成する(1)



# はじめに
IBM Security Verify Privilege Vault には Unix用のランチャーとしてPuttyが予め用意されています。TeraTerm用のランチャーは無いため、カスタムランチャーとしてTeraTerm用のランチャーを登録します。

### 前提事項
- この手順では、ブラウザを実行しているWindowsマシンの以下のディレクトリにTeraTermが導入されていることを前提としています。
C:\Program Files (x86)\Tera Term\

- Unixサーバーへはポート22でSSH接続し、パスワードを利用して接続するものとします。

これらの制約については、以下の記事で制約を外した修正版を作成しています。
[IBM Security Verify Privilege Vault のカスタムランチャーを作成する(2)]( https://qiita.com/ogawa_to/items/c6f2305691ec7c6f38e9)



## 設定手順概要
1. カスタム・ランチャー「TeraTerm ランチャー」を作成する。
2. シークレット・テンプレート「Unix Account(SSH)」に、1.で作成したカスタム・ランチャー「TeraTerm ランチャー」をマッピングする。
3. 動作確認を行う

## 構成手順詳細
以下の作業は IBM Security Verify Privilege Vaultに管理者アカウントでログインして作業を行います。

### 1. カスタム・ランチャー「TeraTerm ランチャー」を作成する

Administration > シークレット・テンプレートの画面に移動します。

ランチャー タブに切り替えます。

「作成」をクリックし、以下のようにカスタム・ランチャーを作成します。
|項目|設定値|
|:--|:--|
|ランチャーのタイプ|プロセス|
|ランチャー名|TeraTerm ランチャー|
|アクティブ|True|
|カスタム・パラメータを引用符で囲む|True|
|プロセス名|"C:\\Program Files (x86)\teraterm\ttermpro.exe"|
|プロセス引数|"\\$MACHINE":22 /ssh /2 /auth=password /user="\\$Username" /passwd="\\$Password"|

プロセス引数の指定方法については、[TTSSH command line]( https://ttssh2.osdn.jp/manual/4/en/commandline/ttssh.html) を参考にします、

### 2. シークレット・テンプレートへのカスタム・ランチャーをマッピング
Administration > シークレット・テンプレートの画面に移動します。

テンプレート タブにある、「Unix Account (SSH)」をクリックします。

「マッピング」タブに切り替えます。

「マッピングの追加」をクリックします。
「マッピング・タイプ」に作成した「TeraTerm ランチャー」を指定します。
以下のようにカスタム・ランチャーを作成します。
|項目|設定値|
|:--|:--|
|マッピング・タイプ|TeraTerm ランチャー|
|Domain|<ブランク>|
|Password|Password|
|Username|Username|

設定したら保存します。

### 3. 動作確認を行う
既に作成済みのシークレットのうち、シークレット・テンプレート「Unix Account(SSH)」を利用しているシークレットを表示します。

作成、設定した TeraTermランチャーをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147690/f500a9d2-b44f-11c3-6eda-73d4569a798e.png)

TeraTermが起動され、該当のサーバーにログイン可能であることを確認します。
適当に操作し、セッションを終了します。

しばらく待った後、Administration > セッション・モニター を表示し、操作した内容が録画されていることを確認します。

### 最後に
IBM Security Verify Privilege Vault のTeraTermを使ったカスタムランチャーを作成しました。
この方法では、TeraTermの導入ディレクトリを固定している、TeraTarmのセッションの録画はPuttyランチャーと異なり、実行コマンドは取得できない等、いくつか制約事項はありますが、TeraTermを使って、パスワードを表示せずにUnixにSSHでログインできることを確認しました。

## 参考
[TTSSH command line]( https://ttssh2.osdn.jp/manual/4/en/commandline/ttssh.html)
TeraTermのコマンドラインの説明

[Custom Launchers](https://ibm.docs.thycotic.com/isvp-vault/current/secret-launchers/custom-launchers)
カスタムランチャーの作成
Googleスライドまたはパワポで、テキストボックスの文字サイズの自動調整を、一括で「調整しない」に変更することはできるのか？

資料作成業務で、テキストの文字が枠よりも多い場合、デフォルトだと自動で文字が小さくなるかと思います。
そうすると、全体とのレイアウトが崩れて困ったという方も多いかと思いますので、調べてみました。

PowerPointのバージョン：16.73(23051401)

# 時間がない方のための結論
Googleスライドならできる！

設定方法：
1. ツール -> 設定 を選択
![screenshot 2023-06-14 8.15.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476695/cbaf58dc-f508-08f3-8686-f74454799897.png)



2. 全般タブの、「カスタム自動調整設定を使用する」にチェックし、「テーマのテキストプレースホルダー」を「自動調整しない」に選択
![screenshot 2023-06-14 8.13.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476695/128eb103-7970-4185-b704-f0242b2f78af.png)



余談として、Googleスライドとパワポの場合の自動調整の変更方法を記載します。

## Googleスライドの場合
テキストボックスをクリックすると、左側にアイコンが表示されますので、それをクリックすることで選択が可能です
![screenshot 2023-06-13 9.22.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476695/4864e0b3-ffcd-3d4d-3612-07e02b3a71c6.png)

*アイコンが表示されない場合は、
1. Google スライドを開きます。
2. テキストボックスを選択します。
3. 右クリックして、コンテキストメニューから「テキストボックスの編集」を選択します。
4. テキストボックスの編集ウィンドウが表示されます。編集ウィンドウの上部にはテキストボックスの設定が表示されます。
5. 「テキストボックスの設定」の中で、「テキストフィット」のセクションがあります。ここで自動調整の設定を変更できます。
6. 「テキストフィット」のセクションで、「テキストフィットのオプション」をクリックします。
7. 「テキストフィットのオプション」ウィンドウが表示されます。ここで文字サイズの自動調整の設定を変更できます。
8. 「自動的に文字サイズを調整」の代わりに「調整しない」を選択します。
9. 設定を変更したら、「適用」または「OK」をクリックして設定を保存します。
以上で、テキストボックス内の文字が自動的にサイズ変更されないようになります。

## パワポの場合
1. パワーポイントのスライドを開きます。
2. テキストボックスを選択します。
3. 右クリックして、コンテキストメニューから「図形の書式設定」を選択します。
4. 「図形のオプション」タブを選択します。
![screenshot 2023-06-13 9.50.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476695/5b937648-41bf-af41-3d20-e1776835bb75.png)


5. 「サイズとプロパティ」セクションの「テキストボックス」で、「テキストに合わせて図形のサイズを調整する」のラジオボタンを、「自動調整なし」に変更します。
以上で、テキストボックス内の文字が自動的にサイズ変更されないようになります。

# 結論
色々やってみたのと、chatGPTにも聞いてみましたが一括で変更することはできませんでした。
そもそも、パワポにはあまり長い文章を書くべきではないということが示唆されているのかもしれませんね。

(追記)
何度か「自動調整しない」を選択していると、Googleのシステムより「一括変更可能ですよ」とアナウンスされて気づきました！！！