OmniAICreator/Qiita-1.07M huggingface dataset:
[Functions] GitHub Actions でデプロイ[TODO] - Azure - Memo

# 概要
(自分用メモ)

- [目次: Azure Development](https://qiita.com/search?sort=&q=tag%3AAzure+tag%3Adevelopment+user%3Ashokkaa)


# 試したこと

## Azure cloud上にFunctionAppを準備
```
RG=g2x04
LOCATION=westus
FUNCAPP=${RG}a1
DBACC=${RG}db
DB=${DBACC}1

az group create -n $RG --location $LOCATION
az storage account create -n ${FUNCAPP}s  -l $LOCATION -g $RG 
az functionapp create -n $FUNCAPP -c $LOCATION -g $RG --storage-account ${FUNCAPP}s --os-type Linux --functions-version 4 --runtime node --runtime-version 16
#az cosmosdb create -n $DBACC -g $RG
#az cosmosdb sql database create -a $DBACC -g $RG -n $DB
```

## ローカルでFunctionプロジェクト作成/デバッグ
```
func init . --worker-runtime node --language typescript 
FUNC=fgrpql1
func new -n ${FUNC} --template "HTTP trigger"
npm install
npm start
```

## Functionsのデプロイ(TODO:Error)
```
func azure functionapp publish $FUNCAPP --publish-local-settings -y
```

## GitHubのActions設定

1. [Azure Portal](https://portal.azure.com/) ➔ 関数アプリ ➔ 概要 ➔ 発行プロファイルの取得
  ➔ ダウンロードして保存
2. [GitHub](https://github.com/) ➔ リポジトリ ➔ Settings ➔ Secrets/Actions ➔ New repository secret
  ➔ Name: `AZURE_FUNCTIONAPP_PUBLISH_PROFILE`
  ➔ Secret: 発行プロファイルの内容(xml)をそのままコピー
  ➔ Add Secret


## workflows(デプロイスクリプト)の準備とデプロイ
> https://github.com/Azure/actions-workflow-samples/blob/master/FunctionApp/linux-node.js-functionapp-on-azure.yml
を　`.github/workflows` にコピー

```:linux-node.js-functionapp-on-azure.yml 編集
env:
  AZURE_FUNCTIONAPP_NAME: g2x04a1      # set this to your application's name
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'  # set this to the path to your web app project, defaults to the repository root
  NODE_VERSION: '16.x' 
```

```:commit/push
git commit
git push
```

[GitHub](https://github.com/) ➔ リポジトリ ➔ Actions からデプロイ状況を確認。
[Azure Portal](https://portal.azure.com/) ➔ 関数アプリ(FUNCAPP) ➔ 関数(FUNC) ➔ 関数のURLの取得 ➔ ブラウザでURLを開き応答を確認
`This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.`

# 参照

https://learn.microsoft.com/ja-jp/azure/developer/github/github-actions

https://github.com/marketplace?query=Azure&type=actions

https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-how-to-github-actions

https://qiita.com/okazuki/items/a6fc920719a691006759

https://techcommunity.microsoft.com/t5/apps-on-azure-blog/graphql-on-azure-part-1-getting-started/ba-p/1537359
DatabricksのBloomフィルターインデックス

[Bloom filter indexes \| Databricks on AWS](https://docs.databricks.com/optimizations/bloom-filters.html) [2022/9/8時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

[Bloomフィルター](https://en.wikipedia.org/wiki/Bloom_filter)インデックスは、特に任意のテキストを含むフィールドなど、特定のカラムのデータスキッピングを可能にする空間効率性の高いデータ構造です。

# Bloomフィルターインデックスの動作原理

Bloomフィルターは、定義された偽陽性の確率(FPP)を用いて、確実に*ファイルにデータが無い*、あるいは、*おそらくファイルにある*ということを宣言することでオペレーションを行います。

DatabricksではファイルレベルのBloomフィルター、それぞれのデータファイルには、関連づけられた単一のBloomフィルターインデックスファイルが割り当てられます。ファイルを読み込む前に、Databricksはインデックスファイルをチェックし、インデックスによってファイルがデータフィルターにマッチするかもしれないということが示された場合に*のみ*ファイルが読み込まれます。インデックスが存在しない、あるいはクエリーされたカラムにBloomフィルターが定義されていない場合、Databricksは常にデータファイルを読み込みます。

Bloomフィルターのサイズは、Bloomフィルターを作成したセット内のエレメント数と必要となるFPPに依存します。FPPが低いほど、エレメントごとに使用されるビットの数は高くなり精度は高まりますが、ディスク容量を多く消費し、ダウンロードが遅くなります。例えば、FPP10%にはエレメントあたり5ビットが必要となります。

Bloomフィルターインデックスは非圧縮のParquetファイルであり、単一の行を保持します。インデックスは、データファイル内のサブディレクトリ`_delta_index`に格納され、サフィックス`index.v1.parquet`が追加されたデータファイルと同じ名称を使用します。例えば、データファイル`dbfs:/db1/data.0001.parquet.snappy`のインデックスの名前は`dbfs:/db1/_delta_index/data.0001.parquet.snappy.index.v1.parquet`となります。

Bloomフィルターは、以下の(入力)データタイプのカラムをサポートします：`byte`、`short`、`int`、`long`、`float`、`double`、`date`、`timestamp`、`string`。NullはBloomフィルターに追加されませんので、Nullに関係するフィルターの場合は常にデータファイルを読み込みます。Databricksでは、以下のデータソースのフィルターをサポートしています：`and`、`or`、`in`、`equals`、`equalsnullsafe`。Bloomフィルターはネストされたカラムでは*サポートされません*。

# 設定とリファレンス

Bloomフィルターはデフォルトで有効化されています。Bloomフィルターを無効化するには、セッションレベルで設定`spark.databricks.io.skipping.bloomFilter.enabled`を`false`に設定します。

- [CREATE BLOOM FILTER INDEX \(Delta Lake on Databricks\)](https://docs.databricks.com/spark/latest/spark-sql/language-manual/delta-create-bloomfilter-index.html)
- [DROP BLOOM FILTER INDEX \(Delta Lake on Databricks\)](https://docs.databricks.com/spark/latest/spark-sql/language-manual/delta-drop-bloomfilter-index.html)

# Bloom filter indexの一覧表示

インデックスの一覧を表示するには、以下を実行します。

```scala:Scala
spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))
```

サンプル:
![](https://docs.databricks.com/_images/show-bloomfilter-indexes.png)

# ノートブック

以下のノートブックでは、Bloomフィルターインデックスを定義することで、どのように「藁の中から針を探す」クエリーをスピードアップしているのかをデモンストレーションしています。

## Bloom filterデモノートブック

https://github.com/taka-yayoi/public_repo/blob/main/bloom_filter_index/Bloom%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E3%83%87%E3%83%A2.sql

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
GitHub Desktopを使ってスマートにリポジトリーを作成する

# はじめに
GitHubDesktop,めちゃ便利です😄
ポチポチしているだけでほとんどの事が出来てしまいます。

最初のリポジトリーの作成の所だけつまずいた所があったので、備忘録的に忘れないように残しておきます。
私がXcodeを使用しているので、その例を紹介します。

# 1.　Xcodeでプロジェクトを作成する
いつも通りで大丈夫
# 2.ターミナルで作成したディレクトリにgit initする
gitを作成しておかないとGitHubDesktopでディレクトリーを指定した際に認識してくれないので、これだけはターミナルを開いて、コマンドを使用しましょう😄
```
cd 作成したディレクトリ
```
で作成したディレクトリーへ移動してから、
```
git init
```
を実行しましょう!!
# 3.GitHubDesktopを開いてAdd Exsiting Repository...を選択
![スクリーンショット 2022-10-04 7.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428088/8b97246a-c6e8-a4e1-cf40-92ae7f29cd0a.png)

![スクリーンショット 2022-10-04 7.19.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428088/044e0717-ed67-ddee-46a8-7e86d4d8e4be.png)

Local Pathに先ほど作成したディレクトリを指定しましよう!!

# 4. gitと紐づいたので、あとはcommit→pushすればOK👍
コンテナで環境構築した話

# ことの顛末
授業でCentOSStreamの環境構築をVMWareでやれと言われたけれどVMWare入れるの面倒+せっかくDockerあるので使ってみたい
(ちなみにLinuxのシェルが動かせればいいという話なのでこういったことをしています 無理にWindowsでしか動かないアプリとかをいきって「拙者はArchですぞ！！ｗｗｗブフォｗｗｗ」とかは違うのできちんと教科担任に確認を取りましょう)
# 環境構築のための環境構築
記事の環境
- Windows 10
- Docker 20.10.17

https://docs.docker.jp/docker-for-windows/install.html

おとなしく公式のドキュメントを読みながら進めましょう
おそらく詰まるのはWSLの有効化だのなんだのだと思いますが調べればいけるので頑張ってください

```
docker version
```
で正常にバージョン情報やらが表示されればOKです
# CentOSStreamの環境構築

## イメージを引っ張ってくる

授業での指定がCentOSのStream9だそうなのでそれに合わせてイメージを引っ張ってきます

```bash
docker pull quay.io/centos/centos:stream9
```

イメージが正常にひっぱれたかの確認
```bash
docker image ls

# こんなのが帰ってくればいい
# quay.io/centos/centos   stream9   047d6e0a5993   2 weeks ago     155MB
```

## コンテナを走らせる

持ってきたイメージはあくまで電源は入っていないハードのようなものなので、電源を入れましょう

```bash
C:\Users\hoge>docker run -it --name centos quay.io/centos/centos:stream9
[root@287219043f92 /]# uname -a
Linux 287219043f92 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux  
[root@287219043f92 /]# cat /etc/redhat-release
CentOS Stream release 9
[root@287219043f92 /]#      
```

バックグランド実行の場合

```bash
C:\Users\hoge>docker run -it -d --name centos quay.io/centos/centos:stream9
C:\Users\raiga>docker exec -it centos /bin/bash
[root@75119db105d2 /]#
```

- `-i` 標準入力を受け付ける
- `-t` TTYを仮想コンテナに割り当て
- `--name` コンテナに名前を付ける
- `-d` バックグラウンド実行 コンテナが走っているかは`docker ps`などで確認できる

# 補遺
## コンテナとホスト間でのファイル共有

```bash
docker run -it -d --name centos quay.io/centos/centos:stream9 --mount type=bind,src=/path/to/host_dir,dst=/home/container_dir
```
コンテナ環境は破棄すると中で作業したファイルは消えてしまうため、ホストのディレクトリをマウントしておきましょう

## Desktop でやりましょう

ここまでCLIのやり方をまとめてみましたが、全部DockerDesktopでやったほうがいいです。
特にファイルマウントはRUNを実行する際の`Optional Setting`みたいなやつの`bind`でディレクトリを指定すれば簡単に文とができます。

Desktop でうまく動かせないな、と感じたらコマンドはたたいてみましょう

## 修正
CentoOSはCentOS Streamとは違うそうです。エンタープライズ向けと最新版(Nightlyのようなもの)らしいです。
人を動かす

https://www.amazon.co.jp/s?k=%E4%BA%BA%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99&adgrpid=52750409749&gclid=Cj0KCQjwkOqZBhDNARIsAACsbfLPzB5uCQbBzHbjcfyGVZTqC1Wn6_YWqPlpJHjPfXicgTMGlhBvMbgaAmbYEALw_wcB&hvadid=611273453181&hvdev=c&hvlocphy=1009255&hvnetw=g&hvqmt=e&hvrand=8774056136251420613&hvtargid=kwd-329026079910&hydadcr=27302_14587082&jp-ad-ap=0&tag=googhydr-22&ref=pd_sl_4hlpxvafxh_e

背景
最近、仕事でいろいろあり、自分がやられてきたことは正しかったのか確認したく、本書をてにとりました。
本書はかなり前に購入したものの、ちゃんと読んだことがなかったです。
コミュニケーション、交渉、人材育成に関することが学びたいと思いました。

本書のテーマ
「人を動かす」をテーマに人に好かれる原則、人を説得する原則、人を変える原則、幸せな家庭を作る原則が、構成する要素とそれらの実例、ポイントが書かれています。
事例はかなり昔のものになっていますが、今読んでも全く遜色はなく、多くの気づきを得られる本です。

個人的なポイント
1. 他人を叱りつけるのは愚の骨頂
他人のアラ探しはなんの役にも立たない。
指摘された相手はすぐさま防御態勢をしいて、自尊心が傷つき、反抗心を起こす。

2. 人は重要人物たらんとする欲求がある
人間は何を欲しがるか？→偉くなりたいという願望もその中の一つ→人間誰しもお世辞を好む。
お世辞を言われる→重要感が増す→偉くなったように思える。

3. 人の熱意を呼び起こす
奨励が必要。どんな人にもそれをやることで熱意を呼び覚ますことができる。
でも、一般的には完全に反対。
気に入らなければめちゃくちゃに言う、気に入れば何も言わない。

4. 笑顔で接する
無償で与えられるもの。
休養、光明、太陽、解毒剤を与えら得る。

5. 議論はしないほうがいい
議論にたとえ勝っても負けている。
徹底的に相手をやっつけてもその結果、相手は気を良くはしない。劣等感を持ち、自尊心を傷つけ、憤慨する。
議論に負けてもその人の意見は変えられない。
議論に勝つ方法は、議論を避けること。

6. 人は変えられない
人を無理やり自分の意見に従わせることはできない。
優しい態度で話し合えば、相手の心を変えることもできる。

7. 人を罵っても意味はない
向上心を摘み取ることになるだけ。
元気づけることでやれると思い込むことができ、相手に自分の優秀さを見せたいと思える。

一番心に残ったこと
「人を変えることはできないんだ」という部分です。
自分のことに置き換えて結論を考えると、むりやり変えようとされても変わることはできませんでした。
これが、接し方が違かったら、結果は違ったかもしれません。

言われる方が変わらないのと同じように、言う方も変わらないんだと思います。
厳しく言う事しかできない人が、この本を読んでその日から優しく接しようなんてことは、きっとできないです。

この考えを持った上で、人と接すれば色んな場面で自分の行動をかえらえると実感しました。

本書から得た具体的なアクション
テーマをもとに実践方法が様々書いてありましたが、これらをすべて実践する必要はないんだと思いました。
自分が必要とする部分をピックアップすべきです。
各項目をやる理由、本質を理解することは必須です。
友人、恋人、家族、職場・・・様々なシーンで本書から得たヒントをどう使うか。

私が実践したいと思ったことは以下です。
・笑顔でいる
・聞き上手になる
・アラ探しをしない
・ほめる
・議論には負けて勝つ

まとめ
1999年に書かれた本でありながら、今もなお語られ続けている意味がわかる内容でした。
人は変えられない、変えようと厳しく接しても意味はない、優しく接したほうがいい、その方法はどんな物があるか、実例は何かをしっかりと書かれています。
ある意味、「デール・カーネギー教」になるかもしれません。

だから、「いやいや、人は叱りつけるべきだよ」って人は共感されないのかもとも思います。
私も本書の全てに同意というわけではありませんし、アメとムチの使い分けも必要なのではないかと感じましたし。
いいところをピックアップして活かすのがいいのではないかと思いました。
なにかあったときに「デール・カーネギーはあんなこと言ってたな〜」みたいな。

あと、本書は具体的なやり方を書かれていますが、ただ真似ても意味はないのではないかなと思いました。
読解力や話の筋がわかってないとこのやり方は上っ面だけになってしまうかもしれないです。
そのあたり、別のブログでも書いてますが、読解力や文脈力は必要だし、関連してくるスキルだなと感じました。

具体的なアクションもイメージできるので、なにかあったときにまた読みたいなと思える本です。
MAPE（平均絶対パーセント誤差）を求める(SPSS Modeler データ加工逆引き8-11)

# MAPE（平均絶対パーセント誤差）を求める

![スクリーンショット 2022-09-23 10.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c12bd652-f15f-61f2-163f-ef76515c5413.png)

## 1.想定される利用目的

・時系列予測モデルの性能評価
・実装後の時系列モデルメンテナンスのための性能指標の算出
・機械学習モデルによる時系列予測を行った場合の性能評価


## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/mape.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-09-23 10.50.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/57dc23ea-a85a-4a90-b7ee-5a9ffe975e4d.png)

a.入力するデータは以下の通りです。日毎の来場者の実績と予測のフィールドの３列です。
![スクリーンショット 2022-09-23 10.54.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e0cb5587-6a05-305a-4156-61c834af1bd4.png)

b.[時系列]グラフノードを実行します。実績と予測のズレを絶対値にして実績で割ったMAPEを求めます。
![スクリーンショット 2022-09-23 10.55.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b5d01e1b-7c31-602c-9f67-0d9cf0db7b2d.png)

c.[時系列]モデルナゲットを編集します。時系列ノードで予測すると[MAPE]が出力されます。平均して±7.3%の誤差のあるモデルだとわかります。
![スクリーンショット 2022-09-23 11.22.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e4118296-2bef-b02c-0f55-8ad3b087ad78.png)

[時系列]ノードを利用した予測モデルの作成は以下を参照ください。

https://qiita.com/416nishimaki/items/f7842af5af1d6410526d

#### MAPEを計算する

d.[フィールド作成]ノードを編集します。

![スクリーンショット 2022-09-23 11.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1c59cf07-5044-7ede-9c4b-4cc59e142d5c.png)

[式ビルダー]を起動して[数値]関数から絶対値[abs]を選択する方法が便利です。

![スクリーンショット 2022-09-23 11.31.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0fd4ec19-efe0-0eb1-1826-5d4ad73803f8.png)

e.[レコード集計]ノードを編集します。
![スクリーンショット 2022-09-23 11.00.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0084abeb-e8e3-32e4-b1c3-f8eca6a72035.png)

[プレビュー]します。MAPEが表示されました。
![スクリーンショット 2022-09-23 11.01.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e3479cbd-7da4-b869-f921-0c0406c276e2.png)

#### 注意事項

今回はモデルナゲットのMAPEと比較するために[メニュー]>[ストリームのプロパティ]で表示する小数点桁数を揃えています。

![スクリーンショット 2022-09-23 10.58.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d1df841f-3c37-616d-7524-ba8853bad232.png)


## 4.参考情報

#### MAPEを取り上げている記事

https://www.ibm.com/blogs/solutions/jp-ja/spssmodeler-push-node-14/

https://qiita.com/kawada2017/items/52d9639e82f5d18b4a42

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
OpenJDKとJDKディストリビューション

https://qiita.com/yoshioterada/items/38cc9e5e0c95f8be84e1

https://qiita.com/yoshioterada/items/2a54dfb60a02a26a2c35

JDKディストリビューション、なぜこんなに種類があるのか。
[OpenJDKと各種JDKディストリビューションの情報源まとめ #minjava](https://qiita.com/yamadamn/items/2dd26a014791b9557199)
以下等がわかりやすかったので自分のためにまとめていたものの蔵出しです... 
[JDK、Oracle JDK、OpenJDK、Java SEってなに？](https://qiita.com/nowokay/items/c1de127354cd1b0ddc5e)

## [Java SEとは](https://www.javadrive.jp/start/install/index5.html#section1) 
- Java Platform, Standard Edition の略。
- Java で使用される API をまとめたもの。
- API とは Application Programming Interface 、この場合は Java の機能やデータなどを利用するための呼び出し方を定義したもの。
- Java で提供されている API は非常に多いが、 Java SE はその中でも基本となる API をまとめたもの。
- 例えば java.lang.String クラスなど。
- Java SE は定期的にバージョンアップされていてどのバージョンの Java SE なのかが分かるようにバージョンを表す番号を合わせて記述します。例えば Java SE 8 とか Java SE 13 とか。

## [Java EE, Java MEとは](https://www.javadrive.jp/start/install/index5.html#section2)
- Java EE とは Java Platform, Enterprise Edition の略で大規模なシステムを開発する場合に必要となる API が含まれます。
- Java EE は Java SE の拡張機能。
- 他にも家電などの組み込み機器やモバイルデバイスで動作するアプリケーションを開発するために使用する API がまとめられた Java ME がある。 Java ME とは Java Platform, Micro Edition の略。

## JVMとは
- Java Virtual Machine の略で Java で作成されたアプリケーションを Windows や Mac OS などで動かすために必要となるアプリケーション。

## JREとは
- Java Runtime Environment の略で Java のプログラムを実行するためのセット。 Java 実行環境とか Java ランタイムなどと呼ばれる。JRE には先に解説した JVM や対応する API がセットになっている。

以前は JRE だけを単独でインストールすることが可能だったが、 2021年2月 現在では JRE は単独で配布されておらず JDK をインストールする必要がある。

## JDKとは
- Java Development Kit の略で Java のプログラムの開発や実行を行うためのプログラムのセット。Java 開発環境などと訳される。

## サマリ: [JDK 9以降のJDKの選び方と有償化について](https://www.javadrive.jp/start/install/index5.html#section2)
> - Oracle社は2017年9月、JDKの提供サイクルとライセンス方式に関して、新たなリリース・モデルを発表した。
> - また Oracle社は 2019年4月 にライセンスを変更し、Oracle JDK は個人利用・開発目的以外の場合は有償でのライセンス契約が必要となった。

https://www.oracle.com/jp/technical-resources/article/java/ja-topics/jdk-release-model.html

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

> - Oracle JDK を商用で使用する場合は何らかの有償での契約が必要。商用で JDK を利用したい場合には必ず有償しかないというわけではなく、Java の開発は OpenJDK プロジェクトとして Oracle 社や SAP社、 Red Hat社、 Google 社、Amazon 社など複数の会社や個人によって行われている。そして OpenJDK のソースコードを元に各社がバイナリを提供している。
- Oracle 社も OpenJDK をベースに Oracle JDK を提供すると同時に、商用でも無償で利用可能な OpenJDK のバイナリを提供している。以前は Oracle JDK でしかなかった機能は順次 OpenJDK に移されているため機能的な差異も縮小。
- どの JDK を利用するのかについて、 Oracle 社が提供するものであれば長期サポートが必要であれば Oracle JDK 、長期サポートが必要なく商用でも無償で利用したい場合には Oracle OpenJDK となる。

## まとめ

https://qiita.com/yamadamn/items/2dd26a014791b9557199

今後とも情報Updateが必要だなと思いつつのメモでした。
[UE5] ジオメトリコレクション上のクラスターのConvexコリジョンについて


# コリジョンが生成されたりされなかったり？

まずはこの動画を見てください。

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="en" dir="ltr">Whether convex collision is created on a cluster <a href="https://t.co/AX1prI7eLu">pic.twitter.com/AX1prI7eLu</a></p>&mdash; Takashi.Suzuki (@wankotank) <a href="https://twitter.com/wankotank/status/1577004551412092960?ref_src=twsrc%5Etfw">October 3, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

同じようにジオメトリコレクションを作ってもクラスター(末端ではない部分)のコリジョンが有効になる場合と、クラスターのコリジョンが生成されず、破砕前から末端のコリジョンが使われるケースがあります。上の例だと左側の細いゲートのコリジョンは破砕前から分割されており、ゲートの中を通り過ぎることが出来ます。一方、真ん中の太いゲートのコリジョンは、アーチ形状の真ん中に穴が開いているのに関わらず全体を覆うようなボックスがつくられていて真ん中の穴を通ることが出来ません。

このような差はなぜ生まれるのでしょうか？

# 答えはフラクチャーモードのConvexツールの中に

Convexツールの中に **Can Exceed Fraction** というパラメータがありデフォルトで0.5が設定されています。

<img width="400" alt="Can Exceed Fraction" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464248/8494c877-bbcd-2dd7-dceb-0c6b8174c9a5.png">

この値は本来の形状の体積に比べて、**クラスター上に生成されるコンベックスコリジョンの体積がどのくらい超過できるかを表しており**、デフォルトの0.5の場合本来のボリュームの150%以下の体積であればコンベックスコリジョンが生成されるということを示します。
つまりここに3が設定された場合400%までのコンベックスコリジョンを許容するということになります。

この値を超過してしまった場合、クラスターのコリジョンは生成されず一段階下のコリジョンが有効化されます。つまり末端の破片に対してこのパラメータは反応しないことに注意してください。

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="en" dir="ltr">Editing convex collision on GC <a href="https://t.co/z3gxjvozRu">pic.twitter.com/z3gxjvozRu</a></p>&mdash; Takashi.Suzuki (@wankotank) <a href="https://twitter.com/wankotank/status/1577003604837163008?ref_src=twsrc%5Etfw">October 3, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# 例

はじめの動画にあったジオメトリコレクションのパラメータを変更してみます。
左側の細いゲートのルートクラスターに Can Exceed Fraction = 5.0 ---> くぐれないように
中央の太いゲートのルートクラスターに Can Exceed Fraction = 0.2 ---> ルートのコリジョンが消え、逆にくぐれるように
右側の凸型メッシュのルートクラスターに Can Exceed Fraction = 1.0 ---> ルートのコリジョンが有効化され、斜めに空中に浮いたように見えるように

<blockquote class="twitter-tweet" data-conversation="none" data-cards="hidden" data-partner="tweetdeck"><p lang="en" dir="ltr">Modified <a href="https://t.co/pbnIRQzf2E">pic.twitter.com/pbnIRQzf2E</a></p>&mdash; Takashi.Suzuki (@wankotank) <a href="https://twitter.com/wankotank/status/1577010807203717120?ref_src=twsrc%5Etfw">October 3, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# リンク
Chaos Destructionについて他にもわからないことがあれば以下のマテリアルが助けになるかもしれません。併せてごらんください。

* Epic Developer Community - Chaos Destruction - Fracture and Clustering
https://dev.epicgames.com/community/learning/tutorials/k84m/unreal-engine-chaos-destruction-fracture-and-clustering
* Chaos Destruction 入門[CEDEC2022]
https://www.youtube.com/watch?v=XPnjleasU6Y
2022/10/4主にITとかセキュリティの記事

PHPテンプレートエンジン「Twig」に脆弱性 - 「Drupal」にも影響
https://www.security-next.com/140202

UberやRockstar Gamesへの不正アクセス、「多要素認証疲れ」攻撃だった(10/2)
https://www.zaikei.co.jp/article/20221002/691695.html

企業のデータ侵害にかかる1回のコスト、世界平均で435万ドルと過去最高を記録(10/2)
https://dime.jp/genre/1474039/

[Ethereum] スマートコントラクトをProxyパターンで更新可能にする方法(10/2)
https://qiita.com/biga816/items/b4f745e67588e8da7ed1

MetaMask(メタマスク)モバイル・スマホの使い方を解説！(10/2)
https://crypto-times.jp/metamask-mobile/

GDPR関連資格をとろう！QAで学ぶGDPRとCookie規制(10/1)
https://www.corporate-legal.jp/matomes/4990

一部のWindowsデバイス、Spotifyが無断インストールとの報告(10/2)
https://www.zaikei.co.jp/article/20221002/691694.html

デジタル庁のガバメントクラウドに4サービス採択、マイナカードスマホ搭載検証に利用(10/3)
https://xtech.nikkei.com/atcl/nxt/news/18/13826/

進化するPoEや統合管理機能
Part3 動向を知る(10/3)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/091500144/091500003/

レイヤーや機能・役割で分類
Part2 種類を学ぶ(10/3)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/091500144/091500002/

MACアドレスで転送先を判断
Part1 仕組みを理解する(10/3)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/091500144/091500001/

ローミングって何？(10/3)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/041800014/091500062/
【UE4VRゲーム制作日記】~モデリング編~

# こちらはズさんの初めて作るUE4のVRゲームの制作日記です。
この記事は高専4年創造工学（制作開始：4月～）でのゲーム制作の思い出として書き始めたものです。
苦労したこと、覚えておきたいこと、思ったことなどつらつらと。
コンセプトやデザイン制作からゲームシステム、ハード（コックピット）制作を完成に至るまで様々なことを書いていこうと思います。
作品が完成するまで書き溜めている日記になっていますので、後々公開していきます。

## モデリングについて
今回は主が作ったモデル達についてざっと紹介していこうと思います。
blenderとsubstancepainterで制作したのですが、blenderはかなり前から触ってたので特に詰まるところもなく制作できました。
リアルなモデルにしようとしたのですが、メンバーから「気持ち悪い」との批評が殺到したので少し機械チックに作り直すことに。
これがゲーム内で襲ってくるのか、、とにまにま想像しながら制作を進めました。　

少し、詰まったことは、モデルをUE4へインポートしたときメッシュが透けてしまったのですが、面が反対を向いてることが原因だということで、blenderにて面の方向をそろえ、無事修正できました。

ボーン、リグ制作については別途記事を上げようかなと思っています。
### 蜂
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/40c3053f-5f65-a149-de10-e0a883e38219.jpeg"width="50%">
（こだわりポイントなんですが、実はこれ、触覚の部分が銃になっているんですよ。）
#### 以下はそれぞれソリッドモードとワイヤーフレームになります
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/ea894910-861c-7aa8-2ac8-c2df67f7932d.png"width="45%"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/68bb7b43-d16f-b335-c80a-0102331cbf7c.png"width="45%">

#### SubstancePainter
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/7648daa6-f70c-15c7-f84f-587fae351122.png"width="70%">
サブぺ、買った当初すっっっっっっっごく感動して2日ぐらい、ずっと触ってました。
ですが、なかなか思うように使いこなせず、いまだに苦戦しております。

### 蜂の巣
これのモチーフは完全にどうぶつの森ですね。（笑）
一目でわかるようなデザインにしようと思ってこのデザインになりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/2fe2bcdb-1fc7-2623-2676-b5b9d8b2ca81.png"width="45%"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/d0365da8-aaa2-0a13-d0da-90f5dd4c0445.png"width="47%">

### 手
こちらもリグを適応しておりますので、別途記事を書こうかなと思っています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/3109696c-8ebf-7c3c-11e6-2a25c09a763a.png"width="47%"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/2ab5a2ae-06b0-4149-38a8-f7d00155a204.png"width="46.5%">

### 顔
こちら、初めはスカルプトからリトポロジーを行って制作していたのですが、素晴らしいアドオン様を発見致しましたので、そちらを使用させていただくことにしました。これはもちろん、養蜂着になります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/1fea3039-a3bf-49c7-75c7-381ddf6edf20.jpeg"width="50%"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/9dcbca91-b599-d11e-3f85-ac37318b2377.jpeg"width="48.5%">


### ロゴ
blenderはphotoshopと謳われております通り、なんでもできちゃう万能ソフトでございます故、ロゴも制作致しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/ff1f7a47-bab7-860c-4f1c-896dd71359e8.png"width="80%">
【UE4VRゲーム制作日記】~UE4 メッシュの破壊~

# ズさんの初めて作るUE4のVRゲームの制作日記です。
この記事は高専4年創造工学（制作開始：4月～）でのゲーム制作の思い出として書き始めたものです。
苦労したこと、覚えておきたいこと、思ったことなどつらつらと。
作品が完成するまで書き溜めている日記になっていますので、後々公開していきます。

# UE4で簡単に岩を破壊する方法の備忘録
1, pluginから【apex destruction】を有効にする。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/890f08a0-6d71-55f4-8c2e-e8f9001172b3.png"width="100%">

2, オブジェクト右クリックから【create destruction mesh】を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/168618a2-6ac4-885a-e795-1cccecb4ed1b.jpeg"width="80%">

3, 押す
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/b44214a5-fdfa-8779-03d1-1575bce4c0f0.jpeg"width="80%">

4, 形状をお好みに調整
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/e5c06902-56fd-43e3-a50e-1f137050a1cf.jpeg"width="80%">
①	細かさ
②	パターン変更

5, detailsパネルから物理演算をオンにする
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653576/6deecdc9-3605-014c-d92a-95b185523d9a.jpeg"width="80%">

6, 完成
SwiftUIで@StateObjectをinitで初期化する

以下のように`_`をつけて代入してやることで初期値を設定できました。

``` xxx.swift
struct XxxView: View {
    @StateObject var xxxVM: XxxViewModel
    @State var name: String = "";

    init(user: User) {
        _xxxVM = StateObject(
            wrappedValue: XxxViewModel()
        )
        _name = State(initialValue: user.name)
    }


    init(url: URL) {
        _xxxVM = StateObject(
            wrappedValue: XxxViewModel(url: url)
        )
    }
```
【Laravel】Laravel MixではなくViteでSCSSを使う

Laravelのビルドツールとして長らくデフォルトだったLaravel Mix（webpack）が2022/6/28からViteに変わったようです。
※以下、Laravel sail環境を前提に記載していきます。

## 1. 設定ファイル編集

vite.config.jsを編集します。Laravel Mixではwebpack.mix.jsでしたね。
```js:vite.config.jsデフォルト
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/css/app.css','resources/js/app.js'],
            refresh: true,
        }),
    ],
});
```
デフォルトだと上記のようにinput部分はapp.cssとapp.jsだけなので、下記のようにscssも追加します。
```js
input: ['resources/css/app.css', 'resources/scss/app.scss','resources/js/app.js'],
```
**※WindowsのWSL2上で開発している場合は、ホットリロード（変更の自動反映）を有効にするために、以下のようにserverの設定も追加する必要があります。**
```js
    plugins: [
        laravel({
            input: ['resources/css/app.css', 'resources/scss/app.scss','resources/js/app.js'],
            refresh: true,
        }),
    ],
    server: {
        hmr: {
            host: 'localhost'
        }
    }
```
参考URL

https://github.com/laravel/vite-plugin/issues/49


## 2. scssファイル作成
1で追加したパス（resources/scss/app.scss）通りにscssフォルダとapp.scssを作成します。

## 3. 読み込み
blaldeファイル等の読み込みたい箇所に下記を記述します。
Laravel Mixではコンパイル後のソースのパスを記述しましたが、Viteの場合はコンパイル前のソースのパスを記述します。
```:app.blade.php等
@vite(['resources/scss/app.scss', 'resources/js/app.js'])
```

## 4. Viteやsassのインストール
sail環境であればnpmはデフォルトでインストールされているはずなので、下記コードでpackage.jsonに書かれているVite等のライブラリをインストールします。
```
$ sail npm install
```
sassはpackage.jsonに書かれていないので、下記コマンドで別途インストールします。
なお、インストールが完了するとpackage.jsonにもsassが自動で追記されます。
```
$ sail npm add -D sass
```

## 5. 実行
**開発時**
```
$ sail npm run dev
```
上記コマンドを実行した上でscssファイルの内容を修正するとブラウザへ自動反映されます。Laravel Mixで言うところの`npm run watch-poll`ですね。実行中はそのターミナルは使用できなくなるので、別のターミナルを立ち上げる必要が有ります。終了する場合は control + c キーです。

**本番用**
```
$ sail npm run build
```
上記コマンドを実行すると、publicディレクトリ内にbuildというフォルダとコンパイル済のcssファイル等が出力されます。なお、複数のscssファイルを統合して１つのcssに書きだしたい場合は、普通にscssフィル内で`@use`等を使えばOKです。（`@import`は廃止になるらしい）
trioによる並行処理⑥（try~finallyの罠と回避策）

[目次](https://qiita.com/Kyosuke_Ichikawa/items/b7fdffcbfe00773074a6)

## try~finallyの罠
[trio](https://trio.readthedocs.io/en/stable/index.html)を使っている時、try~finallyの構文に注意が必要です。例えば
```python
async def func():
    try:
        print("try start")
        await trio.sleep(1)
        print("try done")
    finally:
        print("finally start")
        await trio.sleep(0)
        print("finally done")
```
のような関数があるとき、finally内の全処理は常に実行されると思ってしまう方も居るのではないでしょうか。
しかし、下記サンプルが示すようにそうなりません。

```python:サンプル
import trio

async def func():
    try:
        print("try start")
        await trio.sleep(1)
        print("try done")
    finally:
        print("finally start")
        await trio.sleep(0)
        print("finally done")

async def main():
    with trio.move_on_after(0.5):
        await func()

trio.run(main)
```
```:実行結果
try start
finally start
```
"finally done"が出力されていません。
つまり、```move_on_after```や```CancelScope```などのブロック内でtry~finallyを使った場合、タイムアウトやキャンセルで処理が中断していれば、finally内の```await 非同期関数()```以降の処理が実行されません。
これを認識していないとバグの原因になってしまいます。

## 回避策
[前回](https://qiita.com/Kyosuke_Ichikawa/items/8e95d53104102d1660ca)紹介した```CancelScope```の```shield```によって回避できます。
```python:サンプル
import trio

async def func():
    try:
        print("try start")
        await trio.sleep(1)
        print("try done")
    finally:
        with trio.CancelScope(shield=True):
            print("finally start")
            await trio.sleep(0)
            print("finally done")

async def main():
    with trio.move_on_after(0.5):
        await func()

trio.run(main)
```
```:実行結果
try start
finally start
finally done
```
shieldをTrueにするとブロック外のタイムアウトやキャンセルによって終了しなくなるため、finally内の全処理を実行することができました。
独習プログラミングの備忘録　2 後編　【式と演算子】

日曜日はお休みしていました。

～学んだこと～
・キャスト演算子(cast operator)は強制的に型を変換できるが、情報の一部が失われる
(double型3.2 → int型3)

・異なる型で算術演算を行うと、型をそろえてから処理される
(8.5 / 2 → int型の2は、double型の2.0に変換)

・プレースホルダ(place holder)はデータ型の用途によって使い分ける
(整数 → %d、小数 → &f、文字列 → %s)

・typedef char ○○○[1024]は、最大千文字程度の文字列を利用可能にするおまじない

・printf()の使用には、#include ≪stdio.h≫が必要 (画面に表示)

・scanf()の使用には、#include ≪stdio.h≫が必要 (文字列入力を受け付ける)

・atoi()の使用には、#include ≪stdlib.h≫が必要 (文字列を整数に変換)

・srand((unsigned)time(NULL))の使用には、#include ≪stdlib.h≫と#include ≪time.h≫が必要
(乱数生成の準備)

・rand()の使用には、#include ≪stdlib.h≫が必要 (乱数を生成し、範囲を指定)

～感想～
乱数生成は、面白みとハラハラドキドキを出すために様々な場面で使用されている。
(パーティゲームのさいころ、RPGの与えたダメージ、FPS・TPSの弾道のブレ)
これらをマスターして簡易的なゲームを制作してみたいと感じた。
Hatena REMOTE INTERNSHIP 2021に参加してきました！



# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2021-09-30に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/432a60c1-5eb1-dead-7e03-cc95b070adce.png)


この記事はシス研Advent Calendar 2021の秋の技術記事収穫祭1日目の記事です。

詳細はこのURLをクリックすると、閲覧可能です。
[https://sken11.hatenablog.com/entry/2021/10/01/234616](https://sken11.hatenablog.com/entry/2021/10/01/234616)
Swiftをもっと広めたい

# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2021-10-04に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

# Swiftについて

* はじめに
* Swiftとはなんぞや
* HelloWorld
* おわりに

## はじめに

どうも、2021年アベントカレンダー二日目の西澤です。
今回の記事は前回のKotlinに引き続き、スマホアプリ開発に関連するプログラミング言語である**Swift**を紹介していきます。
こんなコードでこんな感じのすごそうなプログラミング、を紹介するわけではなく、「**Swiftなにそれおいしいの？**」という人に向けた内容になっています。なので物足りない人もいるかと思いますがご容赦ください。

## Swiftとはなんぞや

SwiftというのはAppleが発表したオープンソースのプログラミング言語です。発表されたのが2014年と、かなり新しい言語となっています。
Appleが開発しただけあり、**iOSやMacのソフト開発**と相性よく作られていて簡単なものならかなり手軽に作れてしまいます。
何よりも特徴的なのはその動作の速さです。これまでのiOSやMacの開発に使われてきた言語、Object-Cの最大2.6倍もの高速処理が可能です。

## HelloWorld

Swiftについてほんのりとわかったところで、みんな大好きHelloWorldでSwiftのコードがどんな感じか実際に見てみましょう。

```
1 var text = "HelloWorld" 2 print(sayello)
```

はい、これだけです。**クラス**や**関数**を作る必要もありません。Pythonやjavascriptのように最初から処理を書いて動かせます。
とはいえこれだけでは説明することがなさすぎるので、関数も入れて冗長的に書いてみます。

```
1 func getText() ->String{ 2 var text = "HelloWorld" 3 return text 4 } 5 print(getText())
```

それでもかなり**簡潔**ですね。
それではそれぞれの処理を説明していきます。

### 関数の扱い

まずは関数からです。

```
1 func getText() ->String{ : 4 }
```

**->String**が特徴的ですね。関数の構成は以下のようになっています。

```
func 関数名（引数名:　型名）　->戻り値の型{return 戻り値}
```

これを先程のコードに当てはめてみると、関数名がgetText、引数がなし、戻り値の型がString、text変数が戻り値、そしてfuncは関数の宣言ということがわかります。前回紹介したKotlinと->以外がかなり似ていますね。

### 変数、定数の扱い。

次は変数（関数）についてです。

```
2 var text = "HelloWorld"
```

ここで引っ掛かるのはvarだけですね。とはいえJavaScriptを触ったことのある人なら馴染みがあると思います。
varというのは値を再代入**可能**な変数を宣言する時に使います。一方で、値を再代入**不可能**な変数（定数）を宣言をする時にはletを使います。
今回の場合はどちらで書いても問題はありません。しかし、実際にSwiftでコードを書く時にはvarとletをうまく使い分けるようにしましょう。
そして、ここまで聞いて勘のいい人は「型が入ってないやん！」と気づいたのではないでしょうか？そうですSwiftにも**型推論**が搭載されています。型推論がわからない人に向けて説明をすると、変数に代入された値から変数の型を推測し、**自動で型を定義してくれる**ため、型を明示する必要がないというものです。
これにより、コードを簡潔に書けるという訳です。もし型を明示したい場合は次のようになります。

```
2 var text :String = "HelloWorld"
```

Swiftは**型に厳格**です。そのため、double型の変数にint型の変数を代入する、ということができません。型の宣言や値の代入には気をつけましょう。

### 文字列出力

そしてHelloWorldの出力です。

```
5 print(getText())
```

ここは簡単ですね。getText関数の戻り値であるtext変数の値をprintで出力しています。
とはいえこれだけだと寂しすぎるのでSwiftで文字列を扱う時のいいところを紹介します。
例えば、Javaで文字列と変数を同時に出力したい場合、以下のようにコードを書く必要があります。

```
Java System.out.println("私は"+age+"歳です");
```

このぐらいならいいですが、何度も+や””を入力することになったらかなり面倒です。
Swiftでも同様の書き方ができますが、Swiftでは+と””を使わずに、文字列の中に変数を差し込むことができます。それが次の書き方です。

```
Swift print("私は\(age)歳です")
```

\(変数)という書き方をするだけで文字列の中に**直接埋め込む**ことができます。見やすい上にしょうもないミスが減りそうで良きですね。
さらにもう一つ,便利な記述の仕方があります。
それが次です。

```
Swift var text = """ 今日は いい天気 です """ print(text) 出力: 今日は いい天気 ですね
```

このように"を三つにすると文字列が**入力とまったく同じ**ように出力することができます。

## おわりに

以上でSwiftに関する説明は以上です。あまり細かいところには触れられませんでしたが、この記事でSwiftへ興味を持ってもらえたなら幸いです。
SwiftはiOSやMacのアプリ開発だけではなく、Androidアプリ、さらにはWebアプリにWebサーバーも開発することができます。
Swift自身もいまだにアップデートされ続けているので、これからまだまだできることが増えていくと思います。
Appleの公式サイトではSwiftについて細かい仕様や特徴が説明されているので気になったら、s是非みてみてください。
SwiftApple:[https://www.apple.com/jp/swift/](https://)
勢いだけで情報科学科に入ってしまったので、とりあえずホームページの書き方を勉強してみた。



# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2021-10-08に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

## はじめに

この記事はアドベントカレンダー６日目の記事です。
タイトルの通りパソコン初心者の1年生です！
夏休みにフロントエンドについて勉強したので、アウトプット用に記事を書きました。
温かい目で見ていただけると嬉しいです！

## 今回勉強したこと

*HTML
*CSS
*(JavaScript)

## HTML

まず最初に書いてみたのがHTMLです。
プロゲートという勉強サイトのスライドを見ながらホームページの内容を書きました。
今までC言語しか触ったことがなかったためhead,body,footerの概念が理解できませんでしたが、実際に言語を書いてみて理解することができました！

## CSS

いよいよCSSでデザインを付け加える！というところまで来て次に詰まったのがHTMLにCSSが反映されないということです。
先輩に教えていただいて
""
これの存在を知り感動したのはいい思い出です。
外部ファイルを繋げるというのもこの夏休みに初めて知りました！
そして地味につまづいたのがクラスネームについてです、推し声優さんの写真をサイトに貼ろうとしたのですが、この時の私はクラスネームをどうやって使うのかよくわかっていなかったため、画像のサイズが全て一緒になってしまいました…

## JavaScript

後期の授業で勉強する言語ということでほんの少しだけ触ってみました！
とりあえず基本的な文法だけ勉強して、あとはネットのコードを参考にしてホームページ制作に組み込んでみました！
HTMLやCSSのように自力である程度書けるとまではいきませんが、なんとなく使うことができました！

## 今回作ったホームページ

初めて作る勉強用のホームページということで自分が作っていて楽しいと思えるものを作りました。
オタク仲間の推しを語っているだけのホームページです！
![](https://i.imgur.com/Yz39U9F.png)

これがホームページを開くと最初に出てくる画面です。
JavaScriptを使いページの切り替えができるようにしてあります。
宣伝は基本なので公式サイトに飛べるようにリンクを貼ってみました！
![](https://i.imgur.com/KgDr50V.png)

推しを紹介するページはこのような感じです。
ここではCSSを使って枠を作ってみました！

## おわりに

今回HTML&CSSについて完璧に理解できたわけではなく、
*ボーダー
*レイアウト
に関してはまだしっかりと触れていないのでこれからこのホームページに付け加えて勉強していきます。
JavaScriptに関しては基礎の基礎しかわからない状態ですがなんとなく難しそうな気がしているので、後期の講義は心して受けようと思います…
本当に初心者なのでまだまだ技術的にも記事の内容的にも濃い内容はかけませんでしたが、いいアウトプットができました！自分がつまづいたことやこれから勉強していくべきことが理解できたかなと思います！
読んでいただきありがとうございました！
fail2banで総当たり攻撃を防ぐ



# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2018-11-20に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

fail2banを設定して一定回数以上のログイン試行をしたipアドレスをbanするようにしました。

# 対象読者

* webサーバーでBasic認証をしている人
* 同じipからの攻撃が多い人

# 使用している環境

* ubuntu 18.04.1
* nginx 1.14.1

# fail2banについて

fail2banを使うと一定回数以上ログインに失敗したipアドレスからの
アクセスをbanすることができるので、パスワードの総当たり攻撃を防ぐことができます。
今回はnginxに設定しました。

# fail2banの設定

## インストール

```
$sudo aptitude install fail2ban
```

でインストールできます。

## 設定ファイルの編集

設定ファイルは
/etc/fail2ban/jail.conf
になります。330行目あたりにnginxの設定がありますのでそちらを編集しました。

```
[nginx-http-auth] port = http,https enabled = true filter = nginx-http-auth logpath = /var/log/nginx/*error*.log maxretry = 1 bantime = -1 action = iptables-multiport[name=404, port="http,https", protocol=tcp]
```

logpathの方で監視するlogファイルを指定して、maxretryで何回ログインを失敗したらbanするか決めることができます。bantimeはbanしたipアドレスをいつまでbanし続けるか指定するものになり、-1とすると永遠にbanされた状態となります。actionではbanされた際に行う処理を書くことができます。sendmailコマンドでメールを送ることができる環境であれば、

```
action = iptables-multiport[name=404, port="http,https", protocol=tcp] sendmail-whois[name=nginx, dest=example@gmail.com, sender=example@gmail.com, sendername="Fail2Ban"]
```

とすることでbanしたことをメールで受け取れるようになります。

## 起動

```
$sudo systemctl start fail2ban
```

で起動できます。

## 確認

```
$sudo fail2ban-client status nginx-http-auth
```

でbanされたipを確認することができ、

```
$sudo fail2ban-client set nginx-http-auth unbanip ban解除するipアドレス
```

とすることでbanを解除することができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/f65e319d-a6e6-2b36-cb36-5c20c317d3b7.png)


ちなみにメールの設定をするとこのようなメールが送信されます。

# まとめ

今回はnginxでの設定をしましたが、sshなど他のサービスでも使うことができるので便利だと思います。
読んでいただきありがとうございました。
ワイがバ美肉するまで

# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2021-04-09に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

この記事は春のシス研Advent Calendar 2021の5日目の記事です。
下記のリンクから閲覧可能です。

https://qiita.com/x20064Naruse/private/1f2153788f73e06c0a6e
Goで２つのスライスから共通要素を取得したいときはgolang-setをつかおう

# はじめに

Goで２つのスライスの共通要素を取得する際、愚直にループを回すと以下のようになると思います

```go
package main

import (
	"fmt"
)

func ExampleIntersect() {
	hoge := []string{"a", "b"}
	fuga := []string{"a", "b", "c"}

	var intersection []string
	for _, h := range hoge {
		for _, f := range fuga {
			if h == f {
				intersection = append(intersection, f)
			}
		}
	}

	fmt.Printf("%+v\n", intersection)
	// Output:
	// [a b]
}
```

# Intersect(other Set[T]) Set[T]

golang-setをつかいます

https://github.com/deckarep/golang-set

`target.Intersect(other)`というかたちで、`target`スライスと`other`スライスの共通要素を取得できます

```go
package main

import (
	"fmt"

	mapset "github.com/deckarep/golang-set/v2"
)

func ExampleIntersect() {
	hoge := mapset.NewSet[string]()
	hoge.Add("a")
	hoge.Add("b")

	fuga := mapset.NewSet[string]()
	fuga.Add("a")
	fuga.Add("b")
	fuga.Add("c")

	fmt.Printf("%+v\n", hoge.Intersect(fuga).ToSlice())
	// Output:
	// [a b]
}
```

# おわり
べんりですね:+1:
著名なOSSでも使用されているのと、コミッターに日本の方もいらしたので愛着湧きました
【プログラミングスクール】メンターへの質問の仕方の参考

# はじめに
こんにちは，プログラミングスクールのメンターをやっている就活中の大学院生です．読書が趣味です．

この記事は以下のような方に役に立てばと思い書いています．

- プログラミングの経験が浅く，他の人への質問の仕方がわからない
- エラーが出ているが，何が分からないかわからない

ということで，早速`メンター側も対応しやすく，生徒側も適切なアドバイスをもらいやすい`だろうと私が考える質問の仕方をお伝えしたいと思います．

# 段階的に自分の理解度を伝える
まずはエラーがでたり，想定した動作にならない場合の質問についてです．
このような場合に，よくある質問の仕方が，

「～～～．このようなエラーが出ました．色々調べてみましたがわかりませんでした．教えていただきたいです．」

のようなものです．

これだと生徒側は，あまり考えずに質問ができてしまうので，自分の問題解決能力が養われないというデメリットがあり，メンター側は生徒の理解度が分からないので，どの段階からアドバイスをすればいいのかが分かりません．

ここで，`質問をすることは，全く悪いことではありません．むしろずっと一人で抱え込むことの方が良くないと思います．`
ただ，質問の仕方を工夫して，自分の成長につながる質問をどんどんしていこうということです．

**➀エラーが出ているかどうかを伝える**
- エラーの見方がよくわからない場合はその旨を伝える
- エラーが出ていないのであれば，どのような動作を想定していて，実際はどのような動作になってしまっているのかを伝える

**➁エラーメッセージがどういうことを意味していると考えているか伝える**
- 意味が分からない場合はその旨を伝える
- 理解が誤っていれば，エラーメッセージの正しい意味を教えてもらえます．

**➂エラーメッセージの原因がどこにあると考えたかを伝える**
- 原因が分からない場合はその旨を伝える
- 考えが誤っていれば，どこに原因があるのかを探す方法（デバッグツールやヘルパ関数の使い方など）を教えてもらえます．

このように段階的に理解度を伝えれば，適切なアドバイスをもらいやすくなると思います．

# どういう考えでどのようなことを試したのかを伝える
さらに，エラーに対してその原因を考え，自分なりにいろいろと試してみるのはとても大切なことです．それで，解決の糸口が見つかれば，自力での問題解決につながり，自分の問題解決能力が高まります．

ただ，時には試しても試してもうまくいかないこともあると思います．
そんなときはためらわずに質問しましょう．

ここで大切なのは，`どういう考えでどのようなことを試したのかをわかりやすく伝える`ことです．

ここをめんどくさがって「いろいろと試しましたがうまくいきませんでした」と伝えてしまうと，メンター側のアドバイスが自分が試したことと被ってしまったり，自分がどこまで問題の原因を理解できているのかという情報が失われてしまいます．

ので，

「こういう理由から，ここが原因だと考えて，コードのこの部分をこのように変えてみましたが，エラーは消えませんでした．」

のように伝えると「理由が間違っているのか」「原因と考えている場所が間違っているのか」「コードの修正の仕方が間違っているのか」など具体的な指摘がもらえると思います．

# まとめ
私としては，質問対応は`「問題の伝達」に対する「解法の教授」`ではなく，`「問題解決能力のアウトプット」に対する「レビュー」`という位置づけでとらえる方が生徒の方にとっては成長につながると思っています．

つまり，

`生徒が問題が出たことをメンターにお知らせ（問題の伝達）し，メンターがその解決方法を考え，教える（解法の教授）`
ではなく，
`生徒が問題に対しどのように考え，試し，解決しようとしたのかを公開（問題解決能力のアウトプット）し，メンターがそのアウトプットについて，よかった点・改善点を指摘する（レビュー）`

ということです．
生徒とメンターどちらが「**考え**」ているか比較してみてください．

最後に，こんなに色々と言われると，質問がしづらくなってしまうかもしれませんが，`はじめから完璧な質問をできる人はいません`（私自身，気を抜くと未だにダメな質問の例で質問してしまうことがあります．）．

`プログラミングスクールはいい意味でも学校なので，どんどん質問して，少しずつ質問のコツをつかんでいってもらえたらと思います．`

この記事がその際の参考になればうれしいです．
【開発で差をつけろ！】僕が考えた最強のターミナル環境(zsh+tmux+Neovim)


# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2021-04-06に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/91c3a74b-a515-b08b-938a-a2c04fb45ee1.png)


この記事は春のシス研Advent Calendar 2021の2日目の記事です。
詳細はこのURLをクリックすると，閲覧可能です．

https://yoshikawa.dev/blog/terminal-environment
自作キーボードを作ろうとして失敗した話


# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2019-10-15に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

# 初めに

突然ですが、みなさんは普段どんなキーボードを使っていますか？

~~キーボードで周りにマウントを取るため~~今回はオリジナルのキーボードを作っていきたいと思います。

## 用意するもの

* プリント基板
* キースイッチ
* キーキャップ
* キーボードのフレーム
* 安定剤
* スタビライザー
* はんだごて
* はんだ

aliexpress で全部揃います。

1~2 週間で届くので気長に待ちましょう。

![](https://i.imgur.com/0RqLtMh.png)

![](https://i.imgur.com/l8mjV7L.png)

![](https://i.imgur.com/FeXo1lL.png)

> 急いでいる人は手順１まで読み飛ばしてください。

## 手順-3

![](https://i.imgur.com/W54lB7O.jpg)

まず、はんだ付けしやすいように安定剤にキースイッチをはめ込んでいきます。

![](https://i.imgur.com/6GxtNXh.jpg)

## 手順-2

次に、安定剤とプリント基板でキースイッチを挟み込むようにして固定し、はんだ付けをしていきます。

![](https://i.imgur.com/whmCmKG.jpg)

文字と数字のキーをつけ終わったら、装飾キーのはんだ付けをします。

その際に、スタビライザーをつけ忘れないように注意してください。

![](https://i.imgur.com/91VwQUl.jpg)

![](https://i.imgur.com/rv167tE.jpg)

## 手順-1

はんだ付けが終わったら、フレームに取り付け

![](https://i.imgur.com/Jlh69hz.jpg)

![](https://i.imgur.com/yeEfaev.jpg)

安定剤を乗せ、

キーキャップをつけて完成です。

ところで、皆さんはキーボードの並びを覚えていますか？

僕は覚えていませんでした。

普段使わない装飾キーとか覚えてるはずがないので仕方ないですね。

とにかく、キーキャップを全部つけて完成です。

![](https://i.imgur.com/7x2Ehlb.jpg)

しかし、ここで問題発生です。

スペースキーと windows キーが引っかかって動かなくなります。

これは、windows キーをはんだ付けする位置が違うことが原因です。

とはいえ、直すのも面倒なので別のキーキャップでもつけておきましょう。

![](https://i.imgur.com/2eh7gez.jpg)

はんだ付けの位置は後々直すとして、とりあえず今回はこれで完成ということにします。

![](https://i.imgur.com/q00J9nA.jpg)

以上、自作キーボードの作り方でした。

一万円くらいで作れるので興味のある方は是非挑戦してみてください。

…という夢を見たんだ。

実は上記の手順は全て間違いでした。
ここからが本編です。

## 手順 0

先程つけたはんだを剥がしていきます。

> ハンダ剥がしRTA [pic.twitter.com/RP6xnMp5LM](https://t.co/RP6xnMp5LM)— 愛知工業大学 システム工学研究会 (@set_official) [2019年9月17日](https://twitter.com/set_official/status/1173972794746400769?ref_src=twsrc%5Etfw)

![ハンダ剥がし](https://pbs.twimg.com/media/EErKBz_VUAUL2ec.jpg:large)

(先輩に剥がしていただきました。)

## 手順 1

安定剤にキースイッチをはめ込みます。

少し硬いですが、カチッとなれば OK です。

## 手順 2

スタビライザーを取り付けた後、プリント基板に取り付けて、はんだ付けします。

![](https://i.imgur.com/D9RczDU.jpg)

![](https://i.imgur.com/PTWXq3x.jpg)

## 手順 3

はんだ付けしたものを、フレームに取り付けます。

安定剤が付いていて、ねじ止めし辛いですが気合いで止めます。

## 手順 4

キーキャップをつけて完成です。

![](https://i.imgur.com/6TjII7x.jpg)

深夜テンションでシールも貼りました。~~後悔はしてないです。~~

![](https://i.imgur.com/1hvActw.jpg)

## まとめとか反省とか

* 作り方はちゃんと調べてから作った方がいい
* はんだ付けは練習してから作った方がいい
* プリント基板をケチって安いのを買うとマイコンが搭載されていないため、キー配列の変更ができないので注意すること
* 作るのは普通に楽しい
[Flutter Web][備忘録] URLの 〜/#/ を取り除く方法

## 環境
- macOS Monterey 11.3.1
- Flutter 3.3.1
- Dart 2.18.0

## 修正は２箇所。
### main.dart
```diff
+ import 'package:flutter_web_plugins/flutter_web_plugins.dart';

void main() {
  //URLの # を取り除く
+  setUrlStrategy(PathUrlStrategy());　
  runApp(const MyApp());
}
```
### pubspec.yaml
```diff
dependencies:
+   flutter_web_plugins:
+     sdk: flutter
```
【雑記】生み出す側の責任

こんにちは、arcadia13です。

ふと思ったことがあり、そのことについて雑記をします。



# 生み出す側の責任

小説家・東野圭吾さんの「ガリレオシリーズ」をご存知でしょうか。

主人公である天才物理学者・湯川学が、大学時代の友人である刑事・草薙俊平の依頼を受け、一見すると超常現象とも受け取れる不可解な事件を、科学を用いて解決していく連作シリーズです。

2007年および2013年には、これを原作とした福山雅治さん主演のテレビドラマ（フジテレビ製作）が放送されました。さらには、映画が3本も作られていて（2022年現在）本当に人気な作品なのでしょう。

ここで取り上げたいのは、2007年放送のテレビドラマ第1シーズン9話「転写る/爆ぜる　前編・悪魔が仕掛けた連続殺人」です。

難解な殺人事件が起こったのですが、その現場には大量の家電製品が不法投棄されていました。蛇足ですが、家電製品は謎解きのヒントになっています。

依頼を受けた湯川が現場へ調査に行くと、そこで偶然、不法投棄された家電製品をボランティアで回収に来ていたおじいさんと遭います。

湯川は成り行きでおじいさんを手伝うことになり、そのままある場所へと運んでいきます。そこは、色んなゴミを集める工場のような場所でした。

ゴミ袋、家電製品、家具が山のように積まれており、その光景を目にした湯川は思わず「これは酷いですね」と言葉を漏らします。

湯川は「人間の生活を豊かにするのが科学の目的の一つ」と考えていますが、その科学が生み出した一面を見せつけられたのです。

おじいさんは言います。学者は本などで知識を得ていても、現実の光景を見る機会はそれほど多くない。例え現地調査に来ても、現状を改善してくれるわけでもない[^2]。

[^2]:もちろんその研究をする学者もいるでしょうが、現場は待ってくれません。それに現場の意見としては正しい部分もあります。

そして、おじいさんは最後にこう言いました。

”でも俺はみんなにいつもこう言うんだ。こうすれば世の中が便利になるとか、こんな道具があればいいって考えるだけじゃ駄目だってな。もちろん捨てる人間が悪いんだよ。けど学者先生なら、こんなもん作ったらゴミは増えるんじゃねえか、世の中悪くなるんじゃねえっかって、一緒に考えてくれよ。それが本当に頭のいい奴ってもんだろ？”

湯川はおじいさんの全くの正論に「仰る通りです」と肯定するしかありませんでした。

さて、私がこのエピソードを初めて見たのは子供の時でした。

当時はほとんど意味が分からなくて、漠然とゴミの山があるのが酷いと感じた程度でした。

しかし今になって思うのは、科学をIT技術に置き換えれば、そのまま私にも当てはまる内容だと痛感しました。

私はエンジニアの卵です。いずれ、IT技術を駆使して生み出す側の人間になります。

私はIT技術が人々の生活を豊かにする存在だと考えています。決して、誰かの生命や財産を奪うものであってはなりません。

だからこそ、こういう負の面が生まれる可能性を忘れてはならない。そして、なるべく負の面が生まれないような方法を考える。

生み出す側の責任が私もあるんだなと。

かなり理想論ですが、それでも心構えにして損はないでしょう。



# エゴになってないだろうか

生み出す側の責任と関連して私が意識しているのが「エゴ」です。

コトバンクで調べてみると、以下のようでした。

精選版 日本国語大辞典より引用
[1]
① 認識、意欲、行動などの主体として、他と区別される自分。自己。自我。
② フロイトの用語。感覚の刺激や肉体的要求の知覚と、身体運動との間を調節する心理装置。自己保存の役割を果たす。自我。
③ 自分本位の考え方や態度。また、そういう考え方の人。エゴイスト。エゴイズム。
[2] 〘形動〙 「エゴイスティック」の略。

私は③の意味で使っています。

世の中のため、誰かのために何かを生み出す。それ自体は素晴らしい考えだと思います。

しかし本当にそれが世の中の、誰かの役に立つのか。

生み出す側に立つ人間は、そのことを常に問い続けなければならないと私は思います。

でないと、世間は受け入れてくれないと思うんですよ。

自分が役立つと考えていても、買う人が役に立たないと考えたら、その時点で厳しいんじゃないかなぁ。

以上、雑記でした。
シス研(約)3分クッキング


# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2019-03-16に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

シス研(約)3分クッキング
===

# 今回の材料

* BUFFALO製BroadStation(BHR-4GRV2)
* OpenWrt([DL_link](https://openwrt.org/toh/hwdata/buffalo/buffalo_bhr-4grv2))
* 設定するための母艦(その辺に落ちてるパソコン)

事の始まりはある日の深夜，フリマサイトを適当に眺めている時に発見したBHR-4GRV2である．
こいつに無線機能はないが，VPNでどーのこーの(詳しくは[公式](https://www.buffalo.jp/product/detail/bhr-4grv2.html)で見ればry)できる物である．
しかし，こいつの売りの1つであるVPNはPPTPのみ喋る(今どきPPTPしか対応してないなんて・・・せめてry)機器なので買う価値があるのかないのか分からない代物だったが，1000円程で買えたのでなんとなく買いました．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/0e7d99bb-921a-5185-3113-a3c1e91eabb4.png)

# 届いたクッキング材料

このままでも食べれます(使えます)が，ここで終わるのはシス研らしくないのでスパイスを加えます.
今回選んだスパイスとして,OpenWrtを選びました.
OpenWrtの詳細は[公式サイト](https://openwrt.org/ja/start)に乗ってるので省略しますが,簡単に説明すると味気ない料理が一流シェフの手によって別の料理を作るみたいなもんです(中身が変わってるからだけど).

# それでは料理していきましょう.
まず,料理するに当たり基本的な料理の知識(何があっても自分で解決できる技術)は持っておきましょう.
この先は一流シェフの領域のため,料理に失敗した場合は自分の責任となってしまいます(今回のOpenWrtの導入による機器の故障,破損,公式ROMに戻せなくなった等は全て自己責任でお願いします).

　今回は導入するにあたりとても簡単なWebGUI経由で味付けしていきます.
使用するスパイスはFirmware OpenWrt snapshot版です.
他にも導入できる食材はありますが,そのへんは各自で調べてください.

　入手に成功したOpenWrtとお手元にあるBroadStationが揃ったところでもう一つの材料であるパソコンを用意しましょう.このブログを見ているぐらいなので足元か近くに落ちている(置いている)はずです(そもそもOpenWrtを入手する段階でパソコンがあるはずですが・・・スマホ？知らないですね).

　スパイスの加え方は公式のファームウェアアップデートと同じ手順でおこないます.選択するファームウェアに入手したスパイスを選択します.
スパイスの選択が完了したあと「更新実行」を選択,選択したあとは下の画像の様に自動調理が開始されます.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/c1698e09-5dc2-0219-1e99-3c1438a23eb0.png)


# 完成

　料理が完了したあとは,お好きなブラウザ上で[192.168.1.1](http://192.168.1.1)に接続することにより,一流シェフが調理した下画像のような料理を見ることができます.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/6bad863c-9dd6-9d5b-a134-9b9d436dd192.png)


<figcaption>OpenWrt初期画面</figcaption>


　料理が完成したあとは,好みで追加の味付けをしてください(rootパスワードの変更は確実にしてください.また,今回使用したBroad Stationは無線機能はないため問題ないですが,無線機能が存在する機器での導入後はwifi電波の出力設定を必ずしてください).

　今回の料理は多くの味付けが存在するため,存分に楽しめる料理となるでしょう.
しかし,味付けを間違えると大変なことになる(セキュリティ的な意味で)ため,味付けは慎重にしましょう.
良いOpenWrt生活を！
オススメのプログラミング学習サイト



# お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2018-05-20に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。

# 自己紹介

みなさんはじめまして．学部２年生の黒澤と申します．

シス研会員の方も知らない方が多いと思いますので，この場を借りて少しだけ自己紹介させていただきたいと思います．

私は鹿児島出身の愛知育ちです．高校は福岡の高校へ行っていました．趣味はアロマテラピー，テニス，音楽鑑賞等です．ニックネームはくろちゃんなので，ぜひ「くろちゃん！」と呼んでください．

以上が私の簡単な自己紹介になります．２年生からはシス研に顔を出す回数も増やせればと考えていますので，ぜひ気軽に声をかけてください．また，プログラミングの技術も未熟なので，ぜひ無能な私に技術面等のアドバイスをよろしくお願いいたします．

# 初心者にプログラミングは難しい．．．

私は高校は国際科に所属していましたので，プログラミングはもちろん，理系科目すらもほとんど触れたことのない状態でした．そのため，１年生の頃のプログラミングの授業はついていくのが精一杯で自分で勉強しようにも何が分かっていないのかすらわからない状態でした．新入生のみなさんの中にも普通科出身で今までパソコンを触る機会が少なかったという方やすでに現時点で授業内容が理解できていない方がいるのではないでしょうか．コンピュータプログラミングは理解するまでに大変時間がかかります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/b81675a5-acd4-ea40-b9bf-7407d0011e96.png)


そこで，１年生の頃の私のように悩む学生が少なくなればいいなという思いで，私が１年生の間に出会っておきたかったプログラミング学習サイトを紹介いたします．

# 動画で学べるプログラミング

私がオススメするプログラミング学習サイトは[３分動画でマスターするプログラミング学習サイト　ドットインストール](https://dotinstall.com/)です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2848253/4a0b6d8d-6ee3-d39c-4e65-57427f94d755.png)


このサイトでは講師の方が実際にコーディングをしながら１から教えてくれます．このサイトのいいところは実際のプログラミングの行程を見ながらプログラミング言語について学んでいけるところです．なおかつ，１レッスンが３分にまとめられているので詰め込みすぎず，１ステップ１ステップ自分のペースで学習を進められます．

# 自分に合った学習方法を見つけましょう！

シス研のメンバーには技術の高い方やタメになるWebサイト等を知っている方がたくさんいます．ぜひ１度でもいいのでシス研に遊びに来てください！私自身も今年からはもっとシス研を利用して自分のスキルアップを目指していきたいと思います．一緒に頑張りましょう！
Google UXデザイン：ユーザに共感する

# はじめに

わたしが[Google UX Design Certificateで得られた素晴らしい体験][google]を、特に重要だと思われるポイントを小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ Google UX Design Certificateを受講してみてください。

[google]: https://qiita.com/masami-atwvn/items/7a0d0a3d4661c50f8bec

https://www.coursera.org/professional-certificates/google-ux-design

https://qiita.com/mapami/items/71dadc7256b87d2b6fed

# 現在のデザインスプリント位置

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/3729adea-8dba-b2a3-6127-9b0bf6886e54.png" width="700">

# 共感とは

UXデザイナーとしてユーザーに共感することは、ユーザーと同じように製品を体験することになり、あなたの作る製品をより良いものにします。

***<font color="MediumVioletRed">『共感とは、ある状況における他人の感情や思考を理解する能力のこと』</font>***

ユーザーの欲求やニーズを予測する能力が高ければ高いほど、ユーザーはあなたのデザインに安心感を抱き、長期的にあなたのプロダクトに利用してくれる可能性が高まります。

# どのように共感する？

#### 直接質問する

UXデザイナーとして、ユーザーのニーズを推測することはできません。その代わりに、ユーザーのニーズや要望を直接聞いて、それを製品デザインに反映させましょう。何を、どのように、なぜ、といった質問をすることで、ユーザーの視点をより深く理解することができます。

### アクティブリスニングを実践する

アクティブリスニングでは、対話中のユーザーの発言に完全に集中し、理解し、記憶することが必要です。それにより、ユーザーから直接公平なフィードバックを得ることができ、デザインの改善に活かすことができます    

### 多様なユーザーから意見を求める

あなたが受け取るフィードバックは、客観的で偏りのないものであることが重要です。友人や同僚は、あなたを応援したい、喜ばせたいという気持ちから、偏った、ほとんどが肯定的な意見を提供することがよくあります。ですから、さまざまなソースと多様なユーザーグループから意見を求めることが重要です。

フィードバックを求める際には、自由形式の質問を用いて、体験や製品に関するユーザーの実際の考えを理解するようにしましょう。

### オープンマインドを持つ

バイアスとは、限られた情報に基づいて、何かまたは誰かに対して好意を持ったり、偏見を持ったりすることだと覚えておいてください。UXデザイナーとして、他者に共感するためには、そのようなバイアスを脇に置く必要があります。
あなたのゴールはユーザーを理解することであり、自分の意見や感情でフィードバックを複雑化することではありません。


### UXリサーチの最新情報を手に入れる

研究者をフォローしたり、オンラインコミュニティに参加して、UXデザイナーやあなたがデザインするユーザーに影響を与える研究の最新情報を入手しましょう。

人間の心理をより深く理解するために、研究は常に変化し、進化しています。常に最新の情報を入手することで、ユーザーを理解し、ユーザーと接する際に有利になります。

# 共感と同情の違い

- 共感（Empathy)とは、相手の気持ちや考えを理解することであり、多くの場合、自分もその感情を感じることです。
- 同情(Sympathy)は、その感情を感じることなく、心配りや思いやりを示す経験です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/42c09ed2-08b7-5d35-468f-6faaf61f2715.gif" width="５00">

[ブレネー・ブラウン博士による共感の力についてのビデオ][video]

[video]: https://www.dailymotion.com/video/x28nj7a


# さいごに

ユーザーと深いつながりを持つことで、彼らの視点や苦悩をよりよく理解することができます。このようなつながりを早期に発見することで、正しいデザインの道筋を示すことができ、デザインプロセスの後段で製品を大幅に修正する必要もなくなります。

共感を得ることで、ユーザーが必要とするもの、それ以上のものを提供できる製品をデザインすることができるのです。
Oracleの文字コードを確認する方法

```:sql
SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')),
       NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS')) FROM DUAL;
```
または
```:sql
select * from nls_database_parameters where parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CAHACTERSET');
```


実行結果
```
NLS_CHAR NLS_CHARS
-------- ---------
AL32UTF8 AL16UTF16
```

```
PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_CHARACTERSET
AL32UTF8
```


## 参考
* [Oracleのキャラクタセット](https://qiita.com/ustakr/items/dba0433a646b2a3a9e8e)
【Unreal Engine 5】自作C++クラスがエディタ立ち上げ時に認識されない話

# はじめに
Unreal Engine のエディタを立ち上げプロジェクトを開いた時に、自分で新しく作ったC++のクラスがコンテンツドロワーに表示されず、作ったC++を親にしたBlueprintも親を認識せず開けなかった現象が起きた。
しかし、エクスプローラーやVIsual Studioのソリューションにはファイルがちゃんと存在していた。

# 対処法
エディタを立ち上げた時に最初にソースコードをコンパイルすると無事コンテンツドロワーに自作C++クラスが表示され、それを親にしたBlueprintも開けるようになっていた。

なんかごり押しな解決方法で根本的な解決になっていない気がする。


どなたか正しい対処法を知っていたらご教授お願いします。