OmniAICreator/Qiita-1.07M huggingface dataset:
macOSでsplitコマンドが使えない？

# macOSでsplitコマンドのオプションが全然使えない？
macOSのターミナルからsplitコマンドをオプションを指定して使おうとすると

```shell
$ gsplit -d -l 100 -a 1 --additional-suffix=.csv hoge.csv hoge
split: illegal option -- -
usage: split [-a sufflen] [-b byte_count] [-l line_count] [-p pattern]
             [file [prefix]]
```

と表示されてします。エラー内容を見る限り明らかに使えるオプションの数が少ない…。
これ結局原因がわからずじまいだったのですが…なんとか対応方法がありました。

# coreutilsを使う

coreutilsというのを使うと基本コマンドを先頭にgをつけて実行できる
Homebrewから

```shell
brew install coreutils
```
これで

```shell
gsplit -d -l 100 -a 1 --additional-suffix=.csv hoge.csv hoge
```

このコマンドが通るようになりました
DockerでBuild failed（no space left on device）のエラー解決法

# エラー内容
```
failed to register layer: Error processing tar file(exit status 1): write /usr/share/doc/libgdbm-compat4/copyright: no space left on device
ERROR: Service 'php' failed to build : Build failed
```
・docker-compose upの際ビルド中にエラーが起きた
・localhostで表示ができない
# inode使用率が高かったのが原因
以下コマンドで解消できた
```
docker volume rm `docker volume ls -q -f dangling=true`
```
【iframe】Noneを返すWebサイト〜スクレイピングの落とし穴〜

今回はpython学習で大変お世話になってるはたやす先生のUdemy講座から内容を引用してます。

https://www.udemy.com/course/webscraping-with-python/


皆さんはスクレイピングでエラーが出る原因はなんだと思いますか？

タグの指定が間違えてる？find_allの後にforで回してない？

いやいや、なめんなよ:smirk:基礎さえ押さえればスクレイピングなんて楽勝楽勝〜

って思ってました、私。　そして見事に詰むw

どう見てもちゃんとタグは指定してる、コードも間違ってない！なのになんで・・


![スクリーンショット 2022-11-27 11.54.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980135/5bbfda63-3253-017f-6cf7-389c6a892dc8.png)

しかもこのNoneを返すサイト、なぜか検証ツールも反応しないんです。


![スクリーンショット 2022-11-27 12.00.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980135/75e9c394-6252-9e0e-d4b3-1cc26bb07957.png)

なぜか消えてますが画像ではカーソルはサイト上の"会社情報"を指してます。検証ツール上でもdivの会社情報を指してます。
でもなぜかサイト上のカーソルは何も反応は無し・・



![スクリーンショット 2022-11-27 12.07.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980135/ef46a4a0-a69e-5d7e-64fd-828eb17d1203.png)

👆の画像のように普通だったらブラウザ上でもカーソルが反応してタグ情報が表示されるのに・・


そして調べること丸一日、もう自分だけじゃ無理と思いはたやす先生に教えてもらいました。

その正体はHTMLの「iframe」タグ。

なんじゃそれと思いググってみると、

https://seolaboratory.jp/52748/

「指定したURL（リンク先ページの内容）をsrcで読み込んで表示するHTMLタグ」
らしいです。


なんともややこしい・・

しかし仕組みさえ分かればこっちのもの。検証ツールをもっと詳しく見ると
```
<iframe id="pageFrame" src="https://○○○○.com/next-page/?getFromUrl=111111" style="width: 100%; height: 8399px;" frameborder="0">

```

こんなタグが見つかるはず。あとはrequestとbeautifulsoupでこのsrcのURLにアクセスして通常通りfindかselectをしましょう。
（ここのsrcのURLにアクセスすればちゃんとカーソルが反応する全く同じサイトに飛びます）


んーHTML中々奥深い。



ここで紹介した以外にももっとトリッキーなタグがあるんだろうなぁ・・:scream:
まぁその時はちゃんと調べて解決していきましょ。
[MySQL] オーロラダイナマイト実装！！！秒速でできるユーザ作成と権限の付与

## この記事の目的
- ユーザ作成と権限の付与が実装できる
- 関連のコマンドを確認できる
## 説明しないこと
- MySQLの基礎的な利用方法
- 特定の権限を付与する意義

## 実装の流れ
1. rootユーザ（全ての権限を所有）でmysqlにログインする
1. 新しくユーザを作成する
1. 特定の権限を付与する
# まずはやってみようぜ！！！
## 1. rootユーザ（全ての権限を所有）でmysqlにログインする
- rootユーザにログインする
```
mysql -u root -p
```
## 2. 新しくユーザを作成する
- ユーザをパスワードをつけて作成する
```
create user ユーザ名@ホスト名 identified by "パスワード名";
```
- 先ほどのコマンドでしっかりユーザが作成されているかを確認する
```
select host, user from mysql.user;
```
命名したユーザ名で作成されていることが確認できる

 ## 3. 特定の権限を付与する
- ユーザの権限を確認する
```
show grants for ユーザ名@ホスト名;
```
<img width="341" alt="スクリーンショット 2022-06-29 17.21.34.png (57.9 kB)" src="https://img.esa.io/uploads/production/attachments/14274/2022/06/29/126296/bef9d778-d98a-4b05-8b61-ca8a6b7f6852.png">


