OmniAICreator/Qiita-1.07M huggingface dataset:
App Serviceについて

●App Service
Webアプリケーション、REST API、およびモバイルバックエンドなどをホストするためのHTTPベースのサービス。つまり、Webアプリなどを展開するためのアプリケーションサーバーとして使用できるサービスであり、WindwowsベースまたはLinuxベースのWebサプリの実行環境を手軽に構築できる。

●App Serviceプラン
App Serviceを使用してWebアプリを動かすには、コンピューティング環境が必要。App ServiceプランとはWebアプリを動かすための仮想マシンの設定。App ServiceはPaaSサービスであるため、ユーザーがはどんなコンピューティング環境上で動かすかという指定だけは必要。
１つのApp Serviceプランの上で、複数のWebアプリを実行することが可能。

※App Serviceは、実行するWebアプリの数ではなく、App Serviceプランの単位でコストが発生する。

●App Serviceプランの価格レベル
・Free、Shared,Basic
開発やテスト、高度な機能を必要としないワークロード向けの価格レベル。自動スケールなどの機能はない。

・Standard,Premium
一般的なアプリを運用するための価格レベル。本番環境向けのレベルであり、自動スケールやデプロイスロットなどの機能はある。

・Isolated
高速なネットワーク環境で実行したいミッションクリティカルなワークロード向けの価格レベル。
他の価格レベルとは異なり、仮想ネットワークにも接続可能な自社専用のコンピューティング環境でWebアプリで実行することができる。

●AppServiceプランは事前に作成しておくか、App Service作成時に合わせて作成することも可能。また。SKUとサイズは後から変更できる。

※App SeriviceプランとApp Serviceのリージョンは同じである必要がある
もしオリジナルのreset.cssを作るなら:whereを指定しておく方が優しい

## この記事の概要

ユーザーエージェントスタイルシート、ありがたいようなそうでもないような、微妙なラインですよね。
自分でCSSを書く人で「使いまわす用reset.css」を用意している方も多いのではないでしょうか。
もしそれらを配布するとしたら、`:where`をつけておくと使用する人にとって優しいと思う、という記事です。

## :whereって何？

最もコアな機能は「列挙されたセレクターのリストに該当すればスタイルを当てる」というものです。
文章で書いてもイマイチ分かりづらいので、MDNにあるサンプルコードを拝借します。

https://developer.mozilla.org/ja/docs/Web/CSS/:where

>/* ヘッダー、メイン、フッターの何れかの中にある段落に
>   カーソルをかざしたときに選択 */
>:where(header, main, footer) p:hover {
>  color: red;
>  cursor: pointer;
>}
>
>/* 上記のものは下記のものと同等です。 */
>header p:hover,
>main p:hover,
>footer p:hover {
>  color: red;
>  cursor: pointer;
>}

上記にある通り、コードの記述量が減って便利です。
しかし今回紹介するのは「`:where`で括ると詳細度が0になる」点を活かす話です。

## 例

例えば、reset.cssの中に以下のようなコードがあったとします。

```css
input:focus-visible, button:focus-visible {
  outline: 2px solid #999; /* グレー */
  outline-offset: 2px;
}
```

至って普通のコードですね。
このreset.cssをパッケージマネージャー経由で使っている人がいたとして、その人が以下のスタイルをリポジトリ内に書いたとします。

```css
:focus-visible {
  outline: 4px solid #55c500; /* グリーン */
  outline-offset: 4px;
}
```

要素に関わらず同じ内容でアウトラインを表示させるつもり、と解釈すれば特に不思議はありません。
しかし、reset.css→自分のCSSの順番で読み込んでいたとしても、今のままではグリーンのアウトラインは表示されません。

| 期待するスタイル | 実際のスタイル |
| --- | --- |
| ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/bacf6126-4bb1-cf8a-1390-b036e7793f94.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/34bbb982-9f94-e360-0e27-8998467a66d3.png) |

DevToolsで見ると、詳細度で負けてしまっていることが分かります。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/a42b309b-4eff-cc34-92de-1e6237f3abeb.png)

ここで、先程のreset.cssを`:where`を使って作成すると、上手くいきます。

```css
:where(input, button):focus-visible {
  outline: 2px solid #999;
  outline-offset: 2px;
}
```

このように、`:focus-visible`単体での指定でも詳細度で勝り、適用されました。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/daa1f0e1-b8a0-7a93-1f08-f11e922416e5.png)

## つまり何が言いたいかというと

上記は一例で、他にも色々なパターンの詳細度バトルが発生するでしょう。

パッケージマネージャー経由でreset.cssを使用すると、オーバーライドはできても「はじめからコードが無かったことに」はできません。
CSSの特性上、たくさん記載したものを後から打ち消すのはアンチパターンです。

reset.cssの役割として配布するなら、詳細度をできるだけ下げておくと使用者に優しいです。
そのためには`:where`の使用がピッタリだと思う、という記事でした。

## 最後に

そもそもどれだけの人が自分でreset.cssを作って配布しているか分かりませんが、もしトライしてみようと思ったときはこの記事の内容も思い出していただけると幸いです。

---

最後まで読んでくださってありがとうございます！
Twitterでも情報を発信しているので、良かったらフォローお願いします！

https://twitter.com/xrxoxcxox

Devトークでのお話してくださる方も募集中です！

https://jobs.qiita.com/employers/qiita-inc/dev_talks/489
VSCodeで自分だけのショートカット！

# はじめに
　皆さんは、VSCodeの超便利機能「ユーザースニペット」をご存知でしょうか？
　この機能を使えるようになるだけで、皆さんの作業が何倍もラクちんになるかもしれません！
　興味がある方はぜひこの機会に！:writing_hand_tone1:
## ユーザースニペットとは、
#####
　簡単にいうとショートカット機能です！
　ショートカット機能なら今までも使ってきてるよ:rage:
　なんて思うかもしれませんが、ユーザースニペットでは、
####  自分で好きなショートカットを作れてしまいます！:clap::clap_tone1::clap_tone2::clap_tone3::clap_tone4::clap_tone5::scream:
　わくわくしますよね！:laughing:
　前置きが少し長くなってしまったので、そろそろ本題に移りますね！:thumbsup_tone3:
# ユーザースニペットの作成方法
　１．VSCodeを起動します
　２．画面左下の歯車アイコン:gear:を選択
<img width="600" alt="2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/65bd88b0-e6a3-6eb1-addf-057698f48d00.png">
　３．ユーザー スニペットの構成を選択
<img width="600" alt="3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/d6b786e5-ba2b-f6a9-d1fe-67d003702a18.png">
　４．自分がエメットの作りたい言語を選択（ここではhtmlを選択していきます）
<img width="600" alt="4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/d0d2c29c-d89f-0b6a-0642-4323ba52b420.png">
　このような画面がでます！
<img width="600" alt="5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/ac2310bd-377e-9152-2789-01d0bd70f037.png">
　５．ここに記述していきます
<img width="600" alt="6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/a2d6d99d-3761-419c-e330-cdfc3aeb84f5.png">
　例えばこんな感じに
<img width="600" alt="7" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/6c3fb845-4c2f-bb5a-b8fa-7d21c57eee78.png">
　６．完成です!!　:star2:
　「!」を押したときに色々出てくるやつを自分風にアレンジしました！




　７．使う！
　　先ほど自作したスニペットの呼び出すときのショートカットを入力
<img width="600" alt="7" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/4992b3da-d816-a280-b0bb-df1f7586dce1.png">
　　左側に☐があるものを選択
<img width="600" alt="7" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982413/8512276d-b6c0-97db-6005-ca34943d387a.png">
　　たったこれだけの手順で、これだけ多くのコードをかけちゃいました。:laughing:
　　これなら、いちいちcssのリンクを張る必要もなくてとってもラクちんになりましたね:ok_hand:


　まだまだ紹介できていない部分があるので、詳しくはこちらの記事を参考にしてみてください。

　　\tや${}の記述方法
　　　https://blanche-toile.com/web/vscode-snippets
　　自作スニペットを既存スニペットよりも上に
　　　https://tech-1natsu.hatenablog.com/entry/2018/01/05/232731
# まとめ
　今回は、ユーザースニペットの作成から使用方法までを紹介しました！
　かなりおすすめな機能なので、たくさん使ってみてください:raised_hands:




###   最後まで見てくれてありがとうございました！！:bow::bow_tone1::bow_tone2::bow_tone3::bow_tone4::bow_tone5:
vscode日本語化メモ

VSCodeをインストールするとき、いつもどのように言語切り替えするか迷ってGoogleで検索しているのでメモとして作成します。
英語で使えよという話はおいておく。

Extentionからapanese Language Pack for Visual Studio Codeをインストール
![01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461633/b962b943-3f5b-fe79-5fba-b67de1b14b79.jpeg)
（使い方はここに書いてあるのですが実際にやってみます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461633/6fe2407c-fdb4-632f-5289-7bb524b2affc.png)

Ctrl+Shft+Pでコマンドパレットを表示し、displayと入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461633/1fa0d394-cedc-82e3-1dca-7a9df0534e48.png)

日本語を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461633/36ed61b6-769d-e735-c098-fe669a1d2a15.png)

再起動してといわれるので再起動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461633/879c6645-2eef-3578-34bb-01990fad66b5.png)

日本語に切り替わりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461633/9d141149-0305-acf0-6879-e88af5cf6fd3.png)

言語切り替え、いい加減に検索しないでできるようになりたいです。
JUCE ～ v143ビルドエラーの対処方法（2022/12/18更新）