- 今回、ユーザ名はtestにしている
- GRANT USAGE ON *.* TO `ユーザ名` と表示された。これはグローバルレベルで USAGE という権限が設定されていることを示している
- この USAGE という権限は「何も権限がない」という状態
- つまり新しく作成したユーザは、すべてのデータベースを対象に何も権限がない状態となっている
- 特定のユーザの権限を付与する
```
grant type_of_permission on database_name.table_name to ユーザ名@ホスト名;
```
- [公式ドキュメント：許容可能な権限の一例](https://dev.mysql.com/doc/refman/5.6/ja/grant.html)
- グローバル、データベース、テーブル、カラムと権限のレベルがある
- 権限のレベルに合わせて付与していく必要がある
- 権限のレベルについては[こちら](https://mo-gu-mo-gu.com/mysql-basic-privileges/#i-4)で詳しく解説されている


# 関連コマンド一覧
- 特定のユーザでログインする
```
mysql -u ユーザ名 -p
```
- ユーザをパスワードをつけて作成する
```
create user ユーザ名@ホスト名 identified by "パスワード名";
```
- ユーザを確認する
```
select host, user from mysql.user;
```
- 現在ログインしているユーザを確認する
```
select user(), current_user();
```
- ユーザを削除する
```
drop user ユーザ名@ホスト名;
```
- mysqlのバージョンを確認する
```
select version();
```
- 特定のユーザの権限を確認する
```
show grants for ユーザー名@ホスト名;
```
- 特定のユーザの権限を付与する
```
grant type_of_permission on database_name.table_name to ユーザ名@ホスト名;
```
- 特定のユーザの権限を削除する
```
revoke type_of_permission on database_name.table_name from ユーザ名@ホスト名;
```
- 認証プラグインを確認する
```
select host, user, plugin from mysql.user;
```
- `mysql_native_password`を`caching_sha2_password`に変更する
```
alter user 'aiful'@'%' identified with caching_sha2_password by '{password}';
```


## 参考
- [MySQLの日本語公式ドキュメント](https://dev.mysql.com/doc/refman/5.6/ja/grant.html#grant-database-privileges)
- [reference権限が必要か否か](https://next4us-ti.hatenablog.com/entry/2018/11/26/143712)
- [MySQL8.0公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_references)
- [ユーザに権限を付与する](https://www.javadrive.jp/mysql/user/index6.html)
Materials, ボッシュ自動車handbook(英語)11版A.C.<4>

Automotive Handbook countdown Calendar 2022

https://qiita.com/advent-calendar/2022/automotivehandbook

12/3 参加記事です。

ボッシュ自動車handbook(英語)11版(0-1) 課題と記事一覧new

https://qiita.com/kaizen_nagoya/items/a9d2887bf2a7598dc8e5

# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906
Electrification of the drive, 970
Chassis systems, 1108
Chassis control, 1260
Vehicle bodies, 1310
Comfort and convenience, 1392
Safety systems in the motor vehicle, 1410
Vehicle security systems, 1430
Automotive electrics, 1450
Vehicle electrical systems for hybrid and electric vehicles, 1560
Automotive electronics, 1620
Entertainment 1780
Drive assistance and sensors, 1804
Drive assistance systems 1872
Future of automated driving 1934
Appendics, 1940
# Mathematics and methods
no. Number
p. page
v. views
g. goods.
s. stocks

|no.|title|P.|v.|g.|s.|
|:----|:----|--:|--:|--:|--:|
|18|Materials,https://qiita.com/kaizen_nagoya/items/a8295f42363cfe749a18|258|122|0|0|
|19|Heat treatment of metallic materials https://qiita.com/kaizen_nagoya/items/9055c0cd7f832a677cd7|328|93|0|0|
|20|Corrosion and corrosion protection https://qiita.com/kaizen_nagoya/items/493d0216d2b78913bddf|340|123|0|0|
|21| Deposits and coatings, https://qiita.com/kaizen_nagoya/items/305cbbbd6f2e12e2f818|348|90|0|0|
 

# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d



# Advent Calendar 2022

今年企画した４つのAdvent Calendarと、それぞれの記事一つをご紹介します。

AUTOSAR Advent Calendar 2022

https://qiita.com/advent-calendar/2022/autosar

AUTOSAR References to ISO, IEC, ITU, IEEE, RFC and SEA etc.

https://qiita.com/kaizen_nagoya/items/d7d252211e10a79516df

Automotive Handbook Advent Calendar 2022

https://qiita.com/advent-calendar/2022/automotivehandbook

Basic principles, ボッシュ自動車handbook(英語)11版まとめ<2>

https://qiita.com/kaizen_nagoya/items/24a1ba5da3d09b2a95d1


2022 いいねをいただいた記事ランキング(O.K.版) Advent Calendar 2022

https://qiita.com/advent-calendar/2022/goods

2022年１月下旬　いいねをいただいた記事　16

https://qiita.com/kaizen_nagoya/items/0ee589a8edaeab24fd2a

AdCale(O.K.) Advent Calendar 2022

https://qiita.com/advent-calendar/2022/adventcalendar2022

「会議は15分未満」に。小耳にはさんだ話。

https://qiita.com/kaizen_nagoya/items/510c47c5d1e8d03145db

AdvencCalendar2022 報告

https://qiita.com/kaizen_nagoya/items/5b4b99cb9ad571f4094b

誤差の評価が苦手（専門分野以外）

https://qiita.com/kaizen_nagoya/items/cc3a50827b24ab80985f



 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞



# 文書履歴(document history)
ver. 0.01 初稿 　20221204
Test First

通信ソフトを最初に作った。　

ソフトウェアのテープからのリード、ライトは、300baudの通信で行う。　

周辺装置を一つ足すたびに、その周辺装置を使うソフトエアの試験ソフトを書くことになる。　

Test FirstがいいことだからTest Firstなのではない。　

試験（Test)しなければ、次の処理ができないから、　
一つづつ、試験をしながらプログラムを書く。　

単体試験(unit test)まで行かない。　
機能試験(function test)。　

機能を、関数の形でうまく設計できれば、その関数の単体試験という形にできたことはだいぶ後から知った。　

っていうか、関数って、関数がうまく動いたかを試験する仕組み。　

関数で書いて、単体試験をしてから、その関数を呼ぶプログラムを書く感じ。　



<この項は書きかけです。順次追記します。>


# Countdown Calendar 2022

今年企画した6つのCountdown Calendarと、それぞれの記事一つをご紹介します。

AUTOSAR Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/autosar

AUTOSAR References to ISO, IEC, ITU, IEEE, RFC and SEA etc.

https://qiita.com/kaizen_nagoya/items/d7d252211e10a79516df

Automotive Handbook Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/automotivehandbook

Basic principles, ボッシュ自動車handbook(英語)11版まとめ<2>

https://qiita.com/kaizen_nagoya/items/24a1ba5da3d09b2a95d1


2022 いいねをいただいた記事ランキング(O.K.版) Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/goods

2022年１月下旬　いいねをいただいた記事　16

https://qiita.com/kaizen_nagoya/items/0ee589a8edaeab24fd2a

AdCale(O.K.) Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/adventcalendar2022

「会議は15分未満」に。小耳にはさんだ話。

https://qiita.com/kaizen_nagoya/items/510c47c5d1e8d03145db

ABC language (O.K.版） Advent Calendar 2022

https://qiita.com/advent-calendar/2022/abc_ok

LLVMソースコードのコンパイルをしようと思ってハマった罠とそこから脱出するための努力

https://qiita.com/kaizen_nagoya/items/16f270e42b947756ced3

ABC maker(O.K版） Advent Calendar 2022

https://qiita.com/advent-calendar/2022/abcmaker

JAXA/IPA クリティカルソフトウェアワークショップ WOCS言語関連発表(改定版)

https://qiita.com/kaizen_nagoya/items/4789832baf494cb74626

CountdownCalendar2022 報告

https://qiita.com/kaizen_nagoya/items/5b4b99cb9ad571f4094b

誤差の評価が苦手（専門分野以外）

https://qiita.com/kaizen_nagoya/items/cc3a50827b24ab80985f


 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 20221203
ver. 0.02 URL追記　20221231



### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
データベースをしるす




　サービスをつくる前の前に考えることはデータベース(DB)の選択だった。rails newの段階でDBを決めないといけない。なんだそれは。ちょうど応用情報技術者のテキストが手元にあったので、それを参考にしながら文章にしよう。

 DBとはデータを保存する場所である。そこからデータの抜き出しや更新を行ったりする。

>　そうしたデータベース機能を、アプリケーションから簡単に扱えるようにしたのが>「データベース管理システム」というミドルウェア。
>（中略）
>　データベースにはいくつか種類があります。代表的なのは次の3つ。（関係型、階層型、ネットワーク型）中でも関係型と呼ばれるデータベースが現在の主流です。
>
>　(キタミ式イラストIT塾　応用情報技術者　令和04年　p424)

　ということだ。Railsも関係型データベースを採用しており、その管理システムをRDBMSと呼んでいる。RDBMSはこれもまたいくつも種類があって、デフォルトではSQLiteを扱うようになっている。しかし、デプロイを考えるとpostgreSQLに設定することにした。当時はデプロイ先をHerokuかAWSにしようとしていた。postgreSQLのほうが都合がよかったはずだった。

　DBそのものの操作や変更はRailsがよいかんじにやってくれる。例のごとくわたしはただボタンを押せば良い。そうやって生きている。その証拠かどうか知らないが、わたしはいまだにSQLを知らない。RailsがActiveRecordという便利機能をつかってよしなにやってくれるからだ。おそらく他の言語や別の開発を行う時、ようやくSQLを調べていくのだろうね。必要になった時に知ろう。


https://qiita.com/advent-calendar/2022/tatta-hitori
ひかりあれ

　プログラミング学習の延長でもって、自分のサービスをつくることにした。実体をもたないものをつくるのは不思議な感覚である。金属加工は切削の熱や振動をうけとめながらやっていくことが可能だが、ソフトウェアはそうはいかない。あまり過程が見えづらいというか、不透明だ。

　教材がRailsを題材にしていたので、私もRailsでつくることにした。環境構築にひともんちゃくあったが、それもなんとかなった。ターミナルでrails newをやると、ぶぉわああといっぱいファイル群ができた。

```terminal
$ rails _6.0.4.8_ new lytnote -d postgresql
```

すごい。昔、神様は一週間くらいで世界をつくったらしいが、これと似たようなものなのか。誰かがお膳立てしてくれたシステムに沿って私は開発をやっていくことができる。

　全ての事象の意味を知ることはできないし、やろうとも思わない。アクセルを踏めば車は進む。それでいい。けれども時には挙動を修正したい時があって、どうしても中を覗かないといけなくなる。そのときにはじめて深淵に入っていく。なにかひとつでもヒントが得られたならそれでいい。脱出。

「ひとつのgithubリポジトリをうみ、かわいた地が現れよ」
「芝を生めよ増えよ、地に満ちよ」

　そのようになった

　デプロイまでの長い旅がはじまった。


https://qiita.com/advent-calendar/2022/tatta-hitori
【Python】馬の競走成績情報をエクセルに出力してみた

## 概要
pythonで馬の競走成績情報をWEBスクレイピングしてGoogleスプレッドシートに出力する処理を作ってみました。

## 前提条件
Pythonが既にインストールされていること。
<a href="https://console.cloud.google.com/apis/dashboard">Google Cloud Platform</a>のAPIライブラリにアクセスして下記のインストールが終わっていること。
（詳しくは<a href="https://qiita.com/164kondo/items/eec4d1d8fd7648217935">Google Spread Sheets に Pythonを用いてアクセスしてみた</a>を参考にしてください）
「requests」と「beautifulsoup4」がインストールされていること。
（<a href="https://qiita.com/tamago_pinoko/items/b0679628e54401840d5b">【【Python】WEBスクレイピングした結果をエクセルに出力してみた</a>の続編です。）

## gspreadとoauth2clientの導入
コンソールを開いて下記のコマンドを実行して「gspread」と「oauth2client」をインストールする。
```
pip install gspread
pip install oauth2client
```

## Googleスプレッドシートに出力する処理の実装
作成した馬の競走成績情報をGoogleスプレッドシートに出力する処理のプログラムは下記になります。

```py
import gspread
import json
import requests
from bs4 import BeautifulSoup
import openpyxl
import time

#ServiceAccountCredentials：Googleの各サービスへアクセスできるservice変数を生成します。
from oauth2client.service_account import ServiceAccountCredentials 

#2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

#認証情報設定
#ダウンロードしたjsonファイル名をクレデンシャル変数に設定（秘密鍵、Pythonファイルから読み込みしやすい位置に置く）
credentials = ServiceAccountCredentials.from_json_keyfile_name('./秘密鍵のファイル名.json', scope)

#OAuth2の資格情報を使用してGoogle APIにログインします。
gc = gspread.authorize(credentials)

#共有設定したスプレッドシートキーを変数[SPREADSHEET_KEY]に格納する。
SPREADSHEET_KEY = 'XXXXXXXXXXXXXX'

#共有設定したスプレッドシートのシート1を開く
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1

#A1セルの値を受け取る
import_value = worksheet.acell('A1').value

url = import_value
html = requests.get(url)
soup = BeautifulSoup(html.content, "html.parser")

#列項目を入力する
retu_list = ['日付','開催場所','天気','馬番','着順','騎手','距離','馬場','タイム','上り']

row = 1
line = 4
write_row = 1

for i in retu_list:
    worksheet.update_cell(3,row,i)
    row = row + 1

row = 1

# すべてのtbodyタグを検索して、その中のさらにtdタグを検索してその文字列を表示する
for element in soup.find_all("tbody"):
    for element2 in element.find_all("td"):
        if row < 28:
            if row in (1,2,3,9,12,13,15,16,18,23):
                worksheet.update_cell(line,write_row, element2.text.strip())
                row = row + 1
                write_row = write_row + 1
                # 書き込み速度に制限があるためsleep関数で書き込み間隔を調整
                time.sleep(1)
            else:
                row = row + 1
        else:
            row = 1
            write_row = 1
            line = line + 1
            worksheet.update_cell(line,write_row, element2.text.strip())  
       
```
■処理内容
・SPREADSHEET_KEY = 'XXXXXXXXXXXXXX'について
「XXXXXXXXXXXXXX」に当たる箇所は出力したいgoogleスプレッドのURLにある
https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXX/edit#gid=0
　　　　　　　　　　　　　　　　　　　　　　　↑
　　　　　　　　　　　　　　　　　　　　　この部分になります。

・time.sleep(1)について
自分が設定しているgspreadの設定上1分間にアクセスできる回数に制限があるため1秒間の実行間隔を設けてます。

## 実行結果
今回の対象は下記のURLになります。
https://db.netkeiba.com/horse/2017105082

実行後のエクセルは下記になります。
![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2056482/5ac16cbe-7b80-fbc9-07ee-4ec2422b1283.jpeg)
【Vuetify】v-expansion-panelとv-switchの併用

## やりたいこと

Google chromeの設定画面にあるような
スイッチトグルつきのアコーディオンを作りたい。
![chorome.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773736/aa8ae11b-3ebb-2706-1421-f189f66abe05.gif)



## コード例
```html
<div id="app">
  <v-app id="inspire">
    <v-expansion-panels>
      <v-expansion-panel>
        <v-expansion-panel-header :hide-actions="true" :ripple="false" @click="openFlg = !openFlg">
          <template v-slot:default="{ open }">
            <v-row>
              <v-col cols="auto" class="mr-auto mt-3">テスト</v-col>
              <v-col cols="auto" class=" my-0 py-0">
                <v-switch :input-value="open"></v-switch>
              </v-col>
            </v-row>
          </template>
        </v-expansion-panel-header>
        <v-expansion-panel-content>
          テスト
        </v-expansion-panel-content>
      </v-expansion-panel>
    </v-expansion-panels>
  </v-app>
</div>
```

```javascript
new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data: () => ({
    openFlg: false,
  }),
})
```
実際の画面CodePen
https://codepen.io/shota-1314/pen/JjZvyXm

2022/11/28 追記
v-switchが非活性になっていたので修正


## 参考文献
https://vuetifyjs.com/ja/components/expansion-panels/#section-9ad85ea6306a4f7f304465b9
法政大学のIT関係の知り合いたち（順次追記します）

法政大学の経済学部経済学科卒業です。　

卒業研究の際に、卒業研究の原稿を見て、教授に「これは経済学ではない」と否定されました。　

その後は、経営学部の教授の後を追っていました。　

経済学徒を諦め、他大学の工学部電気工学亜に編入させていただきました。　



<この項は書きかけです。順次追記します。>
# 佐原伸

https://researchmap.jp/shinsahara

http://sea.jp/ss2014/WG7: 「形式手法の最新技術と産業界での適用」
>◆リーダ: 中津川 泰正 (フェリカネットワークス)，田中 美穂 (DTS) 佐原 伸 (法政大学)，酒匂 寛 (デザイナーズデン)
◆概要:
ソフトウェア開発現場では，品質の高いソフトウェアを効率よく組織的に開発する手法が求められています．本ワーキンググループでは，高品質のソフトウェア開発技法として実績のある形式手法について，その最新技法の紹介と，適用方法の紹介，そして今後どのように高品質のソフトウェア開発を進めていくかについて話し合いたいと思います．また，組織的な形式手法の導入事例に限らず，個人で気軽に使うことができるような形式手法の使い方など幅広く議論することができたらと考えます．議論の対象とする形式手法は，今のところ，VDM・Event-B・CafeOBJ・SPIN・NuSMV・Coq などを想定しています．」

# 　劉少英　

法政大学 三題噺

https://qiita.com/kaizen_nagoya/items/030dd5ae8dd63c2b2737

# 玉井哲雄
玉井哲雄ホームページ - 法政大学
http://tamai-lab.ws.hosei.ac.jp/indexj.html
ソフトウェア工学 (平成15年9月11日)
http://tamai-lab.ws.hosei.ac.jp/pub/sebook.pdf

# 古家時雄

今昔文字鏡　漢字フォントの世界一の収集

https://researchmap.jp/blogs/blog_entries/view/81777/4611550eb9fcc32b68bf2b49c2dbbce4?frame_id=442673

今昔秀歌百撰　全項目索引（一覧）

https://researchmap.jp/blogs/blog_entries/view/81777/f691323917cc4ea12caf0b03b34c8ea0?frame_id=442673

# 水野 和夫
法政大学教授

株式会社の終焉　出版記念会参加　


# Countdown Calendar 2022

今年企画した6つのCountdown Calendarと、それぞれの記事一つをご紹介します。

AUTOSAR Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/autosar

AUTOSAR References to ISO, IEC, ITU, IEEE, RFC and SEA etc.

https://qiita.com/kaizen_nagoya/items/d7d252211e10a79516df

Automotive Handbook Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/automotivehandbook

Basic principles, ボッシュ自動車handbook(英語)11版まとめ<2>

https://qiita.com/kaizen_nagoya/items/24a1ba5da3d09b2a95d1


2022 いいねをいただいた記事ランキング(O.K.版) Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/goods

2022年１月下旬　いいねをいただいた記事　16

https://qiita.com/kaizen_nagoya/items/0ee589a8edaeab24fd2a

AdCale(O.K.) Countdown Calendar 2022

https://qiita.com/advent-calendar/2022/adventcalendar2022

「会議は15分未満」に。小耳にはさんだ話。

https://qiita.com/kaizen_nagoya/items/510c47c5d1e8d03145db

ABC language (O.K.版） Advent Calendar 2022

https://qiita.com/advent-calendar/2022/abc_ok

LLVMソースコードのコンパイルをしようと思ってハマった罠とそこから脱出するための努力

https://qiita.com/kaizen_nagoya/items/16f270e42b947756ced3

ABC maker(O.K版） Advent Calendar 2022

https://qiita.com/advent-calendar/2022/abcmaker

JAXA/IPA クリティカルソフトウェアワークショップ WOCS言語関連発表(改定版)

https://qiita.com/kaizen_nagoya/items/4789832baf494cb74626

CountdownCalendar2022 報告

https://qiita.com/kaizen_nagoya/items/5b4b99cb9ad571f4094b

誤差の評価が苦手（専門分野以外）

https://qiita.com/kaizen_nagoya/items/cc3a50827b24ab80985f



 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞


# 文書履歴(document history)
ver. 0.01 初稿 20221204
ver. 0.02 URL追記　20221231



### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
M5stackCore2にUIflowのファームウェアを書込む手順

# はじめに。
この記事では，M5stackCore2でUIflow用のファームウェアを書込む方法を説明します。

# USBドライバのインストール
WindowsにM5StackCore2用のデバイスドライバをインストールします。
https://docs.m5stack.com/en/download
の「USB DRIVER & OPEN SOURCE LIBRARY」から，「CH9102_VCP_SER_Windows」をダウンロードしてインストールして下さい。

# ファームウェア書込みツールの準備
M5StackCore2に，UIflow用のファームウェアを書込むツールをダウンロードします。https://docs.m5stack.com/en/download
の「UIFLOW FIRMWARE BURNING TOOL 」から，使っているOS用のM5BurnerをダウンロードしてZIPファイルを展開します。

# ファームウェア書込みツールの起動
USBケーブルでPCとM5StackCore2を接続します。
展開後に実行ファイル（M5Burner.exe）を実行します。

# ファームウェアのダウンロード
左のメニューから「CORE2&TOUGH」を選択し，「UIFlow_Core2」の「Download」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/8a39865a-7992-ed87-7a19-14120c045476.png)

# ファームウェアの書込み
左のメニューから「CORE2&TOUGH」を選択し，「Configure」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/3f4ebd73-e34b-3972-7c04-ebc3684ddd9b.png)

シリアルポートの選択画面が出てくるので，それらしいCOMポートを選択し，「Load」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/6be1fe28-b4ea-6c82-b60f-9feef45cb05a.png)

UIflow Configrationが表示されたら，M5stackCore2を接続するWiFiのSSIDとパスワードを入力して，「Save」をクリックします。（もしこの画面がでなければ，スキップして次の手順に進んで大丈夫です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/c3f59c79-6f55-806b-0a3c-e44ca9d5278a.png)

「Burn」をクリックして，SSIDとパスワードを再確認して，「Next」をクリックします。もしSSIDとパスワードが空白であれば入力して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/539c7406-60bd-48f2-f007-c8a48a97c659.png)

シリアルポートの選択画面が出てくるので，それらしいCOMポートを選択し，「Start」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/38571858-4259-3e4f-d8b1-6133301267aa.png)

書込みが終わるまで数分待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/1e3e7f89-3af2-be17-393e-0e71643f0886.png)

書込みが終わったら，M5stackCore2は自動的に再起動します。再起動後に「チーン」の効果音が聞こえます。これでファームウェアの書込みが終了です。USBケーブルを取り外します。

# API KEYの確認
Wifiに正しく接続できたら，API KEY（16進8桁）が表示されます。ここまで来たらM5stackCore2側の準備はOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/f822c58a-fa9c-1d46-c682-10f909775985.png)