[<B>JUCE Advent Calendar 2022</B>](https://qiita.com/advent-calendar/2022/juce) に参加しました。


・使用ツール
<dt>　JUCE</dt>
<dt>　Visual Studio</dt>
<br>
Visual Studio 2022 をインストールしても v143 がインストールされない場合があるようなので、対策を追加しました。（2022/12/18）

<H4><a href="https://note.com/leftbank/n/n0c8f3177e285"</a> [<B>note</B>]にUpしました。</H4>
【delika】気象庁の地震データベースを分析してみる

# 1. はじめに
こんにちは、普段は自分のブログでIT関係の記事を書いている[なりかくん](https://narikakun.net/)です。

今回は、気象庁の[震度データベース](https://www.data.jma.go.jp/eqdb/data/shindo/index.html)から地震の過去データを取得して、delikaというサービスで分析してみたいと思います。
この記事は、[delika Advent Calendar 2022](https://qiita.com/advent-calendar/2022/delika)の記事です。

ちなみにdelikaはこの記事で初めて触るため初めて触るという観点から見て少しレビューも含めてみようと思います。

# 2. delikaってなに？
私もdelikaというサービスを知らなかったので調べてみました。その調べた内容を簡単にまとめてみます。

- delikaは基本無料で使えるソーシャルデータプラットフォームのこと
- 収集したデータを公開することができる
- delikaや企業・一般ユーザーが共有・公開したデータを使って分析ができる
    - 自分で収集したデータと企業が収集したデータを組み合わせることも可能（？）
- SQL構文でデータを操作できる
- WebAPIも用意されているので開発者には美味しく味わえる

そして、データを活用して顧客データや売り上げデータから売り上げを更によくしたり新しいビジネスを生むことが出来るみたいです。

https://delika.io/welcome

# 3. アカウント登録する
このサービスを使うには、アカウント登録が必要です。アカウント登録には、GitHubまたはメールアドレスでの登録が可能です。
今回私はGitHubを使って登録しましたが、GitHubでもメールアドレスの確認はあるみたいでメールアドレスの確認をスキップ出来たりはないみたいです。

# 4. データセットを作成する
では、ホーム画面からデータセットを作成してみましょう。[+]を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/6729a8bb-fdd3-81ed-ca51-4b0b7bca0e95.png)
そして、作成画面が出てきました。ここでデータセットの名前やデータセットの種類などを設定できます。

| 項目 | 内容 |
|:-:|:-:|
| Account  | データセットを作るアカウント（チームの場合はチーム）を選択  |
| Dataset Name  | データセットの名前、これがURLにも使われる  |
| Dataset Type  | データセットの種類  |
| Dataset Visibility  | データセットを全体に公開するか  |
| License  | データのライセンスをどうするのか  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/e3c5d91d-c499-8211-f59b-b3b19f6eaff8.png)

# 5. データをアップロードする
データセットのページで「Upload Files」のタブからデータファイルを選択すると自動でアップロードされます。非常に簡単ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/e4ee8ead-fb64-ce82-cbac-70f7d30dad92.png)
アップロードしたファイル名をクリックするとデータをプレビューして確認することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/140e7348-8a40-9213-30f2-2febc74c3324.png)

# 6. データを分析する
では、アップロードしたデータセットからSQLで地震データベースのデータを分析してみたいと思います。
なお、今回は2011年3月11日から2022年12月8日の震度４以上のデータとします。

SQLの実行は、データ横の三角フラスコのマークをクリックすることで実行画面に移動することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/3741283c-7ad7-f6a3-20d9-4cd45137399e.png)

今回は震源地別に地震が発生している回数を調べてみようと思います。
SQL文は以下のようになります。非常に簡単なSQL文です。
```sql
SELECT
    t.epicenter_place_name,
    COUNT(t.epicenter_place_name) as name_cnt
FROM
    [narikakun/EarthQuakeList/earthquake-2011-03-11-2022-12-08.csv] t
GROUP BY t.epicenter_place_name
```
実際に実行してみると、以下のようになります。しっかりと実行が出来ていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/32520ea7-3b3b-7e14-e92c-5e4ae7149c29.png)
また、プレビューに表示されているデータは一部なのでcsvをダウンロードすると全てのデータを閲覧できます。
SQL文の中で回数の多い順に並び替えを行いたかったのですが、実行してみると有料プランにならないと使えないみたいなのでExcelを使って多い順に並び替えました。（一部のみ抜粋）
| 震源地名 | 回数 |
|:-:|:-:|
| 福島県沖  |  118 |
| 熊本県熊本地方  |  117 |
| 宮城県沖  |  60 |
| 茨城県南部  | 48  |
| 茨城県沖  | 45  |
| 岩手県沖  | 45  |

福島県沖と熊本地方は地震の発生回数が多いことが分かりますね。

# 7. おわりに
delikaを使うと、データ分析を行う事が簡単に出来ます。無料プランではSQL文などに制限があり少し難しい点などがあるかもしれませんが、公開データで使えるデータなどがありますのでぜひ活用してみてください。

https://delika.io/

また、今回作成したデータはパブリックで公開していますので良ければご利用ください。
https://delika.io/narikakun/EarthQuakeList

以上、なりかくんがお送りしました。最後までお読みいただきありがとうございました。
テスト自動化という名目で地獄を生み出してしまった話

[テスト自動化失敗談を共有しよう！ by T-DASH Advent Calendar 2022](https://qiita.com/advent-calendar/2022/t-dash03)の４日目の記事です。

##　はじめに
今回の記事は、僕が新卒1年目に初めて開発プロジェクトに参画した時の話です。
今思うと何を考えて開発していたのか…という感じですが、供養したいと思います。
そもそもテストの自動化関係なく開発プロセスとしての失敗も含まれてますがそれも含めてお楽しみください。

## 前提となる状況
### 案件
モバイルアプリのテスト自動化案件
人間がやっているテストケースが既にあり、それを自動化するというプロジェクトでした
モバイルアプリはiOS・Android対応のため、両方で動くテストを作るのが目標でした。

### 開発メンバー
プログラマー: 自分1人
PMっぽい感じに動く人: 上司1人
（最後の方にテストコード書く人員として2人追加された)

### 選定言語・フレームワーク
- javascript
- Appium
    - webdriverio

## 失敗
### 　失敗①　そもそも対象のアプリケーションの事を何も知らないまま開発を進めた
私は外注としてテスト自動化のために参画したので、モバイルアプリの事を何も知りませんでした。
また、テストケースもエクセルを読むだけだったので、テストケースの意図やアプリの動きがふわっとした理解のままテストの自動化を始めてしまいました。
結果として納品後に、テストを動かしたもののうまく動かないというお叱りをうけました。

これは今思えばもっと情報を集めることに時間をさくべきだったと思います。
テスターの人にあってみるとか、テスト自動化の作成中に他の人にテストの動きを見てもらうとかして、本当に方針があっているかの確認をするとかでもっと良いテストがかけたと思います。

### 失敗②　環境構築が難しすぎる
もう詳細は覚えていませんが、環境構築が難しすぎて他の人が後から参画してきた時に困ったのを覚えています。
Appiumを使用していたのですが、iOSアプリを操作するためのドライバーを組み込んでアプリをビルドすると、Appiumがうまく起動しない事象が多発しておりました。

これはそもそもテスト自動化プロジェクト側でどうにかする問題ではなかったなと思っています。
私が対象のモバイルアプリのソースコードを一部いじった状態でビルドしてましたが、そもそも今後テストを自動で実行するなら余計な手順は省くべきなので、アプリ開発チームと連携してやればよかったと思います。
（まぁ外注なのでそこまで細かく要望を通せたかと言われると微妙ですが）

### 失敗③言語・フレームワークの選定が適当
　特に言語・フレームワークに関して指定がなかったので、私が調べて上司と相談して決めた記憶があります。
私としては拙い知識とGoogleを活用してなんとか調べましたつもりでしたが…。
そもそもエンジニア歴1年かつ、テスト自動化について何も知らない人間が選定したのは無理がありましたね…。
あとからwebdriverio特有の問題にぶち当たったりとか、javascript故に型情報がなく変な振る舞いをしたりと散々でした。

経験が豊富な他のエンジニアに相談するべきだっだと思います。

### 失敗④テストがアプリの変更に追従できない
テストを前提にアプリケーションが開発されていないので、xpathのid(だったかな？)ではなくフルパスを取得してテストを実行する形になっていました。
これは本当にテスト自体の保守性を下げるもので、UIの変更が少しでもあるとテストが失敗するので、保守が大変だったと思います。
テスト自動化の開発チームとアプリ開発チームでわかれていなければ、まだ良いと思うのですが…。（変更に追従しやすいため）

これもアプリ開発チームと連携して、テストの自動化用に各要素にidを埋め込んでもらえばよかったと思います。

## 最後に
このテスト自動化プロジェクト、今も動いているのだろうかと思うことがあります。
結局使えない、と判断されて廃棄されてそうな気もします…。
鳶職からSES企業に転職した話