# WebIDEへの接続
- WebIDEを使うために下記URLに接続します。
https://flow.m5stack.com
- API KEYに，M5stackCore2に表示されたAPI KEYを入力します。
- Languageで日本語を選択します。
- DeviceでCore2（白枠のデバイス）を選択します。
- 「OK」をクリックします。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/00dea464-b0a9-63b2-fe26-3e7cd6d49b2b.png)

GUIのIDEが表示されるので，アプリを作成します。右下の「Run」ボタンで実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/36dacf0f-e51c-d0b8-926d-cfb23efaf10a.png)
スコープについて

プロデルを書いていて気になるのは，変数のスコープ（有効範囲）ですよね。
本家マニュアルにも[当該項目](https://docs.utopiat.net/rdr/manual/syntax/scope.html)がありますが，よく迷うので，まとめました。

## 変数が発生するとき

プロデルは変数を宣言しないで使うことができますが，宣言をすることもできます。

### パターン1：代入と同時

```プロデル
甲は，「あ」。
```

### パターン2：【】

```プロデル
【甲】
```

### パターン3：種類

```プロデル
乙とは
    ＋あ
    －い
    ＃う
    え　’エラー
終わり
```

識別子を省略すると＋になりますが，この場合変数名を書くだけだとエラーです。

### パターン4：引数

```プロデル
［甲］を乙する手順

終わり
```

### パターン5：繰り返し

```プロデル
3回甲にカウントしながら繰り返す

繰り返し終わり
```

```プロデル
甲は，｛1，2，3｝。
甲のすべての乙について『』ことをそれぞれ繰り返す
```

## パターン1：代入した場合の有効範囲

```プロデル
なんとかする手順
	「手順内：［甲］」を報告する。
	甲は，「丙」。
終わり

アレとは
	はじめの手順
		「はじめの手順内：［甲］」を報告する。
		甲は，「丁」。
	終わり
終わり

甲は，「乙」。
なんとかする。
甲を報告。
あれというアレを作る。
甲を報告。
```

結果：

```
手順内：乙
丙
はじめの手順内：丙
丁
```

プログラム全体で代入された変数は，手順内であっても種類内であっても読み込みと書き込みができました。

宣言していない変数を読み込むとどうなるでしょうか。

```プロデル
アレとは
	はじめの手順
		甲は，「乙」。
	終わり
終わり

あというアレを作る。
甲を報告。
あの甲を報告。
```

```

乙
```

エラーにはなりません。値は空っぽです。

```プロデル
なんとかする手順
	甲は，「乙」。
終わり

なんとかする。
甲を報告。
```

```
乙
```

このように，宣言されていない変数を読み込もうとすると，面倒なことになるので注意しましょう。


## パターン2：【】を使って宣言

```プロデル
なんとかする手順
	「手順内：［甲］」を報告する。
	甲は，「丙」。
終わり

【甲】は，「乙」。
なんとかする。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150160/4e48c910-2cd5-6490-7e4d-2fdc83edb12e.png)
「なんとかする手順」内で甲を宣言しているため，エラーです。

```プロデル
アレとは
	はじめの手順
		「はじめの手順内：［甲］」を報告する。
		甲は，「丁」。
	終わり
終わり

【甲】は，「乙」。
あれというアレを作る。
甲を報告。
```

```
はじめの手順内：
乙
```

プログラム全体で【宣言】された変数は，種類から読み込めませんし，書き込めません。

## パターン3：種類

種類では，他の場所と異なり，アクセス範囲を指定できる識別子がつけられます。

```プロデル
親とは
	＋甲
	－乙
	＃丙
	はじめの手順
		甲は，1。
		乙は，2。
		丙は，3。
	終わり
終わり

子とは
	親を受け継ぐ
	はじめの手順
		「［甲］，［乙］，［丙］」を報告。
		甲は，4。
		’乙は，5。　’エラー
		丙は，6。
	終わり
終わり

あという子を作る。
あの甲を報告
’あの乙を報告　’エラー
’あの丙を報告　’エラー
```

```
1，2，3
4
```

このように，－を付けた場合，継承した種類からも参照できません。＃を付けた場合，プログラム全体からは参照できません。

```プロデル
アレとは
	＋甲
	はじめの手順
		甲は，1。
	終わり
	自分が［甲］を乙する手順
		「種類手順内：［甲］と［自分の甲］」を報告。
		甲は，3。
		「種類手順内：［甲］と［自分の甲］」を報告。
		自分の甲に1を足す。
		「種類手順内：［甲］と［自分の甲］」を報告。
	終わり
終わり

甲は，5。
あというアレを作る。
「あの甲：［あの甲］」を報告。
あが甲を乙する。
「あの甲：［あの甲］」を報告。
甲を報告。
```

```
あの甲：1
種類手順内：5と1
種類手順内：3と1
種類手順内：3と2
あの甲：2
5
```

種類内で定義した変数「＋甲」と，手順の引数で定義した変数「［甲］」の名称が同じです。
この場合，単に「甲」としたものは引数の値を指し，読み込みも書き込みも行われます。
種類内で定義したものは，「自分の甲」とする必要があります。


## パターン4：引数

```プロデル
［甲］を乙する手順
	「手順内：［甲］」を報告。
	甲に1を足す。
終わり

アレとは
	はじめの手順
	終わり
	自分が［甲］を乙する手順
		「種類内：［甲］」を報告。
		甲に1を足す。
	終わり
終わり

甲は，1。
甲を乙する。
甲を報告。
あというアレを作る。
あが甲を乙する。
甲を報告。
```

```
手順内：1
1
種類内：1
1
```

このように，手順の引数は手順内でのみ読み込み，書き込みができます。

## パターン5：繰り返し

```プロデル
甲は，5。
5回甲にカウントしながら繰り返す
	甲を報告。
繰り返し終わり
’エラー
’5回【甲】にカウントしながら繰り返す
’	甲を報告。
’繰り返し終わり
```

```
1
2
3
4
5
```

繰り返す際に，カウンタ変数はリセットされるようです。また，既に宣言された変数を再度宣言しようとすると，エラーが出ました。
1回目の宣言に，繰り返し文で【】を使った場合でも同様です。
いくつかの言語で、空白類の挙動

# これは何？

https://qiita.com/universato/items/c1f97e1843e010ed8dd8
という記事を見て、私も遊んでみた。

## JavaScript

ちゃんと調べてないけど、Unicode で空白となっている文字は空白だと思う。

なので、唯一の（私調べ）目に見える空白文字、` ` (U+1680、オガム文字の空白) を半角空白の代わりに使える。

```JavaScript:JavaScript
const a = () => {
    console.log("hello" + ", " + "spaces");
};
a(  );
```

ちなみに手元の環境では「format on save」で全部半角空白にされてしまうので、この機能を OFF にする必要がある。

## go

[仕様書](https://go.dev/ref/spec#Tokens) を見ると

> Tokens form the vocabulary of the Go language. There are four classes: identifiers, keywords, operators and punctuation, and literals. White space, formed from spaces (U+0020), horizontal tabs (U+0009), carriage returns (U+000D), and newlines (U+000A), is ignored except as it separates tokens that would otherwise combine into a single token. 

とある。

一方。
トークン（変数名とか）になれるのは、ユニコードで「Letter」になっているものだけ。なので、空白類は変数名の一部になれない。

## C#

[仕様書](https://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/csharp%20language%20specification.doc) を見ると

> whitespace: 
> &nbsp;&nbsp;&nbsp;&nbsp;    Any character with Unicode class Zs 
> &nbsp;&nbsp;&nbsp;&nbsp;    Horizontal tab character (U+0009)
> &nbsp;&nbsp;&nbsp;&nbsp;     Vertical tab character (U+000B)
> &nbsp;&nbsp;&nbsp;&nbsp;     Form feed character (U+000C)

となっている。
`Unicode class Zs ` とは何かと思うと Space Separator のことで、オガム文字の空白もその一員になっている。
したがって下記のコードは

```C#:C#
using System;
 
public class Hello{
  public static void Main(){  
    Console.WriteLine( "hello spaces!" );
  }
}
```

普通に動く。

## Java

Java の場合、[仕様書](https://docs.oracle.com/javase/specs/jls/se19/html/jls-3.html#jls-3.6) をみると。
Unicode が成熟する前に作られているからだとおもうんだけど、Unicode の空白類とは関係なく

> White space is defined as the ASCII space character, horizontal tab character, form feed character, and line terminator characters

と、突然 ASCII space caracter が登場する。

一方、変数名などに使える文字としては「 any Unicode character that is a "Java letter" 」ということになっている。その Java letter ってなんだよということだけど、

> The "Java letters" include uppercase and lowercase ASCII Latin letters A-Z (\u0041-\u005a), and a-z (\u0061-\u007a), and, for historical reasons, the ASCII dollar sign ($, or \u0024) and underscore (_, or \u005f). The dollar sign should be used only in mechanically generated source code or, rarely, to access pre-existing names on legacy systems.

とのこと。`$` って変数名に使えるんだ知らなかった。

### J#

全く調べてないし、今後も調べないと思うけど、 J# は .NET の上で動くので、変数名に漢字とか普通に使えたんじゃないかなぁと想像する。そうじゃないと困りそう。

まったくどうでもいいのだけれど。


## zig

zig は仕様書を読んでもよくわからなかった。
試してみると、変数名にも空白にも オガム文字の空白 は使えなかった。

## Swift

[仕様書](https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#) を見ると、

> inline-space → U+0009 or U+0020

とあり、オガム文字の空白は空白には使え無さそうだけど

```swift:swift
let  漢字変数  =  "hello spaces"
print(  漢字変数  )
```

は、普通に動く。

## Groovy

[仕様書](https://groovy-lang.org/syntax.html#_normal_identifiers) を見ると

> '\u0100' to '\uFFFE'

が変数名に使えるということになっているようにみえるので U+1680 も変数名に使えそうだが、wandbox で試すとそうなっていない。

とはいえ、`this."foo bar baz"` のようにすれば、空白でも変数名などに使える。


# 思うこと

変な空白はエラーにしてくれたほうが嬉しいなと思う。
Unicode 的に空白だったとしてもオガム文字の空白を意図して使う人は稀だと思うし、禁止しても誰も困らないと思う。
Javascript の exit()


厳密には動作違うかもしれないが、とりあえず `exit()` (スクリプトを途中で止める）場合はこれで良さそう。

```javascript
return false;
```

自分的にはこれで落ち着いてる。。。
軽くしか調べてないけど、javascriptではexit()できないってのを見て、false返せばそこで処理終わるんじゃね？って思った。
ご指摘ありましたらコメント欄へお願いします。

Javascript ﾜｶﾝﾅｲ...
NodeJS? VueJS? ﾁｮｯﾄﾖｸﾜｶﾗﾅｲ

---
---

2022/12/08 追記
動作確認した環境のこと書いてなかったです。

- Browser: Win10 Google Chrome 108.0.5359.73


コメント欄で頂いた `throw new Error()` について試してみたので、ちょっと追記



---
```javascript
throw new Error() 
```
純粋にエラーとして残る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/ad861e82-b826-f89b-ff7e-976ddd5dd623.png)

---
```javascript
try { throw new Error(); }
```
そもそもコードをロードした時点でエラーとなる。
`catch` or `finally` が必要とのこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/6a8cba8d-d9ed-8467-d10c-d58bdd73f7e6.png)

---
```javascript
try { throw new Error(); } catch {}
```
エラーとして残らないが、処理が止まらずそのまま次の処理もしてしまう

---
```javascript
return false;
```
開発者コンソールにエラーとして載らないが、処理はそこで止まる

---
ゆめみの Flutter の研修課題を公開しました

## はじめに

株式会社ゆめみの Flutter の研修課題を公開しました :tada: 

https://github.com/yumemi-inc/flutter-training-template

ゆめみは、2022年1月に Flutter ギルドを立ち上げたばかりで、これまでドキュメント整備やテンプレートプロジェクトの作成、採用コーティング試験の作成など、少しずつギルドの体制を整えてきました。

そして、2023年4月に入社予定の方々のために、育成体制も着々と整えていっており、そのひとつとして研修課題を作成しました。

すでに、11月中旬から2名の内定承諾者アルバイトの方に取り組んでいただいており、今のところ「楽しい」「学びが多い」などの反応をいただけており嬉しい限りです :relaxed:

まだ作成したばかりで至らぬ点もあるかと思います。
何か気づいた点や改善点などありましたら、優しくご指摘いただけますと幸いです :pray:

## 内容

用意されている課題を順番にクリアして、天気予報アプリを開発していきます。

<img src=https://raw.githubusercontent.com/yumemi-inc/flutter-training-template/main/docs/sessions/images/json/demo.gif width=240 />

おおまかな内容は、ゆめみの iOS ギルドの研修課題と同じです。

https://qiita.com/watanave/items/1cefa5aae18f5141c426

## 対象者

難易度的には、ゆめみの Flutter の採用コーディング試験を通過した方を対象にしています。

しかし、ある程度環境構築を自動化しており、レイアウト構築から順番に進めていくため、初学者の方でも取り組みやすいものとなっています。

採用コーディング試験も公開していますので、ぜひご覧ください。

https://github.com/yumemi-inc/flutter-engineer-codecheck

## 事前準備

### インターネット環境

`flutter pub get` を実行するときや、そもそも課題を参照するためにも必要です。

### PC

Flutter や [fvm] がサポートしている OS であれば大丈夫です。

できれば iOS アプリの動作確認がしやすい macOS が良いです。

### エディタ

特に指定はありませんが、Flutter 公式で紹介されているもの方が、プラグインなどが整備されていて開発しやすいためおすすめです。

https://docs.flutter.dev/get-started/editor

個人的には、次のものを利用しています。

- [IntelliJ IDEA]
- [Visual Studio Code]
- [Xcode]

### メンター

それぞれの課題にヒントを用意してはいますが、それだけでは、どうしても解決できないことがあったり、深い学びを得られなかったりしてしまうかもしれません。

ゆめみでは、レビュー・フィードバック・フォローを行うメンターを必ず１名以上設定するようにしています。

### GitHub アカウント

基本的に、個人の GitHub アカウントのリポジトリに研修課題用のリポジトリを public で作成していただきます。

これによって、メンターも研修を受ける側も、よりエンジニアとしての活動が可視化され、いろいろな面でメリットがあるのではないかと考えています。

ただし、会社の方針や個人の考えによって、別の Git ホスティングサービスを使ったり、private リポジトリにしたりしても良いと思います。

## 進め方

詳しくは [README] をご覧ください。

ざっくり、次のように進めます。

1. 課題を進める
2. プルリクエストを提出して、メンターにレビューを依頼する
3. プルリクエストが承認されたらマージする

## 特徴

iOS の課題とだいたい同じなのですが、若干異なる部分がありますので紹介します。

### テンプレートリポジトリ

このリポジトリはテンプレートリポジトリに設定されています。

テンプレートリポジトリとして使用すると、自動的にワークフローが実行されるようになっており、次のことを行っています。

- 各 Session を Issue に登録
- fvm を利用して、最新安定板の Flutter SDK で Android・iOS 用のプロジェクトを作成
- lints を導入
- templates 配下のファイルを上書きコピー
- 不要なファイルを削除してコミット作成してプッシュ

そのため、環境構築の方法を統一でき、メンター・研修を受ける方のコストを削減できます。

### セットアップ

Session0 で研修課題を進めるにあたって必要なセットアップを行っていただきます。

GitHub のリポジトリ設定やプルリクエストチェックのワークフローの追加など、メンターの負担を少しでも軽くできるような工夫もここで行っています。

### Riverpod

この研修では、Riverpod を使うようにあえて制限を行っています。

状態管理に関するパッケージはいくつかありますが、Flutter 公式でも紹介されていたり、ドキュメントが充実していたり、テストしやすかったりとメリットが多く、ゆめみのプロジェクトでは推奨しています。

## おわりに

最近、Flutter でアプリ開発している会社が増えているように思いますが、Flutter のリードエンジニアの人数が少なく、育成どうしよう、、という声をよく聞きます。

その際は、ぜひ、この研修課題を利用していただけますと幸いです。

<!-- Links -->

[fvm]: https://fvm.app

[IntelliJ IDEA]: https://www.jetbrains.com/ja-jp/idea/old/

[Visual Studio Code]: https://azure.microsoft.com/ja-jp/products/visual-studio-code/

[Xcode]: https://apps.apple.com/jp/app/xcode/id497799835

[README]: https://github.com/yumemi-inc/flutter-training-template/blob/main/README.md
TwitterAPIを使ってランダムな固定文をツイートさせた話

<h1>1.作成の経緯</h1>

きっかけは、知人から
「Twitterって更新しないと埋もれちゃうけど、ツイートするのもめんどうなんだよねぇ…
なんか、自動でツイートできるようなもの作ってよ」
そんな内容のDMが届いたところから始まりました。

（そんなん言うならTwitterやめちまえ）


当初は断ろうと思っていたのですが、**知人のため**に作ってみることにしました
（アドベントカレンダーもあるからしゃーなし、って訳ではないです。）

<h1>2.環境</h1>
・vscode Version 1.73.1

・Python 3.11.0

<h1>3.実際のソースとか</h1>

以下、自分が実際に作成したソースです。

tweet.py（メインのソースです）
```py
from requests_oauthlib import OAuth1Session
import json, config #標準のjsonモジュールとconfig.pyの読み込み
from requests_oauthlib import OAuth1Session #OAuthのライブラリの読み込み
import xml.etree.ElementTree as ET 
import random
import math

CK = config.consumer_key
CS = config.consumer_secret
AT = config.access_token
ATS = config.access_token_secret
twitter = OAuth1Session(CK, CS, AT, ATS) #認証処理

url_media = "https://upload.twitter.com/1.1/media/upload.json"
url_text = "https://api.twitter.com/1.1/statuses/update.json"

tree = ET.parse('test.xml') 
root = tree.getroot()
count = math.floor(random.uniform(0, 1))

# 画像投稿
files = {"media" : open(root[count][1].text, 'rb')}
req_media = twitter.post(url_media, files = files)

# レスポンスを確認
if req_media.status_code != 200:
    print ("画像アップデート失敗: %s", req_media.text)
    exit()

# Media ID を取得
media_id = json.loads(req_media.text)['media_id']

# Media ID を付加してテキストを投稿
params = {'status': root[count][0].text, "media_ids": [media_id]}
req_media = twitter.post(url_text, params = params)

# tweetできたか確認
if req_media.status_code != 200:
    print ("テキストアップデート失敗: %s", req_media.text)
    exit()

print ("OK")
```


config.py（Keyやらtokenを記載しておく）

```py
consumer_key        = 'XXXXXXXXXXXXXX'
consumer_secret     = 'XXXXXXXXXXXXXX'
access_token        = 'XXXXXXXXXXXXXX'
access_token_secret = 'XXXXXXXXXXXXXX'
```

XXXXXXXXXXXXXXの中身はご自身のTwitterAPIで取得した値を入れてください。
取得する方法は[こちらのサイト](https://wporz.com/twitterapi-apikey-accesstoken/)を見ていただくのが一番良いかと思われます。

test.xml（実際のツイートの中身などを記載しておく）
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<tweets>
  <tweet>
    <text>testSD</text>
    <image>thumbnail_computer_sdcard.jpg</image>
  </tweet>
  <tweet>
    <text>testPC</text>
    <image>computer_case.png</image>
  </tweet>
</tweets>
```

以上です。

プログラミングをしたことが無い方向けに、すっっっごく簡単に説明すると、
「config.pyからKeyとかを取得して、それらを使って認証してね」って言うことと、
「test.xmlから（ランダムな数字）番目のデータをとってきてね」ってことをしています。

（多少のプログラミングの知識があれば調べながら読めると思うので、経験者の方向けの解説はしません。）

<h1>4.実際に実行した結果</h1>

![スクリーンショット 2022-11-27 191125.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629108/9e08871e-5d0d-7202-c325-713c52af3a64.png)
上記に記載されたソースをそのまま実行するとこのような形で表示されます。
（「いらすとや」さん、いつもお世話になっております！！）

<h1>今後の展望とか</h1>

今回、テスト用に作ったものなので、XMLファイルの中身が非常に簡素なものになってしまっています。
しかし、これらを少し変えてあげれば会社やお店の宣伝など、様々なものに利用できると思われます。
今後は知人にテストをしてもらいつつ、もう少し発展させたい所存です。

…Twitterで特定のタグを付けつつ口コミを書いてもらい、そのタグを取得条件にしてツイートを収集。
その結果をXMLファイルとして書き出せれば…
的なことも考えているので、来年の私に乞うご期待くださいませ。
（来年記事にするかわかりませんが…）


本記事は以上となります
ここまでお読みいただきありがとうございました。
質問、コメント等ありましたら、お気軽にどうぞ
contabo VPSにEclipseをインストールしてみた

参照サイト

https://takilog.com/ubuntu-eclipse-develop/

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-install-linux.html

Python環境を構築するためにEclipseをインストールする

# EclipseをHPからダウンロードする

# Eclipseをインストールする
```
mkdir eclipse
cd eclipse/
tar -xvzof ~/Downloads/eclipse-inst-jre-linux64.tar.gz
./eclipse-inst

```

# PyDevをインストールする
Help > Install new software

<img width="400" alt="newinstall" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/e90bd087-e02b-0af7-ad17-2646ef9ab07a.png">

Add

<img width="400" alt="newinstall2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/539780e8-db79-9c59-b997-eb8157e053ec.png">

PyDevのリポジトリを登録

<img width="400" alt="addrepository" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/37ff994e-76ae-bd66-8172-5873f0c6ab4c.png">

PyDevにチェックを入れる > Next

<img width="400" alt="newinstall3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/95eec648-c53b-e648-1b8c-cea166deaed4.png">

Next

<img width="400" alt="newinstall4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/3f7c0f03-e81c-b12d-35f5-3fd14b011e18.png">

I accept > Finish

<img width="400" alt="newinstall5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/89ad36ae-9030-65d2-57ec-ce07c439ea6a.png">


# PyDevパースペクティブを開く

Window > Perspective > Open Perspactive > other

<img width="400" alt="openperspective1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/eea5aa88-2c2a-a625-731f-4d59f5cf86df.png">

PyDev

<img width="200" alt="openperspective2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/7f5eba02-256b-84f2-de49-2b59a6cdc349.png">


# インタープリタを追加する

Window > Preferences 

<img width="400" alt="preference1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/83569200-46e2-d755-1fbc-cb9f7914f9cc.png">

PyDev > Interpreters > Python Interpreter

<img width="400" alt="preference2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/902a29b3-ea01-e2e3-4bc7-3bbcf5f811b4.png">

New > Choose from list

<img width="400" alt="preference3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/84402051-f09e-a2ac-a118-71591f5ac9ee.png">

インタープリタを選ぶ

<img width="400" alt="preference4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/d5cb58e8-5c13-a08c-58ff-3540eeb3657e.png">

パスを通す

<img width="400" alt="preference5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/1dc95c1c-9f86-96c3-db7c-b5350176acfd.png">

インタープリタが追加された

<img width="400" alt="preference6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/a7c5614c-60b4-8232-868a-893919f899f3.png">


# pipをインストールする
```
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py --user
```
picoCTF Writeup picoGym Practice Challenges Magikarp Ground Mission (注意<spoiler>)

Description
Do you know how to move between directories and read files in the shell? Start the container, `ssh` to it, and then `ls` once connected to begin. Login via `ssh` as `ctf-player` with the password, `6d448c9c`

```
>ssh ctf-player@venus.picoctf.net -p 53323
The authenticity of host '[venus.picoctf.net]:53323 ([3.131.124.143]:53323)' can't be established.
ECDSA key fingerprint is SHA256:NrQkIxNEQQho/GA7jE0WlIa7Jh4VF9sAvC5awkbuj1Q.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[venus.picoctf.net]:53323,[3.131.124.143]:53323' (ECDSA) to the list of known hosts.
ctf-player@venus.picoctf.net's password: 
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1041-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the      
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by    
applicable law.

ctf-player@pico-chall$ ls
1of3.flag.txt  instructions-to-2of3.txt
ctf-player@pico-chall$ cat 1of3.flag.txt 
picoCTF{xxsh_
ctf-player@pico-chall$ cat instructions-to-2of3.txt 
Next, go to the root of all things, more succinctly `/`
ctf-player@pico-chall$ cd /
ctf-player@pico-chall$ ls
2of3.flag.txt  bin  boot  dev  etc  home  instructions-to-3of3.txt  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
ctf-player@pico-chall$ cat 2of3.flag.txt 
0ut_0f_\/\/4t3r_
ctf-player@pico-chall$ cat instructions-to-3of3.txt 
Lastly, ctf-player, go home... more succinctly `~`
ctf-player@pico-chall$ cd ~
ctf-player@pico-chall$ ls
3of3.flag.txt  drop-in
ctf-player@pico-chall$ cat 3of3.flag.txt 
5190b070}
ctf-player@pico-chall$
```

picoCTF{xxsh_0ut_0f_\/\/4t3r_5190b070}
JSでのフォームバリデーションの作成方法

# フォームバリデーションとは
フォームに入力されている内容が妥当かどうかをチェックする機能のことです。
年齢のボックスには年齢が、名前のボックスには名前が入力されているのか、入力されていない場合はエラーを表示させる、といったものです。

# やったこと
・htmlにエラーメッセージを書く
・エラーメッセージにクラスをつける（err-txtとした）
・cssにてerr-txtをdisplay:none;で消す
・JSにて条件分岐を作成...

## JSでやったこと 
・フォームタグの情報を取得する変数formを定義
・addEventListenerでsubmitイベントを作成、関数定義
・それぞれのインプットタグに対応する正規表現を初期化した変数（定数）を定義
```   
const katakanaRegex = new RegExp(/^([ァ-ン]|ー)+$/);
```
 
・それぞれのインプットタグの要素をform.name.valueなどで取得（ややこしいが、ここのnameはそれぞれのインプットタグに書いてあるname属性である。）

・取得したインプットタグの要素（文字列）を正規表現に照合した結果を受け取るmatch()メソッドを使って、それぞれのインプットタグの照合結果を代入した変数を定義する
引数（パラメータ）の部分にはさっき定義した正規表現の変数を入れる
```
let reultkana = kana.match(katakanaRegex);
```
・match()メソッドの、一致しているものがあればarray、なければnullを返す特性を活かして条件分岐を作成
→nullであればpreventDefaultでイベントを中止する
→クラスの追加や削除ができるclassListプロパティのremove()メソッドを使い、err-txtクラスを消す（つまり、エラーメッセージを消しているクラスを消すことで、元々ついているエラーメッセージを表示させる）

・else文でclassLIst.add()を使い、err-txtを追加させるコードを記述
（この際、私はif文、else文でもエラーメッセージのIDで（クラスでもいけると思うが）要素をいちいち取得して変数定義し、それに紐付けてclassListプロパティを記述していた..）

・（名前の入力欄のみ、ひらがな正規表現に照合させて、空欄の場合のelse if文を記述した
```
else if(resulttext == ""){
  e.preventDefault();
  let errname = document.getElementById('err-name');
```
なぜひらがなだけこれを書かないと動かなかったのかが、微妙に理解できていない）

# まとめ
ちょっとややこしく書きすぎた
エラーメッセージはJS側で用意できるし、フラグという概念を使えばもっとスマートに条件分岐を記述できた




# 参考
matchメソッドの理解

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/match

引数の理解

https://blog.senseshare.jp/argument.html
ロケーションで100MB制限を突破する魔法の呪文

# ロケーションは100MBじゃ足りない！
![スクリーンショット (60).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/f7bad637-b6e0-fada-bbeb-df5d0e91126f.png)
みなさんは、VCIを作っている際にこんな画面に出くわしたことはないでしょうか？
VCIは、100MBのファイル制限が設けられており、テクスチャファイルが100個とかあるようなロケーションを作っていると、100MBを余裕で超えてしまいます！
そんな時に使う方法として、VCIを分割し、複数アイテムでロケーションを構成する方法がありますが、今度は位置を合わせる必要が出てきます。
Vキャス内で、手で持ってモデルを位置調整することもできますが、ピッタリきれいに合わせることは不可能に近いので、スクリプトを使って動かしてあげるほうがきれいに位置調整することができます！
ここでは、ロケーションVCIが100MBを超えた際に、モデルの分割し、分割後のVCIの位置合わせを簡単にきれいに行う方法をご紹介します！
# モデルの分割
モデルの分割は、fbxへの変換の際でも、fbx変換後にunityに持ってきた後でもできますが、ここでは、blenderからfbxに変換する際に分割してunityに持っていきます。
まず、blenderで分割するオブジェクトを選択します。
![スクリーンショット (47).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/0b5a8043-86a4-fe11-db08-d9af466f4c5f.png)
選択したら、上のメニューバーの「ファイル」→「エクスポート」→「FBX」を選択。
選択すると、以下のようなウィンドウが出てくるので、「選択したオブジェクト」にチェックを入れ、「オブジェクトタイプ」の「メッシュ」を選択した状態で、「FBXをエクスポート」を押すと、分割されたFBXが出力されます。
同じ手順で、残りのオブジェクトも選択して出力します。
![スクリーンショット (48).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/6cbe390e-ec15-4d09-92e2-8b61a20ae4e8.jpeg)
# unityへのモデルの導入
0\. すべてのオブジェクトが出力できたら、unityを開き、uniVCIをインポートした状態までもっていき、VCI Objectを作っておきます。
　さらに、モデルを入れる用のVCI SubItemも作っておき（ここでは「Model」というSubItemを作っています）、Rigidbodyの「Use Gravity」のチェックは外しておき、「Is Kinematic」にチェックを入れておきます。
1\. 整理用にモデルを入れるようのフォルダを作っておき、そこにモデルのテクスチャを入れたフォルダを入れます。
2\. 続いて、分割したFBXを入れます。（1と2の順番を逆にすると、FBXを入れたときにテクスチャがついてくれません。）
3\. 入れた分割FBXをすべて先ほど作ったVCI SubItemに入れます。
![スクリーンショット (50).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/18e377ef-1d67-7507-bf57-e22e97aaf93a.png)
分割して取り込んだモデルは以下の通り
![1669538672.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/412043f4-58c7-dbe6-584e-8c6e34df020b.png)
# 魔法の呪文を入力する
ここで、VCI Objectのスクリプトに魔法の呪文を入力しておきます。
入れるのは、下の1行だけです！
スクリプトの詳細は以下のリンクを見て頂ければいいのですが、モデルの位置と回転を原点にリセットするスクリプトになります。
https://virtualcast.jp/wiki/vci/script/reference/resetroottransform
```lua:main.lua
vci.ResetRootTransform()
```
![スクリーンショット (51).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/363a841d-df3e-8a69-4889-46839098add2.png)
# VCI Objectの分割
ここまででVCIアイテムとしての、分割の準備ができましたので、ここから分けていきます。
VCI Objectを2つ複製し、合計3つのVCI Objectを作成します。
各々の、VCI SubItem内のモデルを、1つずつになるように、モデルを削除し、1つのVCI Objectにつき、1つの分割モデルが1つ入っているようにします。![スクリーンショット (53).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/cae6e67b-48cf-3cbd-a3de-4ac81e406450.png)
これで、100MBを超えたロケーションアイテムができました！
それぞれ、VCIをエクスポートし、3つのうち、1つをロケーションとしてアップロードし、残りの2つは、アイテムとしてアップロードして完成です！
あとは、シェーダーを変更したり、スクリプトを追加したりと、各々のロケーションの完成度を高めていく感じになります！
![2022112718255822_てすとるーむ_小山内シノブ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985893/e4ecce56-9eba-0942-f5a8-fa6bab655de3.jpeg)
Twilioでの電話通知機能（Laravel）


## はじめに
Twilioの電話通知機能をLaravelにて実装しました。
備忘録として記載させていただきます。

__流れ__
ブラウザからTwilio側にHTTPリクエスト
↓
Twilio側が電話に通知（設定した音声流れる）
↓
Twilio側からHTTPリクエストを受け取る
↓
Twilio側から受け取ったHTTPリクエストでコールバック値（架電の状況等）を取得


| 開発環境    |バージョン |
|-----------|------------|
| __Laravel__ | 8.83.19 |
| __PHP__     | 7.3.10  |


## Twilioの導入

１，Twilioトライアルアカウントを作成する
　　Twilioに担当者に問い合わせてトライアルアカウントを作成してもらう。
　　Twilioの**アカウントSID**、**AUTHトークン**、**架電元電話番号**を担当者からもらう。

２，Twilioライブラリーをインストールする。

```ターミナル:ターミナル
   composer require twilio/sdk
```
　　参照URL（Twilio公式サイト）
　　https://www.twilio.com/ja/docs/voice/quickstart/php

３，架電通知する
```PHP:TwilioController.php
   use Twilio\Rest\Client;

   // ... 略

   $account_sid   = 'アカウントSID';
   $auth_token    = 'AUTHトークン';
   $twilio_number = "+XXXXXXXXXXX"; // 架電元電話番号
   $to_number     = "+XXXXXXXXXXX"; // 架電先の電話番号
   
   $client = new Client($account_sid, $auth_token);
   $client->account->calls->create(  
     $to_number,
     $twilio_number,

     // オプション設定（下記以外にも多数あり）
     array(
         "timeout" => 30, // タイムアウト設定
         "method"  => "GET",
         "statusCallback" => https://XXXXXXXXXXX, // コールバック送信先
         "statusCallbackEvent"  => ["initiated","ringing","answered",'completed'], // コールバック発生タイミングの設定
         "statusCallbackMethod" => "GET",
         "twiml" =>
               "<Response>
                   <Say language='ja-JP'>受電後の音声を入力</Say>
               </Response>"  
     )
   );
```

４，コールバック値を取得する
```PHP:CallbackController.php
   public function getCallback(Request $request)
   {
        // コールバックステータスを取得
        $callBackInfo = $request->all();
   }
```
　　取得できるコールバック値
```
  'Called' => '架電先電話番号', 
  'ToState' => 'Tokyo',
  'CallerCountry' => 'US',
  'Direction' => 'outbound-api',
  'Timestamp' => 'Sun, 27 Nov 2022 09:16:00 +0000',
  'CallbackSource' => 'call-progress-events',
  'CallerState' => 'CA',
  'ToZip' => NULL,
  'SequenceNumber' => '0',
  'CallSid' => '架電毎に発行されるSID',
  'To' => '架電先電話番号',
  'CallerZip' => 'XXXXX',
  'ToCountry' => 'JP',
  'CalledZip' => NULL,
  'ApiVersion' => '2010-04-01',
  'CalledCity' => NULL,
  'CallStatus' => '架電ステータス',
  'From' => '架電元電話番号',
  'AccountSid' => 'アカウントSID',
  'CalledCountry' => 'JP',
  'CallerCity' => 'OAKLAND',
  'ToCity' => NULL,
  'FromCountry' => 'US',
  'Caller' => '+ーーーーーーーー',
  'FromCity' => 'OAKLAND',
  'CalledState' => 'Tokyo',
  'FromZip' => 'XXXXX',
  'FromState' => 'CA',
```
携帯電話への架電通知では、特定の架電状況が取れない場合もありました。　　

参考URL（Twilio公式ドキュメント）
https://www.twilio.com/ja/docs

どうしてもわからないときは、Twilioのテクニカルサポートの方がたに親切丁寧に対応していただきました。感謝感謝です。

まだまだ技術的も記事の書き方的にも至らないことばかりです。
ご意見、ご指摘ありましたらよろしくお願いします。
Leetcode 1346. Check If N and Its Double Exist

# 1346. Check If N and Its Double Exist

https://leetcode.com/problems/check-if-n-and-its-double-exist/

## アプローチ
### HashMap

```java
class Solution {
    public boolean checkIfExist(int[] arr) {
        HashMap<Integer, Integer> hashMap = new HashMap<>();

        for (int a : arr) {
            hashMap.put(a, hashMap.getOrDefault(a, 0) + 1);
        }

        for (int a : arr) {
            if (hashMap.containsKey(a * 2)) {

                if (a == 0 && hashMap.get(a) < 2) {
                    continue;
                }
                return true;
            }
        }
        return false;
    }
}
```
【個人用】C言語チートシート

# はじめに
C言語再履修用

## 関数
### main
```main.c
#include<stdio.h>

int main() {
	printf("hello\n");

	return 0;
}
```
### 自作関数
```main.c
#include<stdio.h>

int testFunc(int, int);

int main() {
	printf("%d\n", testFunc(1, 2));

	return 0;
}

int testFunc(int inp1, int inp2) {
	int res;
	res = inp1 + inp2;

	return res;
}
```
## 配列
### 既知
```main.c
#include<stdio.h>

int main() {
	int i;
	int arr[] = {1, 2, 3};

	for (i = 0; i < sizeof(arr)/sizeof(int); i++) {
		printf("%d\n", arr[i]);
	}

	return 0;
}
```
### 動的
```main.c
#include<stdio.h>
#include<stdlib.h>

int main() {
	int i;
	int *arr;
	arr = (int*)malloc(sizeof(int) * 3);
	arr[0] = 1;
	arr[1] = 2;
	arr[2] = 3;

	for (i = 0; i < 3; i++) {
		printf("%d\n", arr[i]);
	}

	return 0;
}
```

## ポインタ
```main.c
#include<stdio.h>
#include<stdlib.h>

int main() {
	int val;
	int* pnt;

	val = 23;
	pnt = &val;

	printf("val : %d\n", val);
	printf("pnt : %p\n", pnt);
	printf("pnt : %d\n", *pnt);

	*pnt = 34;

	printf("val : %d\n", val);
	printf("pnt : %d\n", *pnt);

	return 0;
}
```
## コマンドライン引数
```main.c
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]) {
	int i;

	for (i = 0; i < argc; i++) {
		printf("%s\n", argv[i]);
	}

	return 0;
}
```
## 構造体
```main.c
#include<stdio.h>
#include<stdlib.h>

struct testst {
	int val1;
	int val2;
};

int main() {
	struct testst stst1;

	stst1.val1 = 12;
	stst1.val2 = 34;

	printf("val1 : %d\n", stst1.val1);
	printf("val2 : %d\n", stst1.val2);

	return 0;
}
```
【SwiftUI】可変SFSymbolsを試してみた

# はじめに
SFSymbols4から部分的に色を変更できる機能が提供されました。
今回はそれを試してみます。

# サンプルアプリ
![Simulator Screen Recording - iPhone 14 - 2022-11-27 at 18.14.12.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/bc9d8548-7fcb-3b60-7461-906f9550fe3b.gif)

# 実装
```swift
import SwiftUI

struct ContentView: View {
    @State var value: Double = 0.0
    var body: some View {
        VStack(spacing: 50) {
            Image(systemName: "speaker.wave.3.fill", variableValue: value)
                .resizable()
                .scaledToFit()
                .frame(width: 100)
            Slider(value: $value, in: 0...1)
        }
        .padding(20)
    }
}
```

:::note warn
**注意**
variableValueのMAXは`1.0`です。
`10.0`や`100.0`にするとあっという間にMAXになってしまいます。
:::

# 使用できるシンボル
「可変」の欄にある175個
![スクリーンショット 2022-11-27 18.15.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6ac33864-f39d-6c06-06c5-45d966f05029.png)

# おわり
これかなり便利です