## はじめに
本記事は[Progaku Advent Calender 2022](https://qiita.com/advent-calendar/2022/progaku "Advent Calender") 11日目担当です。
鳶職人から異業種のSESへ完全未経験（PCの操作すら分からなかった）で転職し１年半の中で経験したことや、入社当初にやっていたことなど、これからエンジニアを目指す方や未経験から目指す方たくさんいるかと思いますが少しでもこのお話で役に立てれば幸いです。

## １年半での業務内容と使用言語
* 2021年5月　～　４か月間自社研修(HTML,CSS,JS,PHP,DB)
* 2021年10月　～　保守案件に参画(HTML,CSS,JS)
* 2022年2月　～　　改修PJに参画(HTML,CSS,JS)
* 2022年5月　～　副業として改修案件のフロントリーダーとして参画(現在)
* 2022年6月　勤めていたベンチャー企業がM&Aで吸収合併し買収元の親会社へ転籍
* 2022年7月　～　新会社での社内研修(主にPHP)
* 2022年9月　～　社外研修(Java,DB)
* 2022年12月現在　～　Linux,SQLのテスト案件参画

# 入社から半年で基礎知識をつける
SESは様々な案件・現場があるので最低限基礎知識を入れておかないと現場参画も難しく、エンジニア業務とはかけ離れた案件に長期参画してしまう可能性があるのでできるだけ基礎知識を習得してこれからのキャリアをステップアップできるように準備しておくのがいいと思います。

### 基礎知識とは何か
個人的に思う基礎知識は
* PCの基本操作を覚える(ショートカットキーなど)
* テキストエディターの使い方を覚える
* マークアップ言語でコードに慣れる(HTML,CSS)
* HTML,CSSの文法を覚えて既存のサイトを模写できる
* Javascriptを使って簡単な動きのあるものを作れる

最低限これくらいの知識はつけておくと個人的にはいいかなと思います。

## 4か月間の自社研修の内容
**HTML,CSSの基礎/応用**
最初に文法やタグの種類を覚え、簡単なサイト制作から複雑なサイト制作を行い一日の終わりに進捗報告も含めチェックと指摘点をもらってカリキュラムを進めていました。

**Javascript基礎/応用**
文法を勉強し、実際HTMLで作成したサイトにJSを組み込んでスライドショーやハンバーガーメニューなど作成しました。
jQueryも同時に勉強しました。

**PHP,DB基礎/応用**
文法を勉強し、HTMLで作成したサイトにフォームを追加し入力された内容をDBでテーブル管理出来るもの作成しました。
応用編では企画・設計から実際に自分で一から作成し、ToDoListを作成しました。

### 上記研修以外にやっていたこと
* 暇な時間、寝る前にYouTubeや参考書でその日習ったことを落とし込む
* 研修はサボらずに真面目に受ける
* 休日に実際に覚えたことを実践する
* 覚えたことをしっかりアウトプットする
僕はありがたいことにProgakuというコミュニティに参加させてもらい自分よりも初学者の方に教えれる機会がありそこでアウトプットできることで覚えた知識が定着できました。

### なぜアウトプットがいいのか
勉強している大半の方は参考書読んで実際にコードを書いたりなどで勉強していると思いますが勉強して満足してる方が多いと思います。
「〇〇時間勉強した～」、「今日これだけ進めた～」と自己満で終わっていませんか？
インプットだけではなくアウトプットをしっかりやることで勉強した知識が定着します。

#### アウトプットの方法
**1. TwitterやSNSで発信する**
その日学んだことを文章にまとめて発信する

**2. 誰かに説明する**
誰でもいいです、初学者の方や同期にその日学んだことを説明する

**3. ノートにまとめる**
その日学んだことをノートにまとめて振り返りやすくする

個人的に思うのは上記３つかなと思います。
おすすめなのは2番の誰かに説明するです。
理由としては、誰かに説明するということは分かりやすく端的に説明しないといけません。
その為、学んだことを頭の中で相手に伝わりやすくかつ分かりやすいように整理しながら説明するので定着しやすいと思いました。

# まとめ
自分の過去を振り返ってこの記事を書いて、あの時頑張ったから今があると思います。この業界は常に勉強が付きものです。
基礎知識がついていれば新しく学ぶものも知識がない人より入りやすくなります。最初は分からないことだらけ、難しいと感じるかもしれませんが折れずにしっかりと将来を見据えて頑張りましょう。

### 本稿を通して伝えたいこと
* 基礎知識をつける
  * 研修をしっかり受ける
  * 予習・復習をする
  * 勉強したことを実践する
  * 暇な時間はPCを触っておく

* アウトプットをしっかりする
  * 誰かに学んだことを説明する

* 今よりも将来を見据える
　* 今きつくても折れずに頑張る
　* 諦めない

# さいごに
今回が初めての記事投稿だったので見づらいところもあったかと思いますが優しい目で見てもらえると幸いです。
異業種からこの業界に飛び込んで思ったことを書いたので同じ境遇の方や違う方にも刺激や参考になったらありがたいです。
また機会があれば書こうかなと思っています。最後までお付き合い頂きありがとうございます。
明日の記事は@usamaroさんの記事です。是非ご覧ください
この1年で技術広報としてやってきたこと、やりたいこと


# 会社と私

私は株式会社カケハシでエンジニアリングマネージャをしています。
普段は開発組織の設計や組織づくりなどを行っており、採用にもかなりの時間を使って関わっています。
今までのエンジニアの経験としてアドテク(広告テクノロジー)業界にも関わっている経験があるため、マーケティングについてもある程度の感性を持てるくらいの理解はしています。
個人的にも採用広報に非常に興味があり、技術広報については積極的に関わりたいと考えています。

カケハシはスタートアップで、薬局DXに始まり、医療業界の仕組みを変えていきたいと考えています。
ITを活用しながらより良い環境を作ることで患者さんの体験向上と医療従事者の方々の負担の軽減と専門性の高い能力をさらに発揮した活躍を出来ればと考えています。

# 採用広報と技術広報の違い

会社としては採用広報に非常に力を入れており、スタートアップの世界では知られる会社となっているように感じます。しかし、スタートアップに興味が薄いエンジニアには伝わっていない実感を感じていました。

採用広報はあくまでエンジニア職を限定しておらず、採用を目的とした広報が中心となっていました。
広い職種にアプローチしているために、エンジニアに届きやすい情報になっていない課題感がありました。
技術領域以外に興味があるエンジニアの人にしか届かないような、限定的な伝わりと感じています。

そのため、技術を軸にして伝えるという技術広報が大事であると、ちょうど去年の12月頃から活動をさらに積極的に動き始めました。


# これまでやってきたこと


#### noteとメディアリレーション
技術広報ではなく、採用広報として今までもやっていました。
主にnoteやメディアの中でもエンジニアに届くような文脈を検討するようになりました。

#### Twitterアカウント開設
https://twitter.com/kakehashipr
そもそも会社のツイッターアカウントがありませんでした。
まずは自由に発信が出来るようにツイッターアカウントを追加しました。

#### テックブログ開設
https://kakehashi-dev.hatenablog.com/
テックブログの推進者が積極的に推進して、テックブログの仕組みづくりとエンジニアの巻き込みが行われていました

#### 2021アドベントカレンダー
https://adventar.org/calendars/6859
テックブログが始まりましたが、定期的な記事では件数が貯まるまで見応えがあるコンテンツに時間が掛かるため、アドベントカレンダーを開催することで一気に読み応えがあるテックブログにすることが出来ました。
また、この年からアドベントカレンダーを開催しましたが、急遽開催を決めたため募集が短期間だったにも関わらず、たくさんの社員の方が参加してもらえることが出来て、12月の開始までに全ての日の予定を埋めることが出来ました！


#### 2022アドベントカレンダー
https://adventar.org/calendars/7444
自分が発案して、メインで推進した2021年のアドベントカレンダーからガラッと運営が代わり、有志のメンバーが声を上げてくれて今年も開催されました！
主体性が高い人が多い会社でとても嬉しいです！

#### TechPlayさんとのイベント開催
カケハシ主催での技術イベントを年間を通して定期的に行いました
たくさんの会社さんと行うことで質の高い会が開催されており、とても勉強になる会になっていると思います。

#### イベントスポンサード
DevOpsDays、デブサミ、Agile Tech Expoにスポンサードして、会社のメンバーが登壇などもさせて頂くケースもありました。
しっかり会社としても予算をつけて活動していくという決意表明というか、ちゃんと力を割いていくのだということを証明できた１歩だと考えています。
お金を出してくれている分ではないですが、本気度を感じることが出来ます。

#### 登壇推進
あまり出来ていないですが、CFPを募集している勉強会やカンファレンスの情報を共有して、エンジニアが主体的に登壇できる機会を共有をしています。


# これからやりたいこと

エンジニアに向けて技術を伝えることを増やしたいです！！

これまでの活動で、社内のエンジニアによって沢山のコンテンツが定期的に作られるようになりました！
が、なかなか伝わっていない。

どんなに面白いものを書いていても、伝えられなければ、知られなければ、読んでもらない。
その課題を解決するために、いかに伝えていくかを考えていきたいと思います。

そのため来年からは

- イベントを登壇を増やす
- 書いた記事の拡散方法を更に増やす
- イベント登壇とテックブログや発信アカウントなどの連携を強化
- 単体での点の発信ではなく、ストーリーのある線の戦略の設計してから動く

などを出来ればと思っています。


これらは気合いで出来るものではないため、技術広報を積極的に推進するため、採用広報とは別に技術広報専任のメンバーを配置し、
- 技術知識をもつエンジニア
- 広告発信などのマーケティングの知識を持つエンジニア
- 組織づくりや採用に興味関心が強いエンジニア

を上手く巻き込みながら、カケハシの開発組織を知ってもらう活動を活性化出来ればと思います。


# イベント ・ アカウント

技術広報は更に加速予定です。
来年２月に開催されるデブサミにもカケハシのメンバーが登壇予定です！
正式な登壇内容は現在検討中です。

ぜひこちらのアカウントをフォローしていただければと思います！

twitter
https://twitter.com/kakehashipr

tech blog
https://kakehashi-dev.hatenablog.com/

note
https://blog.kakehashi.life/

connpass
https://kakehashi.connpass.com/


これからもよろしくお願いします！




# 技術広報に興味がある方へ

技術広報についてご興味がある方、会社の合同勉強会、技術広報に対する対談、スタートアップ界隈の何か、その他なんでも話せることがあれば、コメントやtwitterのDMなどでご連絡ください！

https://twitter.com/t_shinden
【CodeIgniter4】クライアント「composerライブラリを使いたいけどcomposrコマンドは使わないでくれ」

# composer、使っちゃだめなの？

まあ、お上が言うなら仕方ない。

## とりあえず、ダウンロード版でCodeIgniterのインストールはしたよ

[インストール方法は割愛](https://codeigniter4.github.io/userguide/installation/installing_manual.html)
各種Pathの設定を間違えやすいので注意。

## vendorに入れないで、composerライブラリを呼び出せるようにする

今回対象になったのはこいつ

https://github.com/firebase/php-jwt

### 1. ダウンロードする

割愛

### 2. 解凍して app\ThirdParty に突っ込む

とりあえずまるごとどーん。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104999/d43ec0f8-2ef9-5580-bfd5-beb95d626101.png)


### 3. app\Config\Autoload.php に namespace を登録する

```php
public $psr4 = [
    APP_NAMESPACE  => APPPATH, // For custom app namespace
    'Config'       => APPPATH . 'Config',
+    'Firebase\JWT' => APPPATH . 'ThirdParty/jwt/src',
];
```

登録すべき namespace はたいていsrc内のファイルの頭に書いてあるよ


### 4. 使う

ここまで来ればドキュメントと同じように利用することができる。

```php
// これを宣言すればどこからでも使える
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

// Controllerでも、Modelでも、Config内でも利用可能
$jwt = JWT::encode($payload, $key, 'HS256');
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
print_r($decoded);
```

## 注：Gitに含めること

composerを利用しないので当たり前といえば当たり前だが、うっかり `.gitignore` しないこと。
Google APIやAWS PHP SDKなど、頻繁に更新される、かつ、巨大ライブラリを使いたい場合はちょっとしんどいかも。
（Facebook SDK for PHP の PHP8対応版は出ないの・・・？）
DoctrineとEloquent比較大全10: 複雑な条件での絞り込み(2) QueryBuilder

day10の今日は、LIKE, IN, IS NULLを使った複雑な条件での絞り込みのやり方を見ていきます。

## Doctrine

```php
<?php

declare(strict_types=1);

use App\Entity\Book;
use Doctrine\ORM\EntityManagerInterface;

require __DIR__.'/../vendor/autoload.php';

/** @var EntityManagerInterface $entityManager */
$entityManager = require __DIR__.'/bootstrap.php';

// タイトルにSymfonyを含み、値段が2000,3000,4000円ぴったりである本
$qb1 = $entityManager->getRepository(Book::class)
    ->createQueryBuilder('b');
$exprHelper1 = $qb1->expr();
/** @var array<Book> $books1 */
$books1 = $qb1
    ->where($exprHelper1->like('b.title', ':title_symfony'))
    ->andWhere($exprHelper1->in('b.price', ':price_list'))
    ->setParameter('title_symfony', '%Symfony%')
    ->setParameter('price_list', [2000, 3000, 4000])
    ->getQuery()
    ->getResult()
;

// タイトルにSymfonyを含み、説明がnullである本
$qb2 = $entityManager->getRepository(Book::class)
    ->createQueryBuilder('b');
$exprHelper2 = $qb2->expr();
/** @var array<Book> $books2 */
$books2 = $qb2
    ->where($exprHelper2->like('b.title', ':title_symfony'))
    ->andWhere($exprHelper2->isNull('b.description'))
    ->setParameter('title_symfony', '%Symfony%')
    ->getQuery()
    ->getResult()
;
```
<https://github.com/77web/doctrine-vs-eloquent/blob/fafeb5ca1beeed0e7e49aeceae387bef5afa0d31/Doctrine/Usecase/filter_by_complex_condition_02.php>

- like, in, is nullは `Expr` ヘルパークラスを使って指定することができます。

## Eloquent

```php
<?php

declare(strict_types=1);

use App\Models\Book;
use Illuminate\Database\Eloquent\Collection;

require __DIR__.'/../vendor/autoload.php';

// タイトルにSymfonyを含み、値段が2000,3000,4000円ぴったりである本
/** @var Collection<Book> $books1 */
$books1 = Book::query()
    ->where('title', 'like','%Symfony%')
    ->whereIn('price', [2000, 3000, 4000])
    ->get()
;

// タイトルにSymfonyを含み、説明がnullである本
/** @var Collection<Book> $books2 */
$books2 = Book::query()
    ->where('title', 'like','%Symfony%')
    ->whereNull('description')
    ->get()
;
```
<https://github.com/77web/doctrine-vs-eloquent/blob/7ab3bfacad11d05923fdfc9b8da8ca6f59e29133/Eloquent/Usecase/filter_by_complex_condition_02.php>

- likeはwhereのoperationとして指定できます。
- in は `whereIn()` という専用メソッドを使います。
- is nullは `whereNull()` という専用メソッドを使います。
可能性に基づく品詞体系の話

## 品詞付与タスク

形態素解析の主たる機能はおおきく以下の3つにわかれます。

1. 分割
2. 品詞付与
3. 語形処理

それぞれ、テキストから語 (形態素) への分割、分割した語への名詞や動詞などの品詞の付与、活用や語形変化の正規化などをおこないます。日本語ではまとめて形態素解析として処理されることが一般的ですが、日本語以外の言語ではそれぞれのタスクをべつのツールで処理することもひろくおこなわれています。

とくに英語では分割タスクは比較的容易なものの、同形でことなる品詞をもつ語が頻出するため品詞付与 (Part of speech tagging) のタスクが重要になります。

|Time|flies|like|an |arrow|
|:--:|:---:|:--:|:-:|:---:|
|NN  |VBZ  |IN  |DET|NN   |

「光陰矢のごとし」と訳される英文ですが flies が動詞「飛ぶ」と名詞「ハエ」、like が前置詞「~のように」と動詞「好む」の曖昧性をもつため、適切に品詞付与をおこなわないと「時蝿は矢を好む」のようなまちがった解釈になってしまいます。英語における品詞付与は単なる単語 n-gram だけでは解けず統語構造や語の選好といったことまで考慮する必要のあるむずかしい問題です。そのためこれまでにさまざまな POS tagger が提案、開発されています。

## 可能性に基づく品詞体系とは

さて、日本語の形態素解析ではこの品詞付与の問題はどのようにあつかわれているでしょうか。

英語のように目立ちはしませんが日本語でも同形で品詞がことなる曖昧性は存在します。

- 今日の天気は晴れです。 ...(1)
- 今日、健は奈緒美に会いました。 ...(2)

(1) の「今日」は名詞として助詞「の」をともない連体修飾部になります。(2) は単独で「会いました」にかかり連用修飾部になる副詞です。

では Sudachi の解析結果をみてみましょう。

```plaintext:今日の天気は晴れです。
今日    名詞,普通名詞,副詞可能,*,*,*    今日
の      助詞,格助詞,*,*,*,*     の
天気    名詞,普通名詞,一般,*,*,*        天気
は      助詞,係助詞,*,*,*,*     は
晴れ    名詞,普通名詞,一般,*,*,*        晴れ
です    助動詞,*,*,*,助動詞-デス,終止形-一般    です
。      補助記号,句点,*,*,*,*   。
EOS
```
```plaintext:今日、健は奈緒美に会いました。
今日    名詞,普通名詞,副詞可能,*,*,*    今日
、      補助記号,読点,*,*,*,*   、
健      名詞,固有名詞,人名,名,*,*       健
は      助詞,係助詞,*,*,*,*     は
奈緒美  名詞,固有名詞,人名,名,*,*       奈緒美
に      助詞,格助詞,*,*,*,*     に
会い    動詞,一般,*,*,五段-ワア行,連用形-一般   会う
まし    助動詞,*,*,*,助動詞-マス,連用形-一般    ます
た      助動詞,*,*,*,助動詞-タ,終止形-一般      た
。      補助記号,句点,*,*,*,*   。
EOS
```

どちらも「名詞-普通名詞-副詞可能」になっています。

これが UniDic や ipadic で採用されている「可能性に基づく品詞体系」です。形態素解析の段階で曖昧性のある場合、どちらかに決めるのではなく「名詞 or 副詞」のように曖昧性をそのまま出力することで係り受け解析などの後段処理でより適切な結果を採択することを意図しています。

Sudachi が利用している UniDic の品詞体系ではこの他にも「名詞-普通名詞-サ変可能」「動詞-非自立可能」など可能がつく品詞がいくつかあります。これらはすべて曖昧性をもたせた品詞です。

UniDic 品詞体系はおおむね学校文法に準拠していますが、形容動詞については活用語尾を切り離し、語幹を「形状詞」としています。

```plaintext:静かになる。
静か    形状詞,一般,*,*,*,*     静か
に      助動詞,*,*,*,助動詞-ダ,連用形-ニ        だ
なる    動詞,非自立可能,*,*,五段-ラ行,終止形-一般       成る
。      補助記号,句点,*,*,*,*   。
```

このことで助動詞「だ」にも曖昧性が生じます。

- (危険なものがまじっている中で指をさして) それは安全だ。 ...(3-a)
- (大切なものはなにかという問いかけに答えて) それは安全だ。 ...(3-b)

学校文法では (3-a) の「安全だ」は形容動詞、(3-b) は名詞「安全」と助動詞「だ」です。UniDic では形容動詞語幹を形状詞とし、形容動詞活用語尾を助動詞「だ」に統合しているので「安全」だけでなく「だ」にも曖昧性をもたせていると解釈することができます。

```plaintext:それは安全だ。
それ    代名詞,*,*,*,*,*        其れ
は      助詞,係助詞,*,*,*,*     は
安全    名詞,普通名詞,形状詞可能,*,*,*  安全
だ      助動詞,*,*,*,助動詞-ダ,終止形-一般      だ
。      補助記号,句点,*,*,*,*   。
```



## 可能性に基づく品詞体系への批判

このように可能性に基づく品詞体系では曖昧性のある解析は曖昧性をのこしたまま出力しますが、裏をかえせば本来解くべき問題を解かずに先送りしているということもできます。英語の POS tagging がむずかしい問題をそのまま解いているのとくらべ問題をより単純なものに再構成しているのです。

これに対し英語などと同様に本来の問題を解くべきという批判は当然ありえます。日本語の形態素解析は高い精度を誇りますが、こういった問題の組みかえで下駄をはかせているわけですから正当な評価とはいえないかもしれません。原理的に単語 n-gram で解けない問題は解かずにすむようにタスクを設計し辞書やコーパス、評価手法を整備した結果、前段の条件がわすれられタスクが固定的にとらえられているようにもみえます。

「現代日本語書き言葉均衡コーパス (BCCWJ)」の長単位では可能性に基づく品詞体系ではなく、じっさいの文脈にあわせて曖昧性のない品詞が付与されています[^2]。こういったリソースを利用して曖昧性のない品詞を付与するタスクに挑戦してみるのもいいかもしれません。

[^2]: 『現代日本語書き言葉均衡コーパス』利用の手引 第1.1版, 第5章 形態論情報, p. 89, https://clrd.ninjal.ac.jp/bccwj/doc.html#01

形態素解析は一見、枯れたタスクのようにみえますが、あらためて問題をとらえなおすとまだまだやるべきことはおおくあるようにおもいます。

ではよい Sudachi life を。
【Docker Compose】RedmineをGoogleDriveで自動バックアップ環境を構築【Windows11】

## Introduction

`Redmine`をローカル環境で構築するとサーバーの費用などが不要であったり，自由度が高いなどメリットが多いのですが，やはり保守面が弱いですよね．たとえば，サーバーがいきない壊れた場合など対策をしていなければ一発でアウトです．しかし，バックアップ用のスクリプトを書くにしても書き出しと読み込みのスクリプトを書かなければならないなど結構面倒です．

そこで今回はなるべく簡単にバックアップ環境を構築しようと思います．ザックリいうとGoogleDriveをコンテナのマウントすることで自動的にバックアップを取ろうという考えです．また，今回も`Docker-compose`を使って秒速で環境を構築できます．



## Updates!!
* 【2022/10/14】 [Redmineを秒速導入`Docker`ファイル作成](https://hamaruki.com/2022/10/14/docker_001/)
* 【2021/10/15】 [テーマ変更方法の追加](https://hamaruki.com/2022/10/15/docker_003/)
* 【2021/10/16】 [スマホからアクセスする環境の構築](https://hamaruki.com/2022/10/16/docker_004/)
* 【2021/12/10】 [バックアップ環境の構築]()


## environment

- Windows11
- Google Drive

## Quick Start

https://hamaruki.com/2022/12/10/docker_005/


## Reference site

- [はまる木 redmine 関係のサイト](https://hamaruki.com/?s=redmine)
- [Dockerを使ってEC2にredmineを構築する(前編)](https://www.geekfeed.co.jp/geekblog/docker-redmine)
- [Docker Compose で Redmine 公式イメージを起動する](https://blog1.mammb.com/entry/2020/05/24/090000)
- [Docker ComposeでRedmineを動かす](https://www.orzs.tech/docker-compose-redmine/)
Send Draft.js data to a server and fetch it with React hooks


## POST

- Get current content from the editor state using ``editorState.getCurrentContent()`` and save that to a variable.
- Convert the current state to a string with these methods: ``JSON.stringify(convertToRaw(data));``

## GET

- Display the data in a Draft.js Editor set to ``readOnly``
- Fetch the post from the server and then convert it to readable content with this.
``const contentState = convertFromRaw(JSON.parse(el.content));
    const editorState = EditorState.createWithContent(contentState);``
- Show it in an Editor like so:
``<Editor editorState={editorState} readOnly={true}``

## GET（React Hooks）


```
useEffect(() => {
    postId && getPost(postId)
  }, [postId]);

  const [editorState, setEditorState] = useState(EditorState.createEmpty())
  useEffect(() => {
    if(postcontent) {
      const contentState = convertFromRaw(JSON.parse(postcontent));
      const newEditorState = EditorState.createWithContent(contentState, decorator);
      setEditorState(newEditorState);
    } else { 
      console.log("false")
    }
  }, [postcontent])
```

https://javascript.plainenglish.io/send-draft-js-data-to-a-server-and-fetch-it-with-react-hooks-735f20cc2b5c

https://github.com/draft-js-plugins/draft-js-plugins/issues/1665
AtCoder Beginner Contest 281 A問題とB問題をPythonで解いてみました

ABC281(AtCoder Beginners Contest 281)
A問題とB問題をPythonで解いてみました。
- コードは雑めです。ゆるしてー
- 競技プログラミングの勉強一切したこと無いので、テクニックは知らないよ。ごめんねー

## A問題(diff=6)
[提出コード](https://atcoder.jp/contests/abc281/submissions/37187651)
```python
n = int(input())
for i in range(n,-1,-1):
  print(i)
```
pythonのrange便利ッスねー
ワンライナーでも行けそう

## B問題(diff=66)
[提出コード](https://atcoder.jp/contests/abc281/submissions/37189668)
```python
def judge(s):
  try:
    if 'A'<= s[0] <= 'Z' and 'A'<= s[7] <= 'Z':
      num = int(s[1:7])
      if 100000 <= num <= 999999:
        return 'Yes'
  except:
    pass
  return 'No'
 
s = input()
print(judge(s))
```
文字列は必ずしも8文字と限らない（IndexErrorが出る）
真ん中の数字部分も英文字が混ざる可能性がある(ValueErrorが出る)
ので if文使うより便利だろうということで bare except を使用しました
関数化したのは趣味ですね。人それぞれで良いかと。
bare except はPython公式ドキュメントにも記載がありますがアプリ開発ではあまり使わないでね


## 追記
[PythonでAtCoderを解くときにちょっと得するメモ](https://qiita.com/T_death/items/c415728b309173c2521f)を使うともう少し短く書けるとは思う

### B問題 `A123456BC` みたいなのが本来はだめなのに Yes って出そう
- 指摘があったので追記しておきます。
- たまたまACしていますが、言われてみると確かにおかしいですね。
- テストケースに上記のようなパターンがなかったものと思われます。
LaTexでlstlistingを使用した時に日本語が文字列判定されない問題

# 問題のコード
``` latex
\usepackage{listings,jlisting}

\definecolor{green}{RGB}{104,180,104}
\definecolor{blue}{RGB}{49,49,255}
\definecolor{orange}{RGB}{255,143,102}

\lstdefinestyle{Python}
{
  language=Python,
  basicstyle=\small\ttfamily,
  numbers=left,
  numberstyle=\tiny,
  frame=tb,
  tabsize=4,
  columns=fixed,
  showstringspaces=false,
  showtabs=false,
  keepspaces,
  commentstyle=\color{green},
  keywordstyle=\color{blue},
  stringstyle=\color{orange}
}
```

このようにスタイルを定義した時、以下の記述では日本語がstringstyleで指定したスタイル(オレンジ色)にならない。

``` latex
\begin{lstlisting}[style={Python}]
print('日本語')
\end{lstlisting}
```

**結果**
![sc.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407197/12203810-921d-7d28-f2e7-fc19f8eb3c47.jpeg)

# 対策

以下のような記述に変更すると、日本語にもスタイルが適応される。

``` latex
\usepackage{listings,jlisting}

\definecolor{green}{RGB}{104,180,104}
\definecolor{blue}{RGB}{49,49,255}
\definecolor{orange}{RGB}{255,143,102}

\lstdefinestyle{Python}
{
  language=Python,
  basicstyle=\small\ttfamily,
  numbers=left,
  numberstyle=\tiny,
  frame=tb,
  tabsize=4,
  columns=fixed,
  showstringspaces=false,
  showtabs=false,
  keepspaces,
  commentstyle=\color{green},
  keywordstyle=\color{blue},
  stringstyle=\color{orange},
  % escapecharを追加
  escapechar={\@}
}
```

``` latex
\begin{lstlisting}[style={Python}]
print(@\color{orange}'日本語'\color{black}@)
\end{lstlisting}
```

escapecharで囲まれた部分はLaTexコマンドを使用することができるので、スタイルを適応することができる。今回の場合は、文字の色を変えたかったので、

``` latex
@\color{orange}'日本語'\color{black}@
```
のようにすることで文字の色をオレンジに変えることができた。

**結果**
![sc.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407197/d8282d2b-cd5d-1a12-04dd-e0296c49e81e.jpeg)

# 参考資料
https://qiita.com/aheshiyu/items/7e25fcd4f25420106cff
二次方程式の解の公式

# はじめに

二次方程式の解の公式の導き方を忘れかけていたのでメモ

# 二次方程式

$x$に関する方程式

```math
ax^2+bx+c=0\tag{1}
```

ただし

```math
a\ne0\tag{2}
```

を二次方程式という．

# 解の公式の導出

$(2)$より，$(1)$の両辺を$a$で割れるので，

```math
x^2+\frac{b}{a}x+\frac{c}{a}=0\tag{3}
```

ここで，

```math
\begin{align}
d&=\frac{b}{a}\tag{4}\\
e&=\frac{c}{a}\tag{5}
\end{align}
```

とすることで，

```math
x^2+dx+e=0\tag{6}
```

となり，二次の係数が消える．
次に，ある数$f$を用いて

```math
\begin{align}
y&=x+f\tag{7}\\
g&=y^2\tag{8}
\end{align}
```

とすると，

```math
\begin{align}
y^2-g&=0\\
(x+f)^2-g&=0\\
x^2+2fx+f^2-g&=0\tag{9}
\end{align}
```

$(6)$と$(9)$の各係数が等しいとすると，

```math
\begin{align}
d&=2f\tag{10}\\
e&=f^2-g\tag{11}
\end{align}
```

$(10)$より，

```math
f=\frac{d}{2}\tag{12}
```

これと$(4)$より，

```math
\begin{align}
f&=\frac{d}{2}\\
&=\frac{b}{2a}\tag{13}
\end{align}
```

また，$(11)$より，

```math
g=f^2-e\tag{14}
```

これと$(13)$より，

```math
\begin{align}
g&=f^2-e\\
&=\left(\frac{b}{2a}\right)^2-e\\
&=\frac{b^2}{4a^2}-e\tag{15}\\
\end{align}
```

これと$(5)$より，

```math
\begin{align}
g&=\frac{b^2}{4a^2}-e\\
&=\frac{b^2}{4a^2}-\frac{c}{a}\\
&=\frac{b^2-4ac}{4a^2}\tag{16}
\end{align}
```

ここで，$(8)$を$y$について解くと，

```math
y=\pm\sqrt{g}\tag{17}
```

これと$(16)$より，

```math
\begin{align}
y&=\pm\sqrt{g}\\
&=\pm\sqrt{\frac{b^2-4ac}{4a^2}}\\
&=\pm\frac{\sqrt{b^2-4ac}}{2a}\tag{18}
\end{align}
```

これと$(7)$より，

```math
\begin{align}
x+f&=\pm\frac{\sqrt{b^2-4ac}}{2a}\\
x&=-f\pm\frac{\sqrt{b^2-4ac}}{2a}\tag{19}
\end{align}
```

これと$(13)$より，

```math
\begin{align}
x&=-\frac{b}{2a}\pm\frac{\sqrt{b^2-4ac}}{2a}\\
&=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
\end{align}
```

終わり
[JAVA]数当てゲーム

# はじめに

今回はJavaを利用して、「数当てゲーム」という練習をやってみようと思います。すごく簡単な問題ですが、自分の作ったゲームをやれば、すごく充実感を得ることができます。ぜひ一度ためしてみてください。

# 動作環境

- Window11
- Java SE 16

# フローチャート

![フローチャート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958501/647c67ca-a80e-f36e-1f85-886ebd9b22ed.png)

# ソースコード
```java
package GuessGame;

import java.util.Random;
import java.util.Scanner;

public class GuessGame {

	public static void main(String[] args) {
		// 入力準備
		Scanner scanner = new Scanner(System.in);
		// Randomをインスタンス化
		Random random = new Random();
		// 今回は100以内の数字をランダムに生成する
		int randomNumber = random.nextInt(100) + 1;
        // 当たるまで繰り返し
		while (true) {
			System.out.print("100以内の数字を入力してください: ");
			int inputNumber = scanner.nextInt();
            // 当たったらゲームを終了する
			if (inputNumber == randomNumber) {
				System.out.print("あたり!");
                // ループから抜ける
				break;			
			} else if (inputNumber < randomNumber) {
				System.out.println("小さい");
			} else {
				System.out.println("大きい");
			}
		}
		scanner.close();
        System.out.println("ゲーム終了します");
	}
}
```
# 実行結果

![実行結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958501/04c3ed21-c352-a077-4e5a-486e9aa262c8.png)

# ポイント
- 今回は100以内の整数を生成することにします。
- nextInt(100)だと、実際に**0～99**ですので、プラス１を忘れないください。
- breakを書き忘れたら、**無限ループ**になります。ご注意ください。
- ソースを読み込んているときは常に**Scanner**を閉じることを推奨します。**close**により、使用されていない入出力ストリームが開かれないことを確実にします。

# 参考サイト

- [java.util.Scanner](https://docs.oracle.com/javase/jp/16/docs/api/java.base/java/util/Scanner.html)
- [java.util.Random](https://docs.oracle.com/javase/jp/16/docs/api/java.base/java/util/Random.html)
個人的にブラボーだったUI/UX3選

この記事は ウェブクルー Advent Calendar 2022 11日目の記事です。
昨日は @wc-kadowaki さんの「 [前職でのやらかしと教訓](https://qiita.com/wc-kadowaki/items/b87cca2328872ab08e01) 」でした。

いいな～と思ったUI/UXに関するものを日々ストックしているので、一部ご紹介したいと思います。
個人的な見解になりますので、その点ご了承ください！

## セクションを区切るインタラクション
こちらはショッピングモールのフロアガイドです。
セクションを区切る際、罫線を引いたり、大きく余白を取ったりすることが多いと思いますが、こちらは次のセクションが画面の真ん中あたりに到達した際に、スッと上1つ前のセクションの末尾に帯がかかります。
CSSで作れる簡単なもので、小ワザが効いているな～と思いました、ブラボー！
![RPReplay_Final1670674151_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314279/b8847b70-89f5-2ce3-978c-005beadbcb01.gif)
参照元：[https://www.kosugi-square.com/floor/](https://www.kosugi-square.com/floor/)

## 申込フォームのインタラクション
こちらは保険の申し込みフォームですが、ここまで細かいインタラクションを採用しているのはシンプルにすごい！
そして何より入力していて楽しいという点が素晴らしくお得感があります。
弊社でも一括見積りなどをはじめ、多くのサービスで「フォーム」を制作していますので、大変勉強になります…。
最近一番入力していて楽しかったなと感じたフォームでした、ブラボー！
![RPReplay_Final1663082221_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314279/453728b5-fa27-3dcc-d78d-38e01f624ae3.gif)
参照元：[https://www.zurichssi.co.jp/kazai/quote/](https://www.zurichssi.co.jp/kazai/quote/)

## エラーの出し方
こちらはECサイトのアプリです。
赤い「エントリーする」ボタンを押すとボタン自体がグレーアウトし押せない状態になるのですが、エラーが返って来てしまった際にこのような表示になりました。
エラー画面に遷移させたり、画面上下のフローティングやモーダルウィンドウを使って表示させたりが多いと思いますが、その場所に表示させることで「どこで何が起きた（エラーが出たのか）」を明確にユーザーに伝えるいいアイディアだと思いました。
他のコンテンツの表示を妨げないのもすごくいいですよね。
エラー表示時ちょっとしたインタラクションも導入しており、とってもブラボー！
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314279/dc1f2a73-0da2-b7f5-c98b-9c3cae77460a.jpeg">
参照元：[https://shopping.yahoo.co.jp/](https://shopping.yahoo.co.jp/) のアプリ版

## おわりに
いかがでしたでしょうか？
普段何気なく触っているサイトやアプリからアイディアをもらって、制作に活かしていきたいなと思いました。
またストックが溜まったらご紹介できればと思います。

明日は、@yagiyuuuu さんの記事です。
よろしくお願いします！
連続して重複する値を削除(numpy)

# 同じ値が連続する場合に除去したい
ある経路に対して垂直方向を計算したいときに、同じ座標が連続していて、
垂直方向が計算できず。
連続した値を除去する方法、検索方法が悪いのか、いいのがなかなか見つけられず(Pandasはあったけど)

## Numbaなし版
```python
def remove_dpl_no_numba(x):
    return x[np.append(True, np.diff(x, axis=0).sum(axis=1) != 0)]
```

## Numbaあり版
```python
from numba import jit, f8
@jit(f8[:,:](f8[:,:]))
def remove_dpl(x):
    d = x[1:, :] - x[:-1, :]
    s = d.sum(axis=1)
    f = np.append(True, s != 0)
    return x[f]
```
```numpy.diff```の```axis```がNumbaで使えないので、式に展開(はじめ何事かと思った)

## 比較してみた
[リストの連続して重複する値を削除](https://funmatu.wordpress.com/2017/10/14/%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E9%80%A3%E7%B6%9A%E3%81%97%E3%81%A6%E9%87%8D%E8%A4%87%E3%81%99%E3%82%8B%E5%80%A4%E3%82%92%E5%89%8A%E9%99%A4/) と比較してみた

```python
from itertools import groupby

hoge1 = np.c_[x, y]
hoge2 = hoge1.tolist()

%timeit remove_dpl1(hoge2)
%timeit remove_dpl2(hoge2)
%timeit remove_dpl3(hoge2)
%timeit [next(g) for _,g in groupby(hoge2)]
%timeit remove_dpl(hoge1)
%timeit remove_dpl_no_numba(hoge1)
```

リスト版はじめ30µsだったのに、何回か実行しているとなぜか20µsになってきた。
とは言え、元データはnumpyなので、tolist分は遅いし。
リスト版でnumba.jitできればよかったけど、reflected listとかよくわからん。
まあ、そこまで速度気にする必要はないんだけど、for文使いたくなかったので・・・
折角for文使わなかったのがどうなのか調べたく・・・


```
19.9 µs ± 167 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
20.4 µs ± 410 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
27.7 µs ± 191 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
29.7 µs ± 390 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
3.86 µs ± 67.5 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
18 µs ± 378 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
```
【ルール説明・basic】role-name

こちらの記事は[Ansible lint Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ansible-lint) 11日目の記事になります。


今回はルール[role-name](https://ansible-lint.readthedocs.io/rules/role-name/)について説明します。

### role-name

Role名がAnsible lintで定められたルール通りに命名されているか検査します。「`小文字のアルファベット・数字・アンダースコア（_)のみ利用可、最初の文字は小文字のアルファベットから始まる。`」これがAnsible lintにおけるロール名の命名規則です。この命名規則に違反しているとエラーが出力されます。

#### 問題のあるコード

```yaml
---
- name: Example playbook
  hosts: localhost
  roles:
    - 1myrole # <- アルファベットの小文字から始まらない
    - myrole2[*^ # <- 無効な文字列が含まれている
    - myRole_3 # <- アルファベットの大文字が含まれている
```


#### 修正されたコード

```yaml
---
- name: Example playbook
  hosts: localhost
  roles:
    - myrole1 # <- アルファベットの小文字から始まる
    - myrole2 # <- 有効な文字列のみ含まれている
    - myrole_3 # <- アルファベットの小文字で命名されている
```

### 参考サイト

* [role-name — Ansible Lint Documentation](https://ansible-lint.readthedocs.io/rules/role-name/)
今からでも遅くない！最新のUnityエディタ拡張を知ろう 〜 UIElementsのすすめ 〜

本記事は、アカツキゲームス主催の [Akatsuki Games Advent Calendar 2022](https://adventar.org/calendars/7459) 11日目の記事です。
昨日はShuさんの「[Firewall your Cloud Run Service using Terraform
](https://shadabambat1.medium.com/firewall-your-cloud-run-service-using-terraform-582848679eab)」でした。

元々書こうとしていた内容があったのですが、色々あって裏取りができなくなったため、元々別の講演で発表しようとしてお蔵入りになったスライドを、Confidentialな内容を削除して掲載します！

内容はUnityの「IMGUI」に代わる新UIシステム、「UIElements」に関するものです。
そのうち、スライドではなく記事として読めるようにリンク先の内容をQiita記事として本ページに移植するつもりです。

https://docs.google.com/presentation/d/1Vc1b-fUe1AvGlkey1Z0OP5M2A7ZXEpm7G3HnuQxPpAQ/edit?usp=sharing
障害者手帳が使える施設をマップで見られるサービスを２日で作った話

# Table of Contents <!-- omit in toc -->

- [はじめに](#はじめに)
- [作ったサービス](#作ったサービス)
- [開発の目的](#開発の目的)
- [使用した技術](#使用した技術)
- [これからやりたいこと](#これからやりたいこと)


# はじめに

これは[DeafEngineers Advent Calendar 2022](https://qiita.com/advent-calendar/2022/deafengineers)の11日目の記事です。

こんにちは
[株式会社WE UP](https://corp.weup.jp/)というスタートアップでフロントエンドエンジニアとして働いている、Aki(@jsjx1995)です。

今回はDeafEngineersのアドベントカレンダーということで、自分もご多分に漏れず聴覚障害を持っている一人です。

今回は障害者手帳で割引が効くかどうかを検索するときに、食べログのように場所と割引情報が簡単に検索できるようなサービスがあればいいのにな、という想いから土日の二日間で自分でそういうサービスを作った話を書きます。

アドベントカレンダーに書きます！というふうに意思表示でもしないとアウトプットしないなと思ったのと、これから色々な人を巻き込んでいきたいなと思ったので、記事にしようと思いました。

# 作ったサービス

TRIPASS
https://tripass.xyz

Github
https://github.com/jsjx1995/tripass-pwa

# 開発の目的

### 自身の問題をITで解決したい

冒頭でもお話したように、私は聴覚障害を持っており、同時に障害者手帳を持っているのですが、障害者手帳を持っていると実は思っているよりも様々な場所で割引が受けられます。
しかし、自分は昔から調べることが苦でないし、パソコンやスマホに慣れているので、問題なく自分が欲しい情報を手に入れる事ができますが、自分がこれから行こうとしている駐車場料金がいくらなのか、利用しようとしている施設がいくらなのか、もっと簡単に検索したいと感じていました。
また、そういったことを調べるのが難しい、あるいはかなり億劫だと感じる人は、障害の有無に関わらずに、少なくないと思うので、そういった人のためにも、こういったサービスは需要がある

そのため、そういった情報を某グルメ検索サービスやその他の便利なアプリのように、ITリテラシーが低い人でも情報にアクセスできるアプリがあればいいなと感じていましたが、既存のサービスは文字ベースで、GoogleMapsのように直感的に検索できるものではなかったため、せっかくだから自分でそれを作ろうと思いました。

### 自分のサービスを持ってみたい

エンジニアなら誰しも持つ野望の一つだと思います。
自分自身のサービスをなにか作りたいなとずっと思っていましたが、モチベーションが長続きしなかったり、技術力が足りないとか言い訳したりで何度も挫折しています。

挫折した理由の一つとして、技術力が足りないのはあると思いますが、ユーザによるレーティング機能や、写真投稿機能、お気に入り機能など、最初の段階で様々な機能を盛り込みすぎたことでした。

そのため、色々な機能を盛り込みたいという気持ちを抑えて、スコープを極限まで削ぎ落として、百聞は一見にしかず、ということで、人に見せることができる形あるものをつくる、土日の二日間で開発できるレベルのものにする、というふうにしたのがよかったのかなと思います。

ただ、実際に作ってみると、マップに表示させるだけだとUI/UXもあったもんじゃないし、サービス名もホーム画面もないから認知はされづらいわで、使ってもらいたいのであれば最初の規模はそれなりのものにする必要があるのだなと感じました。

# 使用した技術

フロントエンド: TypeScript, Next.js, Material-UI(v5), Mapbox
バックエンド: MySQL, tRPC
インフラ: PlanetScale, Vercel
その他: Python, BeautifulSoup

フロントエンドは、現在の仕事や副業でも使っていたNextJSとTypeScriptです。
バックエンド（API）は簡単なリクエスト処理しかしないので、NextJSのAPI機能を使ってやろうと思いました。

本当は勉強がてらGoを使って書こうと思ったのですが、個人開発では、技術学習のためにやるのか、サービス・アプリのためにやるのかはっきりさせて、サービス・アプリのためにやるならあまり慣れない技術を使うなと聞いたことがあり、言語学習は別の機会にすることにしました。
ただ、tRPCは使ってみたかったのと、学習コストがそんなに高くないなと思ったので使ってみました。

インフラはVercelです。
DBに関しては、最初Firebaseのfirestoreでやろうと思ったのですが、key-value形式はどうにもやりにくいなと思い、調べたらPlanetscaleというサービスが最近熱い模様なので、MySQLを使ってそこにDBを置いています。

今回サービス内部で表示するデータですが、某サイトからPython, BeautifulSoupを使ってスクレイピングして取得しました。
また、マップ表示はMapboxを使っているのですが、緯度経度情報はGoogleMapsのGeocoding APIを使ってデータを取得しました。
この時GCPを登録したばっかりだったので無料枠があったのですが、それでも全部で３，４万ぐらいかかってしまいました。
今思うと、都道府県ごとでデータセットが分けられていたので、月ごとで細かくAPIを叩けば、月ごとの無料枠でやりくりすることができたのかもしれないなと思いました笑

# これからやりたいこと

Next Actionとして、以下のことをやりたいと思っています。

- アイコンをもう少し統一感のあるものにする。
- PCの場合だとマウスをアイコンにホバーすると吹き出しが表示されて、それをクリックするとモーダルが表示されるのだけど、スマホだとタッチすると吹き出しは一瞬しか表示されずに、モーダルがそのまま表示される。
- アイコンをマップに表示させるまでが遅すぎるので、どうやれば改善できるのか調べる。
- 別のアプリとしてのほうがいいかもしれないが、都民は都営が無料で利用でき、都営の路線情報や時刻情報が公開されているため、都営の路線（地下鉄やバス）のみを利用した乗換案内サービスを実装したい。
    - アルゴリズムとしてもダイクストラ法とかの勉強になりそう。

一人でやっていると自分のモチベ次第になってしまうので、やはりデザインができる人や他の開発者など、様々な人を巻き込んでいくのがいいですね。

以上です。
【ログ】AtCoder Beginner Contest 150 B - Count ABC

# 問題文
>英大文字のみからなる長さ N の文字列 S があります。
>S の連続する部分列 (入出力例をご覧ください) として ABC がいくつ含まれるかを求めてください。

# 入力と出力
>N
S

>S が連続する部分列として含む ABC の個数を出力せよ。



# ACコード
```#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
    int n;
    string s;

    cin >> n >> s;
    int counter = 0;
// ｓ文字列を全探索。
    rep(i, n-2){
// "ABC"が連続で続いた場合、counter++。
        if(s.at(i) == 'A'){
            if(s.at(i+1) == 'B'){
                if(s.at(i+2) == 'C') {
                    counter++;
                }
            }
        }
    }
    cout << counter << endl;
}
```
# つまずいたところ
コードテスト一回目にループの回数をn回に指定してエラーをはかせた。n-2回ループさせればそれ以降はループの必要はなし。
（n=10の場合、8回目で8文字目、9文字目、10文字目を調べるから）
GraphQL サーバー構築(その2. Mutation の実装)

# Mutation の実装
## 前回
[ローカルでGraphQL サーバー構築(その1. Apolloを利用したgraphqlサーバー立ち上げまで)](https://qiita.com/ponchuchu/items/93a23d08161e45bfc77f)

## 今回やること
- [x] mutation typeスキーマの定義
- [x] リゾルバの定義
- [x] playgroundでテスト

### mutation typeスキーマの定義
```ts:index.ts
const typeDefs = `#graphql

 (略)

  type Mutation {
    addBook(title: String, author: String): Book
  }

`;
```

### リゾルバの定義
```ts:index.ts
const resolvers = {
    (略)

    Mutation: {
        addBook(parent, args: {title:string, author: string}){
            const book = {
                author: args.author,
                title: args.title,
            };
            books.push(book)
            return book;
        }
      }
};
```
### playgroundでテスト
```graphql: request
mutation addBookTest{
  addBook(author: "test", title: "title") {
    author,
    title
  }
}
```

```json: response
{
  "data": {
    "addBook": {
      "author": "test",
      "title": "title"
    }
  }
}
```

* bookが追加されていることを確認
```graphql: request
query ExampleQuery {
  books {
    author
    title

  }
}
```

```json: response
{
  "data": {
    "books": [
      {
        "author": "Kate Chopin",
        "title": "The Awakening"
      },
      {
        "author": "Paul Auster",
        "title": "City of Glass"
      },
      {
        "author": "test",
        "title": "title"
      },
      {
        "author": "test",
        "title": "title"
      }
    ]
  }
}
```
* okです。

## このやりたいこと
- [x] .graphqlファイルを利用したリファクタリング

https://qiita.com/ponchuchu/items/c1370afbf7b318a973d4


- [ ] graphql-codegenでTypeScriptの型定義を生成する
- [ ] prismaとの連携
参考: [APOLLO DOCS](https://www.apollographql.com/docs/apollo-server/data/resolvers)
FedoraとCanon製プリンターでWi-Fi経由で印刷する

# はじめに

たまたま印刷に成功したので備忘録的な感じです．

自分もよく理解していないので誤っている点などありましたらコメント等で知らせて頂ければ幸いです．

# 実行環境

OS・・・・・Fedora 37 x86_64
WM・・・・・i3wm
プリンタ・・・Canon TS8330

# 準備

まず，プリンタと自分のPCを同じネットワークに接続します．

ルーターが同じであればプリンタが有線でPCが無線（あるいは逆）でも大丈夫です．

# ドライバを落とす

`プリンタの型番 driver`でネットで検索します．canon様は素晴らしいことにLinux版を提供しているので，Debian/Ubuntu系のディストリビューションなら`.deb`，RedHat/OpenSUSE系のディストリビューションなら`.rpm`をダウンロードします．今回はFedoraなので`.rpm`をダウンロードします．

Arch Linux系の場合は頑張ってパッケージを変換（展開）してください．

# ドライバをインストールする

ダウンロードしたtarballを展開すると．中に`install.sh`が入っていると思います．これを実行します．

```shell:Terminal
$ tar xvf cnijfilter2-5.90-1-rpm.tar.gz
$ cd cnijfilter2-5.90-1-rpm/
$ ls
documents install.sh packages resources
$ sudo ./install.sh
```
# プリンタを登録する

上記の操作をしたところ，「`lpadmin`で手動で登録してね」的なことを言われたので登録します．

## プリンタのIPアドレスを調べる

これはプリンタによって異なるので自分で調べてください．

TS8330の場合は以下のとおりです．

1. ホーム画面の左下のいかにもWi-Fiに関係してそうなボタンを押します．
1. メニューの上の「Wi-Fi」をタップします．
1. 右下のあたりのいかにもスクロールできそうなボタンで下へスクロールします．
1. 「IPv4アドレス」なるものがあると思います．
1. それをメモしておきましょう．

自分の場合は`192.168.0.58`でした．

## プリンタを追加する

自分は以下のサイトを参考にしました．

[lpadmin コマンド - IBM Documentation](https://www.ibm.com/docs/ja/aix/7.2?topic=l-lpadmin-command)
[lpadmin を使用してプリンタを設定する方法 - Oracle® Solaris 11.2 での印刷の構成と管理](https://docs.oracle.com/cd/E56342_01/html/E53846/gllia.html)

```shell:Terminal
$ sudo systemctl enable --now cups.service
$ lpadmin -p TS8330 -h 192.168.0.58
```

プリンタの名前やIPアドレスは良い感じに置き換えてください．自分はこれでできました．

# おまけ

この記事をざっと書き終わった辺りでGUIの設定ツールを発見してしまった
[Unity C#] 連続する乱数 Noise 関数について

# はじめに
この記事は [法政大学情報科学部 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/cis_hosei) の 24 日目です。
こんにちは。HirokiLucky です。
今回は連続する関数 Noise について話して行きます。

# 作りたいもの
今回は、上から降ってくるボールをキャッチするよくあるゲームを作りたいと思います。
しかし、ボールを生成する際に Random クラスの Random.Next() や Random.Range() を使用すると、場合によっては両端に生成されてしまい連続で取ることが不可能になってしまうという問題があると思います。（下画像）
ここで、[Unity.Mathematics.noise](https://docs.unity3d.com/Packages/com.unity.mathematics@1.0/api/Unity.Mathematics.noise.html#Unity_Mathematics_noise_snoise_Unity_Mathematics_float2_) の関数を使うことで [osu!catch](https://osu.ppy.sh/wiki/ja/Game_mode/osu%21catch) のような滑らかなにボールを生成することができます。（上画像）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2343661/9f46a97e-9155-6158-7269-e5f9299beef9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2343661/ad34e61c-d89e-b710-fb75-902ca8d7cb38.png)



# Noise 関数
[Unity.Mathematics.noise](https://docs.unity3d.com/Packages/com.unity.mathematics@1.0/api/Unity.Mathematics.noise.html#Unity_Mathematics_noise_snoise_Unity_Mathematics_float2_)　には cnoise(), pnoise() など様々な関数がありますが、今回はその中でも比較的高性能(?)なシンプレックスノイズと言われる snoise 関数を扱います。

### 書き方
```C#
float noise = Unity.Mathematics.noise.snoise(new float2(rand, time));
```
[マニュアル](https://docs.unity3d.com/Packages/com.unity.mathematics@1.0/api/Unity.Mathematics.noise.html#Unity_Mathematics_noise_snoise_Unity_Mathematics_float2_) にも記載がある通り、snoise 関数は float2(), float3(), float4() を引数で取ることができます。float2() では、float2 内の第一引数では、シード値、第二引数には時間を入れます。
また、返り値として -1 ~ 1 の範囲で返されます。

第一引数を、固定値(例: 1, 100, 0.5f ...) にすると、毎回同じ生成の仕方をします。
この記事では毎回ランダムに動いて欲しいので Randam.Range() で乱数を使いますが様々な方法を試してみてください。

第ニ引数は、下記のような Update() などで時間を加算していきます。
また、掛け算することで動きを早めたり遅くしたりできます。（自分の環境では 0.3 が最適）
```c
void Update()
{
    time += Time.deltaTime * timeSpeed;
}
```
# 実装
コードのほうは以下のようになっています。
降ってくるボールだけ用意してください。

```C#
    [SerializeField] private GameObject ball;
    public float timeSpeed = 0.3f;
    private float time = 0;
    void Start()
    {
        StartCoroutine("Create");
    }

    void Update()
    {
        time += Time.deltaTime * timeSpeed;
    }

    IEnumerator Create()
    {
        float rand = Random.Range(-1000, 1000);
        while (true)
        { 
            float noise = Unity.Mathematics.noise.snoise(new float2(rand, time));
            Instantiate(ball, new Vector3(noise * 7, 7, 0), Quaternion.identity);
            yield return new WaitForSeconds(0.3f);
        }
    }
```
Start() で Create() コルーチンを呼び、一定間隔でボールを生成しています。
Update() では snoise の第ニ引数に入れるために時間計測しています。

# まとめ
連続する乱数について説明しました。
滑らかに動かしたいときなどには、便利な関数だと思います。
管理工学研究所

管理工学研究所

https://www.kthree.co.jp/company/company01_gaiyo.html

安全分析ソフトの代理店をされていた。

STATURE 

https://solution.kke.co.jp/sphera/lp_fmea/

いくつかの標準化委員会でご一緒したことがあります。　

熊本市に拠点があるのも特徴的。　

Qiita で検索しても、表題に文字列はみあたらない。　

悲しむ。
TypeScript「?」について

# はじめに

TypeScript のオブジェクトにプロパティを任意に設定することができるオプショナルオプション（Optional Property）機能が備わっています。この機能は、プロパティの末尾に「?」を付けることでオブジェクトのプロパティを任意に設定できます。ここで言う「任意に設定」とは、対象のプロパティを値を設定する、設定しないを意味しています。

```
type Person = {
    name: string,
    age: number,
    address?: string
}

const member: Person = {
    name: "Member User", // 必須
    age: 10              // 必須
    address: 'address'   // 任意
}
```

## 環境

| 項目               | バージョン         |
| ------------------ | ------------------ |
| OS                 | Ubuntu 18.04.5 LTS |
| Visual Studio Code | 1.57.1             |
Wacom 

Wacomのペンタブ使ってました。

# 7
macOS CatalinaでWacomペンタブが動かない場合の対処法
https://qiita.com/yu310fu/items/de81a79ab62f491aadf8


# 4

Ubuntu 16.04 LTSでWacom Intuos Comicを使えるようにする方法
https://qiita.com/SUZUKI_Masaya/items/ae92344ab7ef5186d44b

# 2

Ubuntu 20.04 LTSでWacomペンタブのキー設定
https://qiita.com/WhiteGrouse/items/033b1a43f45236ed3796

ワコム Wacom Intuos BT S + Ubuntu 18.04 で手こずった２
https://qiita.com/matsuo7005/items/38be98d13c6a4ea2e87a


# 1
Wacomのペンタブをlinuxで使う方法
https://qiita.com/gpi-yama/items/7baf69c5fdc4ba4dff66

【 #IntuosPro #Intuos etc】macOSへのWacom製ペンタブの導入のまとめ(2020/07/23更新)
https://qiita.com/Soluna_Eureka/items/79879d1c68805bde9742

UbuntuでWacomのペンタブの左側しか使えないときの解決法
https://qiita.com/WhiteGrouse/items/713bdd5574624a8903f5

Wacom Cintiq ProをMacで使うと「ペン先の位置調整」が表示されない
https://qiita.com/ktmmilk/items/4e980852e8a4788cf8ff
オリベッティ

Qiitaでオリベッティで検索すると自分の記事に出会った。　

なぜ経済学徒を辞め、計算機屋になったか（経済学部入学前・入学後・卒業後対応） 転職(1)
https://qiita.com/kaizen_nagoya/items/06335a1d24c099733f64


<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.

経済計画と構造的諸改革―イタリアの場合(岩波新書) 尾上 久雄 1968
https://bookmeter.com/books/20604265

>普段は産業としてはなじみの薄かもしれないイタリアで、エディソン、フィアット、オリベッティなど具体的な企業名が入った話が記録されている。 イタリアと仕事をするときに参考になる。

今は、NTTデータグループの会社になっているらしい。

NTTデータ ルウィーブ株式会社

https://www.nttdata-luweave.com/about-luweave/history/


＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.


# 文書履歴(document history)
ver. 0.01 初稿 　20221230
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.