OmniAICreator/Qiita-1.07M huggingface dataset:
日本語系Wordleで迷った時の為の正規表現ツールを作る

# 短い記事だけどTL;DR
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82888/5ef44abe-08e8-a080-927c-36de072e7de6.png" width="450px">

 - https://kjranyone.github.io/wordle-ja-cheat/
 - https://github.com/kjranyone/wordle-ja-cheat

# 日本語系Wordle亜種の難しさ
 - [Gyakubenile](https://pitto.exout.net/QuizInvisible/Gyakubenile/play.php)
 - [WORDLE ja](https://aseruneko.github.io/WORDLEja/)

日本語系Wordleは「○いさつ」まで分かっても「あいさつ／けいさつ／ていさつ／かいさつ」等無数にあり、それより少ない情報で推測するとなおのこと語彙を考えるのが困難です。
悩んで時間を無駄にした挙げ句「日本語　4文字　単語」と検索して時間を潰すのも無駄なので、最終手段としてのチートツールを書いてみました。

 - この文字が含まれる単語って何がある？を素早く知りたい
 - 出来る限り多くの語彙を得たい
 - 亜種は文字数が不定なので4~7文字くらいでざっくり汎用的に使えるツールにしたい
 - 正規表現で柔軟に引きたい

※言語処理的なテクニックはありません

# 日本語リストをどこから取ってくるか
 - [データベース｜松下言語学習ラボ](http://www17408ui.sakura.ne.jp/tatsum/database.html)から、重要度順語彙データベース (Top 60894)をダウンロードします。(2022年2月2日)
   - 本データは規約として明記されていないものの、元データである「[現代日本語書き言葉均衡コーパス（BCCWJ）](https://ccd.ninjal.ac.jp/bccwj/bcc-chu.html)」は研究・教育目的としての利用を許可しているので使い方によっては微妙。
     - `本サイトは日本語語彙力の強化を目的として頭に浮かばない日本語を部分的なワードから正規表現を用いてリストアップするための教育ツールです。` という体裁で公開。
   - 語彙のデータベースの体裁上「愛妻」はあっても「愛妻家」は無い、というクセがある

> この語彙リストを他の論文等に引用する場合は、松下達彦(2011)「日本語を読むための語彙データベース（VDRJ） Ver. 1.0 （研究用）」と明記し、ダウンロードのURLとダウンロード年月日を明記して下さい。

# 実装（ざっくりデータを整形してUIを組み立てる）
コードはこのへんにコミットしてます -> https://github.com/kjranyone/wordle-ja-cheat/blob/main/app/src/App.vue

まず、Vue-CLIの最新版からVuetifyのシンプルな環境を構築します。
作成されるパッケージの中に上記サイト等で手に入れたワードを次のようなjsonに整形して `assets/json/words.json` としてデータを入れます。

```
{
  "words": [
    ["私","わたくし","わたくし"],
    ["二十","二十","にじゅう"]
...
  ]
}
```

ひらがなと漢字を対応させたく、語彙データベースの漢字や一般表記の箇所もjsonに含めておきます。
Vueの場合、JSONをscriptでImportできるため、下記のように変数化しておいてメソッド内で利用できるようにします。

```
import wordsJson from '@/assets/json/words.json'
...
  methods: {
    search() {
      console.log("検索を行います。環境によっては結果が出るまで遅いかも。キーワード: " + this.searchString)
      let results = []
      let pattern = new RegExp(this.searchString, "g")
      this.wordsJson.words.forEach(word => {
        if ((parseInt(this.stringNumber) === 0 || word[2].length === parseInt(this.stringNumber)) && pattern.test(word[2])) {
          results.push({
            "word": word[0],
            "common": word[1],
            "kana": word[2]
          })
        }
      })
      this.resultMessage = "検索完了。" + this.wordsJson.words.length + "単語中" + results.length + "単語がマッチしました。";
      console.log(this.resultMessage);
      this.results = results;
    }
  }
```

JSONのデータは元データが語彙の重要度順に並んでいるため、マッチした文字列の中で上から順に当てていけば速く解ける、という想定。

## 結果
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82888/ccae932b-ab4d-123a-94f7-442c5c06fed1.png" width="400px">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82888/6799b0a0-d963-d57f-bb28-8ed727110e0e.png" width="400px">

1文字も確定しないヤバめの譜面でも解答に辿り着ける。

## Vuetify+GitHub Pagesを使うメリット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82888/4126ac0e-ea01-4c48-7a11-7b05d185ada6.png)

 - 辞書データのJSONをバンドルされたjsに含めてgzipで配信できるのでフットプリントが軽い（とはいえ500kB近くになる）
 - レイアウトからInputのイベントリスナまで行数少なく意図した動きをするフロントエンドをサクっと書ける
 - VueでSPAを作成→GitHub ActionsでGitHub PagesまでのCDを自動化　の流れは初めて触ってみたのですが数分で出来てしまうので1個スケルトンとしてソースコードを持っておくと何かと役立つかもしれない。
EC2(apache)でhttpsのウェブページを表示するシンプルな方法


###前提
EC2作成済(Amazon Linux2)
apacheインストール済
httpd.confやssl.conf(あるなら)いじっていない
ドメインはEC2のDNSを使うのでVPCのDNS ホスト名,
DNS 解決を有効化している

###①認証局系の設定
```
- 認証局の公開鍵と秘密鍵を作成
openssl genrsa -out ca_private_pem.key 2048
openssl rsa -in ca_private_pem.key -pubout -out ca_public_pem.key
- 認証局のサーバ証明書
openssl req -new -x509 -days 365 -key ca_private_pem.key -out ca_server_pem.crt
```
```txt:ca_server_pem.crt作成時の設定
  Country Name             : JP
  State or Province Name   : Tokyo
  Organization Name        : sample
  Common Name              : ec2-XXXXXXXX.ap-northeast-1.compute.amazonaws.com
```
###②webサーバ用の設定
```
- webサーバ用の公開鍵と秘密鍵作成
openssl genrsa -out web_private_pem.key 2048
openssl rsa -in web_private_pem.key -pubout -out web_public_pem.key
- CSR
openssl req -new -key web_private_pem.key -out web_server_pem.csr
```

```txt:web_server_pem.csr作成時の設定
  Country Name             : JP
  State or Province Name   : Tokyo
  Organization Name        : sample
  Common Name              : ec2-XXXXXXXX.ap-northeast-1.compute.amazonaws.com
```

```txt:v3.ext
authorityKeyIdentifier=keyid, issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = ec2-XXXXXXXX.ap-northeast-1.compute.amazonaws.com
```
### ③webサーバ用の証明書発行
```
openssl x509 -req -sha256 -extfile v3.ext -days 365 -CA ca_server_pem.crt -CAkey ca_private_pem.key -CAcreateserial -in web_server_pem.csr -out web_server_pem.crt
```


### ④apache関連の設定ファイル
 
- ssl.confを利用するために必要なモジュールのインストール

```txt:インストール後ssl.confが使えるようになる
yum install mod_ssl
```
```txt:etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

↓変更

SSLCertificateFile /home/ec2-user/web_server_pem.crt

SSLCertificateKeyFile /home/ec2-user/web_private_pem.key

```

あとはapacheを再起動するとこんな感じでいけます
①自己証明書でhttps接続した際あるある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/b5360268-f7a6-5c0c-5dc9-e5b6bd03bbaa.png)
②webページを作ってないのでデフォルトのページが表示されています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/b3f3c742-52d7-be50-4914-22146e1b5782.png)



参考:https://9cubed.info/article/cipher3
QuestPassThrough/ パススルーのサンプルを動かす。

# 環境
OS : windows10 pro
Unity 2020.3.27f1 LTS
OculusIntegration v37

# 注意点
adb shell setprop debug.oculus.experimentalEnabled 1
を、毎回やる必要がある。

# QUESTの動画を撮る
Developer hubでできる。
保存場所：C:\Users\xxxx\AppData\Roaming\odh\captures

# 手順
１．プロジェクト作成
２．[PlayerSetting]-[XR Plugin Management ]
 Install XR Plugin Management、AndroidタブからOculusにチェックを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/cd810369-393a-ef57-5b72-39919fa5a513.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/864efacb-76da-6e3c-a38a-9418ec83fd64.png)

3．[PlayerSetting]-[Player]-[OtherSetting]
[Rendering]-[ColorSpace]をLinearに変更する
[Rendering]-[Graphcis APIs]からVulkanを削除する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/8b80d34b-ffac-6c57-7040-caa5b1edc21d.png)

[Identification]-[Minimum API Level]をAndroid6.0以降にする
[Configuration]-[ScriptingBackend]-[IL2CPP]に変更する
[TargetArchitectures]をARM64のみにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/28be335e-0cf9-f177-5f3a-3de7c3d89ed7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/a88b052d-ba62-d7d2-9fc4-078a0975b15a.png)

この設定をして、switch platformする

4．Oculus Integrationをimportする（重いです）
AvatorとlipSyncはチェック外すと軽くなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/279bfe27-12b7-ad07-3e5b-352b97d016d5.png)

このあと、PluginUpgradeなどのダイアログがでる。全部YES更新する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/170ca494-6581-2474-3a5f-09ff974b190b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/3fd70b09-d931-8ae4-ba21-8482111eccb2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/31356228-112f-a7ca-9283-a07133617cde.png)
Unityを再起動をする。

5. サンプルシーンを開く
Assets/Oculus/SampleFramework/Usage/AugmentedObjectsを開く
OVRCameraRigを選択して、OVRManagerでQuest Features > Generalの"Passthrough Capability Enabled"をオンにする
<img width=40% alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/77005531-b29e-792a-35e8-15a4f4b9c045.png">
さらにExperimentalの"Experimental Feature Enabled"をオンにして、“Spatial Anchors Support"をEnabledにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/fe236381-ac3c-4699-fbe8-66c4d355bd48.png)

６．QUESTを接続、adbで次のコマンドを打つ。
adb shell setprop debug.oculus.experimentalEnabled 1

ご参考）
https://framesynthesis.jp/tech/unity/oculusquest/
Slackを爆速で使いこなす

<h1>はじめに</h1>
社内にも結構共有している内容で、かなり役に立っているのでメモ。

<h2>設定</h2>
チャンネルやDMが増えすぎて煩雑・・・。という声をよく聞きます。
そんなあなたにおすすめの設定が以下です。

環境設定 > サイドバー > 一番下の「表示する...」を
すべての会話、から別のものに変えましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518744/663cd4dd-56a8-58b9-0b77-b0cc542b5a99.png)


これをすると、未読のチャンネル・DM・スレッド以外、何も強調されないシンプルな画面になります。

<h2>自分から連絡を行いたいとき</h2>
上の設定のままだとチャンネルの一覧やDMにアクセスできず、送信が容易にできませんので、下記のショートカットキーを覚えましょう。

Ctrl + K
これを押すと、チャンネル名の検索窓が開きます。
Ctrl + Kを押して、用事のあるチャンネル名の一部を入力すると、一瞬でアクセス可能です。
（また、未読のチャンネルやDMがある場合、Ctrl + Kで一番上にそれが選択されるので、高速でアクセス可能です。）

Ctrl + Shift + K
これを押すと、DMのメンバー設定窓が開きます。
用事のあるメンバーを入力して、DMの作成を行うことができます。

特に入力をしなければ、直近で連絡のあったDMの一覧が表示されるので、それを参照してアクセスしましょう。

<h2>まとめ</h2>
私はブラウザで必ず一番左にこのSlackを起動しているので、
ブラウザで何かを見ている際は、Ctrl + 1を押すことですぐにSlackを確認できるようにしています。
Ctrl + 1, Ctrl + K で一瞬で未読のトークにアクセスし、
稲妻のようなコミュニケーションを行っていきましょう。

それでは。
IPFSのゲートウェイについて理解する

## IPFSとは

IPFSとは分散型のファイルストレージです。

一般的なファイルストレージでは、URLではデータの保存場所を指定しているのに対して、IPFSではContent Addressingというデータのハッシュ値でデータを指定する仕組みが使われています。この仕組みによって、取得できるデータは改ざんされていないデータということが検証可能になっています。

この記事は主に、IPFSのゲートウェイについて理解することを目的としています。[IPFSの公式ドキュメント](https://docs.ipfs.io/concepts/ipfs-gateway/#gateway-providers)をもとに記載しているので、こちらのドキュメントも併せてご覧いただければと思います。

## IPFSのゲートウェイとは何か

ゲートウェイの役割を理解するために、まずはIPFSのデータをProtocol Labが提供するゲートウェイを使って取得してみましょう！

https://ipfs.io/ipfs/QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx

上記のURLにアクセスすると

```
hello worlds
```

というデータが返ってくると思います。

上記のURLはほとんどのブラウザでアクセスできると思います。

それでは次に、ゲートウェイを使用せずに、IPFSのプロトコルでデータを取得してみましょう！

[ipfs://QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx](ipfs://QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx)

もし[Brave](https://brave.com/)や[Opera](https://www.opera.com/ja)のようなIPFSのプロトコルに対応しているブラウザを利用している場合はデータを取得できると思いますが、Google ChromeやSafariなどのブラウザを使用している場合はデータを取得できないと思います。

https://docs.ipfs.io/concepts/ipfs-gateway/#when-not-to-use-a-gateway

ゲートウェイを利用することで、ロケーション形式のHTTP/HTTPSでデータを取得できるようになる、というメリットがありますが、ゲートウェイがMiddle Manとして仲介する構造になるので、単一障害点となりデータを取得できなくなるリスクや、不正のリスクがあると考えています。

## NFTに設定するときはどちらがおすすめ？

出品したいマーケットプレイスや利用するサービスがipfsの形式に対応している場合は、ipfs形式（ipfs://）でNFTのToken URIや、画像や動画等のデータを指定した方がいいと考えています。

OpenSeaは[こちらのドキュメント](https://docs.opensea.io/docs/metadata-standards)に記載されてるようにIPFS形式のデータに対応しています。

また、ゲートウェイも使わざるを得ない場合も、Procol Labが提供している```https://ipfs.io/ipfs/[CID]``` には、[IPFSの公式ドキュメントにも下記のような記載](https://docs.ipfs.io/concepts/ipfs-gateway/#can-websites-rely-on-the-ipfs-io-gateway-for-hosting)があり、サービスで利用することを想定したゲートウェイではないようです。

>**Can websites rely on the ipfs.io gateway for hosting?** 
No. Websites should not rely on the ipfs.io gateway for hosting of any kind. The ipfs.io gateway is a community resource run by Protocol Labs to help developers build on IPFS. Users of the ipfs.io gateway must use resources sparingly. Protocol Labs will throttle or ban users who overuse or misuse community resources, including relying on the ipfs.io gateway for website hosting or violating the Community Code of Conduct.

ですので、ゲートウェイを使用せざるを得ない場合は、[Pinata](https://www.pinata.cloud/)や、[NFT Storage](https://nft.storage/)などの、NFTのストレージのためにゲートウェイを提供しているサービスから自分が信頼できると思ったサービスを利用するか、自分で管理することも選択肢に入ってくると思います。

## 最後に

IPFSは全てのブラウザやアプリがIPFSをネイティブサポートする未来を目指しているので、IPFSを利用する場合は、その未来がくることを想定して、IPFS形式でデータを利用するのがいいのかなと個人的には考えています。

このあたりは人によって見解が違うと思うので、ご意見あればコメントいただければと思います。

それでは、お読みいただきありがとうございました！
Jupyter Notebookが動かない？

#はじめに
Jupyter Notebookが動かなかった。
色々試した結果、動くようになったのでそれについての備忘録。

#環境
anaconda
python 3.6.13

#Jupyter Notebookが動かなくなった流れ
1、python 3.6.13の仮想環境を作る。
![JN1_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423332/e7af93ad-6193-a3be-1059-0b7d12d6e4cf.jpeg)
2、ANACONDA NAVIGATORのHome画面からJupyter Notebookをインストールする。
![JN2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423332/25944121-cde1-6396-d840-183fc37add4c.png)
3、Jupyter Notebookからセルを実行すると以下の画面から動かない。
![JN3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423332/623790b0-9bd6-74ec-4f67-933f8ca461cc.png)
In[*]でセルの実行結果が確認できない。

#試したこと
https://ja.stackoverflow.com/questions/64014/python%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%8C%E5%AE%9F%E8%A1%8C%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%9B%E3%82%93

https://codeaid.jp/win-anaconda/

これでも動かなかった。

#対処法
Jupyter Notebookのバージョンを下げることで解決した。

###Jupyter Notebookのバージョンを下げる方法

1、ANACONDA NAVIGATORのHome画面からJupyter Notebookの左上の設定をクリックし、install specific versionを選択する。
2、バージョンが選択できるので現行のバージョンから下げる。（自分は5.4.0で動作しました）
![スクリーンショット (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423332/36cb4d05-b81c-d35e-d1af-b2ba1fe70808.png)

#終わりに

間違いがあればコメントでこっそりと教えてください。
この記事が誰かのお役に立てれば幸いです。
SPIRE v1.2.0変更点調査

## はじめに

SPIRE [v1.2.0](https://github.com/spiffe/spire/releases/tag/v1.2.0)の変更内容を紹介します。

> :memo: がついた文章は筆者の補足です。

## Added

-   SPIRE serverはTTLを指定してagentのSVIDが作成できるようになりました ([#2667](https://github.com/spiffe/spire/pull/2667))
    -   :memo: agentのSVIDは今までserver設定の `default_svid_ttl` の値が使われていました
-   固定のadmin用SPIFFE IDのセットがSPIRE serverに設定できるようになりました ([#2677](https://github.com/spiffe/spire/pull/2677))
    -   :memo: 事前にadminのIDリストを設定しておくと、該当IDを持つSVIDにはadmin権限が付与されます


## Changed

-   設定ミスを防ぐため、アップストリームの署名されたCAチェーンが検証されるようになりました ([#2644](https://github.com/spiffe/spire/pull/2644))
    -   :memo: これにより、中間チェーンが返されなかったり、適切ではない署名が使われているなど、不正なチェーンが含まれていることを事前に検出できます
-   SVIDの署名ログにより多くのコンテキストが含まれるようになりました ([#2678](https://github.com/spiffe/spire/pull/2678))
    -   :memo: SVIDの署名イベントのログにはログの発信元の情報が足りないため、それらの情報が追加されました
-   非推奨になっていたagentの鍵ファイル(`svid.key`)がagentにより能動的に削除されなくなりました ([#2671](https://github.com/spiffe/spire/pull/2671))
-   agentのpath template実行時に、キー不足で失敗した時のエラーを改善しました ([#2683](https://github.com/spiffe/spire/pull/2683))
-   SPIREがSPIRE Plugin SDKで公開されているSVIDStore V1インターフェースを利用するようになりました ([#2688](https://github.com/spiffe/spire/pull/2688))


## Deprecated

-   `spire.api.types.SPIFFEID` メッセージにおいて、先頭がスラッシュではないパスのサポートが非推奨になりました ([#2686](https://github.com/spiffe/spire/pull/2686), [#2692](https://github.com/spiffe/spire/pull/2692))
-   SPIRE Plugin SDKを利用するため、SPIREリポジトリのSVIDStore V1インターフェース名が `svidstore.V1Unofficial` に変更され、非推奨になりました ([#2688](https://github.com/spiffe/spire/pull/2688))


## Removed

-   非推奨だった `domain` 設定がSPIRE OIDC Discovery Providerから削除されました ([#2672](https://github.com/spiffe/spire/pull/2672))
-   非推奨だった `allow_unsafe_ids` 設定がSPIRE Serverから削除されました ([#2685](https://github.com/spiffe/spire/pull/2685))
【Rails】CSVダウンロード機能を実装

## Controller
- `respond_to`を使って、`hogehoge.com/users`へのリクエストに対してはHTMLを返し、`hogehoge.com/users.csv`へのリクエストに対してはCSVを返すようにする
- `send_data`、`render_to_string`を使ってCSVを返す処理を作成

```rb:app/controllers/users_controller.rb
def index
  @users = User.all

  respond_to do |format|
    format.html
    format.csv do
      send_data render_to_string, filename: 'user-list.csv', type: :csv
    end
  end
end
```

## View
- `hogehoge.com/users.csv`へのリンクを作成

```erb:app/views/users/index.html.erb
<%= link_to 'CSVダウンロード' users_path(format: :csv) %>
```

## CSV
- `CSV.generate`で、カンマ区切りの文字列を生成

```ruby:app/views/users/index.csv.ruby
require 'csv' # ruby/csvのgemが入っていればこの記述は不要
CSV.generate do |csv|
  csv << %w(id 名前 年齢)
  @users.each do |user|
    csv << [user.id, user.name, user.age]
  end
end
```

## 参考
https://opiyotan.hatenablog.com/entry/csv_download
Lightsailサーバのタイムゾーンを変更する

Lightsailで構築したサーバ上にExmentをインストールして使っています。
とあることからサーバタイムゾーンが気になってので調べました。

Linuxでサーバ時刻を調べるには一般的に以下のコマンドを使います。

```
$ date
Wed 02 Feb 2022 06:02:43 AM UTC
```

Lightsailはデフォルトでは標準時設定になっているので、タイムゾーンを変更します。

```
$ sudo timedatectl set-timezone Asia/Tokyo
$ date
Wed 02 Feb 2022 03:04:47 PM JST
```

Lightsailでtimedatectlを使おうと思うと管理が権限が必要なので、sudoは忘れずに。


# まとめ
タイムゾーンの設定は忘れやすい設定の一つですね。気をつける必要があります。

#　参考

https://qiita.com/s8ta/items/696fc68b27b91128251a
【Vue】HTMLからVueへ。クリックイベントのみを渡したい

# はじめに
Vue.jsにおいて、親コンポーネントから子コンポーネントへイベント渡す。
はたまた、その逆（子→親）であったりは公式のリファレンスなり確認すれば実装できます。

**が、しかし、**

特殊ケースかもしれないが、
```テンプレートエンジンや、html → Vue```へのイベント渡しが調べても分からなかったので、自分で実装してみました。

半ば強引かもしれないので、もっとスマートな方法があれば教えて頂きたいです。

# なぜ、こんな実装をすることになったのか状況説明
忙しい人はここは飛ばしてください。

私の環境では、

- FastAPI
- Vue3
- テンプレートエンジンにjinja
- 一部jQuery

を使用して開発していました。

それまでは、問題なく開発していたのですが、modalをVueテンプレートに移動したときにそれは起きました。

htmlファイルに記載していたmodalではjQueryが動いていたのですが、Vueへ移動させると全く動かない。
ではなく、**たまにしか動かない**というオカルト的な状況に。

なんらかの原因で、modal開閉用のクリックイベント発生時にデータ属性の判定ミスがある所までは突き止めました。
が、その後はなす術なく、html側にmodalコードを記載してなんとか、Vue側へイベントを発生させれる様な方法を検討する事にしました。

# クリックイベントのみVueへ渡す

1. htmlのクリックボタンが押される
2. クリックイベントが発火して、擬似ボタンのクリックイベントが走る
3. Vueコンポーネント内の擬似的に設置したボタンのクリックイベントが走る

```sample.html
<div class="app">
  <child-component
    :to-child="子コンポーネントへ渡すデータ"
  >
  </child-component>
</div>

<div class="modal">
  <p>モーダルのテキストテキスト</p>
  <a type="button" id="loginBtn">ログイン</a> <!-- ここのイベントをVue側へ伝播させたい -->
</div>
```

```sample.js
(function () {
  $("#loginBtn").on("click", function() {
    $("#loginPresdoBtn").click(); // Vueコンポーネントにある擬似ボタンをクリックさせる
  });
}());
```

```ChildComponent.vue
<script setup>
  function login() {
    console.log("いつかきっと返しに来い　立派な海賊になってな")
  }
</script>

<template>
  <!-- 伝播されるクリックイベントを受けてクリックイベントを起こす擬似ボタン -->
  <input id="loginPresdoBtn" type="hidden" @click="login">
</template>
```
CSSのbackdrop-filterを使ってグレーアウトした背景をくり抜く

##はじめに
あなたは下画像のようなviewを作ってくれと言われたことはありますか？私はあります。
<img width='400' alt='スクリーンショット 2022-02-02 17.50.13.png' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1576629/27b1573d-ef71-6078-b341-b5fdd082a3fd.png'>
特定の部分を目立たせるために、その他全体をグレーアウトした背景を実装したかったのですが、なかなか出来ませんでした

めげずに色々やってはみたのですが(clip-pathや背景を細かく切って繋げる、背景の上に要素を乗せるなど)、どれもピンと来ず再現できているとは言い難い出来で、もうこんなview作るのは無理ゲーだと考えた私は先輩エンジニアに相談しました。


そこで先輩に言われたアドバイスが今回の実装方法です。

「<font color="Red">backdrop-filter: brightness</font>を使ったらいいんじゃない？」

##実装方法
上記のbackdrop-filter: brightnesを使うことでグレーアウトした背景の一部をくり抜いているように見せることができました。

以下が具体的なコードです。

```scss
.full-gray-overlay {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: #00000080;
  z-index: 5;
}

.highlight-area {
  position: absolute;
  border-radius: 3px;
  overflow: hidden;
  backdrop-filter: brightness(250%); // ポイント
  height: 296px;
  width: 195px;
  top: 171px;
  left: 15px;
  z-index: 5;
}
```
上記のコードが何をしているかというと、highlight-areaをグレーアウトした背景に重ね、そこに光を当てるイメージで背景のくり抜きを再現しています。

つまり、実際に背景をくり抜いているわけではなく、<font color="Red">グレーアウトに要素(highlight-area)を重ね、その明るさを上げることでまるでその部分の背景がないかのように見せている</font>ということです。
backdrop-filter: brightnessの値を増やせば明るさをより強くすることもできます。

backdrop-filterは、要素の背後の領域にぼかしや色変化のようなグラフィック効果を適用することが可能なCSSです。今回は、brightness関数を使うことで背後領域の明るさを調節しています。

注意点は全画面の背景が少しも光を通さないと、いくら明るくしたところで背景のくり抜きは再現できないことです。
光を通さないものにいくら光を当てても明るくはならないので。

##終わりに
一部がくり抜かれた背景を再現するために、要素を重ねるという今回の実装方法はなかなか面白いものだったと感じました。
発想の転換が必要だったというか、先輩からアドバイスを受けた時には「ほーっなるほどその発想は出ないわ」って素直に思いました。フロントサイドにしろ、サーバーサイドにしろ詰まった時は考える視点を変えてみることが重要だと感じました。
ダークモード実装について設計してみた

## 経緯・目的
自分の務める会社のウェブサイトにて、OSに寄るダークモード設定の切り替えではなく自社サービスの設定画面もしくは提携先APIレスポンスのフラグによってダークモード設定する案件がありました。

なかなかダークモードのCSS設計について記載のブログ等が少なかったので記録と共有をします。

※よってこの話にOSのテーマを見るような処理の話はでてきません。

## 前準備
自社のサイトはすでに運用されている、かつおおよその汎用的カラー以外に使用している色の把握ができていない問題がありました。
（突発的なキャンペーンのカラーなど管理が煩雑になりがちですよね）
問題点を洗い出す意味も込めて準備段階で行った作業は以下の点です。

 - ① 現在使用されている色の洗い出し
 - ② 共通に使われている汎用的な色の洗い出し（ここで近しい色についてはまとめられないかビジュアルデザイナーとの調整も行いました）
 - ③ 現在運用されているCSSの色に `!important`がついていれば外しセレクターの詳細度で調整
 - ④ 色を変数管理するので命名のルール決め
 
上記を事前に行っておくと先の作業がスムーズかと思いました。


## ファイル構成
上記①で洗い出した色が62色あったため、ダークモード対応すると単純に2倍になる可能性を踏まえライトとダーク、別々のファイルにて管理をすることにしました。

 - color.scss
 - color-dark.scss
 - root.scss

color.scss：ライトモードの色を定義
color-dark.scss：ダークモードの色を定義
root.scss：上記2ファイルを読み込みCSS変数をとして定義

## 記述について

### 変数の命名
④での検討を踏まえ
今まではSassの変数名もバラツキがあったので、vscodeでの検索のしやすさ、サジェストのされやすさを重視しました。
`$color-`を接頭辞につけることで色の変数を探したい、ということを明確にし次に役割を記述するルールにしました。
またキャメルケースも実装者によってバラバラだったので、全て小文字のケバブケースとしました。

例）
`$color-red`： :ng: どの赤かわかりにくい
`$color-ranking-1`：:ok:ランキングの1位の色とわかりやすい（今後のABテストで青色に変更になっても変数名を変える必要はない）

### ファイルの中身

```color.scss
 $color-primary: #444;
```
```color-dark.scss
 $color-primary: #d1d1d1;
```
ライトとダークを同じ変数名にし同じ箇所に当たることを変数名から推測しやすくしました。

```root.scss
@use "./color" as *;
@use "./color-dark" as dark;

:root {
 --color-primary: #{$color-primary};

 .dark {
  --color-primary: #{dark.$color-primary};
 }
}
```
このような形であれば同じ変数名を使用しCSS変数にも色を付与することが可能でした。
ダークだけ変数名が異なるとかだと混乱を招く危険性がありました。

## 課題
ファイルまたぎをするのでvs codeの[Color Highlight](https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight)が使えずroot.scssだけでは色の推察がとても難しいということがわかりました。
何かいい拡張機能などあればぜひ教えてほしいです。
VSCodeのヒントはMarkdownで装飾できた話

VSCodeでは変数などにカーソルを合わせたときに、それにまつわるヒントを表示してくれます。

JavaScriptであればJSDoc、PHPであればPHPDocを書くことで、ヒントを開発者のわかりやすいように書き換えることが可能です。

# 結論

〇〇DocにMarkdown記法を交えることで、ヒントを装飾できたようです。

## 例

```sample.js
/**
 * @type {number} すごい美しい数字
 * 
 * ## h2
 * ### h3
 * 
 * - list1
 * - list2
 * 
 * ```js
 * var hoge = 123;
 * ```
 */
var hoge = 123;
```

## 結果

こちらVSCodeのすべての拡張機能を停止した状態で検証しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303228/75c6985e-e9de-620c-4bea-1c563151113b.png)

ちなみにデフォルトではこのように表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303228/08efd6d8-364f-84c8-f907-b8d1524e1c02.png)

# code記法について (追記)

ヒントにもcode記法が記述できます。

:::note info
この記法で記述されたものは、VSCodeの言語モードを基準に成形されます。
:::

```sample.php
/**
 * @param int $id
 * @return array
 * ` ` `
 * $result = [
 *     "id" => int,
 *     "hoge" => int,
 *     "fuga" => string,
 *     "piyo" => int[],
 * ];
 * ` ` `
 */
function getData($id) {

    $result = [
        "id" => $id,
        "hoge" => 123,
        "fuga" => "sample",
        "piyo" => [ 1, 2, 3 ],
    ];

    return $result;
}
```

言語モードがPHPのとき
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303228/f12a9408-bd92-0f8a-8122-00f427ad686e.png)


# 余談

例えばPHPの配列など何が入っているかわかりづらいものや、関数の内容などはこうやってドキュメントを残してほしいです。
ほんとマジでお願いします😭
express-generator で簡単な WebAPI を作成

こちらと同じことを、express-generator で行ってみます。
[Express で簡単な WebAPI を作成](https://qiita.com/ekzemplaro/items/1aa57e199b4fed4eb729)

ex01 というフォルダーで作業します。

プロジェクトの作成

```bash
npx express-generator
```

依存関係をインストール

```bash
npm install
```

サーバーの起動

```bash
DEBUG=ex01:* npm start
```

クライアントで　http://localhost:3000/users にアクセスして GET の API の動作を確認

```text
$ http http://localhost:3000/users
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 23
Content-Type: text/html; charset=utf-8
Date: Wed, 02 Feb 2022 00:23:08 GMT
ETag: W/"17-dz3lQFWsvaILP0XWy2YesfdbyNA"
Keep-Alive: timeout=5
X-Powered-By: Express

respond with a resource
```

app.js を改造　（2行追加）

```app.js
（省略）
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var sumRouter = require('./routes/sum');   // 追加
（省略）
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/sum', sumRouter);   // 追加
（省略）
```

routes/sum.js を作成

```js:routes/sum.js
var express = require('express')
var router = express.Router()

/* GET users listing. */
router.get('/', function(req, res, next) {
	res.send('respond from sum')
})

router.post('/', function(req, res, next) {
	var aa = 0
	var bb = 0

	if (req.body.aa) {
		aa = parseInt(req.body.aa,10)
		}

	if (req.body.bb) {
		bb = parseInt(req.body.bb,10)
		}

	var param = {}
	param["aa"] = aa
	param["bb"] = bb
	param["sum"] = aa + bb
	param["diff"] = aa - bb

	res.header('Content-Type', 'application/json; charset=utf-8')
	res.send(param)
})


module.exports = router
```

サーバーを起動して、クライアントでテスト

```text
$ http POST http://localhost:3000/sum aa=12 bb=34
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 37
Content-Type: application/json; charset=utf-8
Date: Wed, 02 Feb 2022 00:28:27 GMT
ETag: W/"25-ZP0Ow8AEz9vFH1ytAhkzjJL7RF8"
Keep-Alive: timeout=5
X-Powered-By: Express

{
    "aa": 12,
    "bb": 34,
    "diff": -22,
    "sum": 46
}
```
Python3エンジニア認定データ分析試験　合格体験記

#はじめに
2022年1月、Python3エンジニア認定データ分析試験に無事に合格できました。
私自身の背景を含めた合格までの勉強方法や、ポイントなどをお伝えできればと思います。
これから受験される方の、一助になれば嬉しいです。

#筆者の背景
・文系（数学的教養はかなり乏しいと思います）
・Pythonは実務では使用していません
・2021年10月にエンジニア認定基礎試験 合格済み

#試験の概要
Python3エンジニア認定データ分析試験は主教材である翔泳社出版の**「Pythonによるあたらしいデータ分析の教科書
」**から出題されます。
![スクリーンショット 2022-02-02 14.15.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954118/649dee49-b01d-f3d6-77d6-6ab1e214e41f.png)
この教科書の内容から試験では、以下の範囲と割合で出題されます。
![SnapCrab_NoName_2021-11-8_18-46-22_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954118/434296b8-2cc6-f8ac-483f-e379028b39b1.png)
みてお分かりの通り、４章の**「ライブラリによる分析実践」**の出題割合だけで67%を超えます。
受験勉強にあたって、「この章に注力し理解を深めなければ合格不可能…」と理解し勉強開始しました。

#勉強方法
まず最初に、勉強期間は約２週間弱で合計すると時間にして25時間ほどでした。
平日は通勤時含め約3時間、休日は2時間程を勉強にあてました。
勉強方法ですが、具体的には下記の要領で行いました。

###①社内勉強会の参加　(6h)
社内で開催された「Pythonデータ分析試験対策 数学の基礎」勉強会に参加しました。
この勉強会は、社内で既にこの試験に合格した先輩が開催してくれたもので、出題範囲の15%を占める数学の基礎部分を、過去問題をもとに基礎知識や計算の方法について学びました。
結果、本試験で「これはあの時やったあの解き方だな！」と落ち着いて問題を解くことができました。
この勉強会での学習がなければ文系の私にとって、個人で学習するのはもっと時間がかかっていたと思います。

###②主教材を１周　(7h)
**「Pythonによるあたらしいデータ分析の教科書」**を一周しました。
読み進める中で理解できない所も多々ありましたが、まずは読み切ることを目標に学習しました。

###③模擬試験を解く　(12h)
Web上に公開されている模擬試験[「Prime Study」](https://study.prime-strategy.co.jp/)を解きました。
こちらの模擬は、40問×3回分を何度でも受けることができ、うち1回目には解説も掲載されています。
またその解説はテキストでの説明だけでなく動画解説も用意されており、この動画解説がかなり分かりやすかったです。
模擬試験を用いた学習は、問いを解いてみて「なぜこの選択肢が合っているのか？間違っているのか？」を教科書を逆引きして学習することになると思いますが、動画のおかげでこの時間をかなり短縮することができました。
動画解説はしっかりと視聴することをオススメします！
また、動画を見ながら少しでも理解することができない箇所があったらその場で、教科書を用いてクリアにするようにしていました。
最終的に模擬試験の正答率が9割を超え、問題の各選択肢がなぜ合っていて、なぜ間違っているかを言える様になるまで繰り返し学習しました。

###④自作のまとめテキストを作成　(1h)
自身で教科書の内容のまとめと、模擬試験の解説で分からなかった箇所を調べた結果を抜粋した画像やテキストを、Evernoteにまとめました。
本試験前に模擬試験を１通り解くことにプラスして、この自作テキストを一読しました。

#試験結果
本試験の結果は8割弱で、無事合格することができました。
模擬試験では9割ほど正答率を取れていましたが、本試験は模擬に比べ、基礎的な内容の問いが多かったと感じました。
発展的な出題が多い模擬試験ではあえて触れないような基礎的な問いが多く、模擬と教科書の行き来だけでは拾いきれていない部分もあった様に思います。
Windows10でfastTextを使うためにやったことメモ

# はじめに
windows10でfastTextを使用するため環境を整えようとしたところ、いろいろエラーが出て、いくつかの記事をはしごしました。まとまった記事があっても良いな～と思ったので下記、一連の流れをざっくりとした記録として残します。
主に参考にしたURLに関しては★を付けています。

# 手順0. 環境
- Windows10 64bit
- Python 3.9.7
- pip 22.0.2

# 手順1. Microsoft C++ Build Toolsを手に入れる
入れ方は下記を参照。
★参照URL1：https://self-development.info/%E3%80%8Cmicrosoft-visual-c-14-0-or-greater-is-required-%E3%80%8D%E3%81%8C%E5%87%BA%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/

簡単に書くと、
①ダウンロードページにて、exeファイルをダウンロード
②ダウンロードしたexeファイルを実行
③「C++によるデスクトップ開発」（またはC++ Build Toolsなど）を選択
④ウインドウ右側「インストールの詳細」の「C++によるデスクトップ開発」に関して、
　以下3点にチェックが入っているか確認
　1. MSVC v142 - VS 2019 C++ x64/x86 ビルド(以下略)
　2. Windows 10 SDK(10.0.18362.0)
　3. Windows用 C++ CMakeツール
⑤インストールを開始。終了後に再起動
⑥cl.exeのパス設定を行なう。具体的には、
　・「スタート」メニューで「Visual Studio 2019」の「Developer Command Prompt for VS 2019」を選択
　・開いたコマンドプロンプトで「where cl」を実行（cl.exe のフルパスを取得）
　・システム環境変数のPathに、上記で取得したフルパスから「cl.exe」を除いたパスを登録
という感じです。URL先には、無事登録できたかの確認方法もありますので是非。

# 手順2. fastTextをコンパイルする
win7、win10でfastTextをインストールした記事を見つけたので有難く拝見し実行しました。
★参考URL2：https://qiita.com/yakipudding/items/e798614ca833d264abf3
具体的には下記のコマンドを実行。コマンドプロンプトを開いて、gitからcloneして、移動。

```cmd
git clone https://github.com/facebookresearch/fastText.git
cd fastText
```

ただ、次に「『make』コマンドを実行」しようとしたところ「make？そんなものは無い」と怒られる。
ということでmakeコマンドを使えるようにしよう～とは思ったものの…

fastTextのインストールに関して他の記事で「『cd』でfastTextをcloneした場所に移動してから『pip install .』を実行」という備忘録も何件か見かけていたので『pip install .』を実行。

```cmd
pip install .
```

ちなみに、手順1.Microsoft C++ Build Toolsを手に入れる ができていないと下記のようなエラーが出るはずです（私自身は本メモの手順2からやっていたので、このエラーにぶち当たり、自分の場合は手順1が必要だったんだ～と気づいた次第です）。

```cmd
Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
```

# (たしか)以上で完了！
おそらくこれで上手くいくはず。
プロキシ環境で実行する場合は、pipの使用方法にお気をつけて（ここでもつっかかり時間を使いました、エラー内容ちゃんと見ろと改めて自分に言い聞かせます）。

```cmd
set HTTP_PROXY=http://[ユーザ名]:[パスワード]@[ホスト名とかIPアドレスとか]:[ポート番号]
set HTTPS_PROXY=http://[ユーザ名]:[パスワード]@[ホスト名とかIPアドレスとか]:[ポート番号]
pip install --proxy="http://[ユーザ名]:[パスワード]@[ホスト名とかIPアドレスとか]:[ポート番号]" [パッケージ名]
```
FTPにてGOT2000に接続する方法

三菱電機製タッチパネルGOT2000シリーズへのFTP接続方法です。

マニュアルをよく読めば書いてあるのですが自分でも忘れそうなので備忘録です。
GOT1000でも設定は同じです。
GOTとはGraphic Operation Terminalというやつですね

参考マニュアル:GT Designer3 (GOT2000) 画面設計マニュアル SH-081219

![どこのご家庭にもあるやつ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/95b3a6f8-f2d4-f769-4155-9b77228e1106.png)

# GOT設定
## GOTのIPアドレスの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/2b00b068-82db-4924-dffe-5bb8f4107211.png)

## ゲートウエイ機能の有効化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e6aa6a8f-5aeb-5880-8e3c-4c5408b72d03.png)

## FTPサーバ機能の有効化
ログイン名,パスワードの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/128c70db-1085-8708-1a3d-17bb33675f0e.png)

# FTP設定

https://github.com/ffftp/ffftp/releases

FFTPの接続例です。FFTPが無難です。
## 基本
ホストの設定名は識別用なので何でも良い。
ホスト名はGOT自体のIPアドレス
ユーザー名/パスワードはGOT設定で入力した文字を入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/926696ad-b432-5068-4acb-cc460759ab99.png)

## 拡張
GOT専用のコマンドというものが存在します。
接続時にホストに送るコマンド に入力します
**gtwr** GOTのFTPサーバ機能のモードを，書き込みモードに変更します
**gtrd** GOTのFTPサーバ機能のモードを，参照モードに変更します
**gtds** GOT内のCドライブへアクセスが可能になります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/429b6384-b45d-c4e1-7a1e-4cb3df31de71.png)

GOT内のメディアにデータを書き込むには専用コマンドで書き込み可に変更する必要があります。
[コマンド]->[任意のコマンド]で[gtwr]と毎回書いてもよいですがめんどくさいので上記設定で接続時に自動で送れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/ad0713c8-5c1f-4df7-36a1-b1fe9772ba2f.png)
**gtds**でCドライブにもアクセス可能ですがプロジェクトデータが格納されているドライブなのであまりいじらない方が良いです。

# 接続
接続できましたね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/2e467626-6950-6ecb-f303-ec6ddc3c8f23.png)

## ドライブの変更
ピンク枠に A: , C: , D: などを入れるとドライブが変更可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e1140e91-8eb1-5fc6-6538-f46d247a4f34.png)

|Drive|用途|
|----| ---- |
|A|標準SDカード|
|B|USBドライブ|
|C|内蔵フラッシュメモリ(ユーザ領域)|
|E|USBドライブ|
|F|USBドライブ|
|G|USBドライブ|
|N|ネットワークドライブ|
|V|内蔵RAM(ユーザワークメモリ領域)|
機種や設定により使えるドライブは限定されます。

## バイナリ形式のファイル(*.G2□)を読み出し
G2A,G2P,G2Oなどのファイルを読み出し可能にするにはGOT内のGSレジスタをONにする必要があります。
GS400.b8をONにすることでアクセスが可能になります。
適当なボタンでONにするか、毎回ONでよいならスクリプトでONにする方法もあります。

トリガデバイス:GB40(常時ON),トリガ種別:立上り　にすると起動時のみ1回だけ動作するスクリプトを作れます。
スクリプトは下記の内容です

```C
[b:GS400.b8]=ON;
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/29dff5e0-f249-2fc0-fed0-78462bc94531.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/8e95dd14-efb1-97da-b784-b1d2aed16f09.png)
ネガティブな文ばかり生成するGPT-2で遊ぶ

#ネガティブな感情の文ばかり出力するGPT-2
　[過去の記事](https://qiita.com/shiba_inu_/items/7afaba624cc9217f33e1)で，サンプリングした文が負の感情を持つ確率を報酬としてGPT-2を強化学習しました．このモデルで遊んでみます．鬱ツイートのような文が大量に生成できます．

#文章生成
- top-k:100, length:50のサンプリングです．未知語トークンの確率を0にして，特殊トークンは省いています．

###「最近になって」の続きを生成
最近になって膝の痛みがひどくなる。病院に行っても異常がない。

最近になって急に寒くなってきたけど、寒冷差があったらやっぱりおかしくなる。

最近になって耳やのどの調子が悪くなるたびに寝込み症状を訴える。

最近になってスマホの使用頻度が上がるにつれて、バッテリーの減りがひどくなる。

###「昔は」の続きを生成
昔はもっと大きな街にたくさんの人がいたはずなのに、高層階に行かないと見えない。 

昔はよく通ったけど、ここ数年は思うように動けず。年を取るんだなと。。

昔は当たり前だったな。まさか大地震が10年でおきるとは・・・・。まだまだ余震が続いてるようで心配。。

昔は少しぽっちゃりしてたことがあってデブに近づいてる。

###「今日は笑顔で」の続きを生成
今日は笑顔で長生きしない方が良い。本当に毎日つらい。 散歩、散歩じゃ済まらないようです。

今日は笑顔でお出掛けが出来るくらいの暖かさ。しかし寒暖の差があったり寒暖差があったり、風邪ひきやすくなったりして思うように体温が上がらない。

今日は笑顔で過ごせることを期待してたのに・・・。

今日は笑顔で出かけられますように。 先日大雨災害。 今でも強い雨ですね。

今日は笑顔でいられない。 こんなに苦しいと、いつもなら思うこともできない。

###「朝」の続きを生成
朝方雪かきのニュースに驚きました。寒暖差や寒波で年を取るようで。。。 こういうときこそ慌てずに体調を整えるといいのに。。。

朝起きてみると肌がむくみだるくてめまいがひどくなって立ちくらみがするという症状が頻繁になり出し、ひどい時には寝ていたら痛みで起き上がることもままなりません。

朝は毎日雨だったもんな。 この前ほどではなかったので油断していたようだ。

朝香宗李を激しく怒鳴りつけ襲った。 しばらくして、朝鮮軍の反撃があり城内が焦土と化す。 このとき、軍の砲力が増し、城壁が決壊したり、浸水で損壊したりしたが、

朝も雨やぼやかしっぱなしだった。このところ寒暖差や寒波に逆戻り。風はじわりじわりするほど。 明日は寒波が来るとあちこちで大雪に見舞われる。

朝来郡に新野や赤井氏が入った。 和銅元年(708年)、大噴火により大隅半島は大規模な被害を被った。 山崩れも多く、集落も大きな被害を受ける。

###「ライオン」の続きを生成
ライオンも気付かない間に増えるし...。 そうなった場合、心臓が止まるだろう。心臓や二輪車に電気ショックを与え、数時間の命があると診断されても蘇生しない。

ライオン・ストリート(kingsburg) ノーザン・コワート(nymphant) ラミントン大地震(mj) 2000年、2m以上の大被害。 ビクトリア朝からヴィクトリア朝大正にかけて幾度かにわたって大

ライオンキングとか見ててイライラする。 親に遺伝するものか。じゃあお母ちゃんもやろ。 さっきまでよく寝ていても睡魔に襲われて2、3度ほど目がさめるようになった。 病院で

ライオンキングの「カシンバロー」で三十年に及ぶ世界的感染を引き起こして大打撃を受けた。 しかし、その大けがでなくとも数週間で命を落とすケースもある。 タイに蔓延したタイコバチによる人的被害

ライオンがサタンガマに強襲。 白露による嵐で屋根の破壊活動が活発化。 9月に入り、集中豪雨、相次ぐ高潮や大被害などを食い止められず、被害が甚大になる。 そして北海道や樺太

###「ライオンのオスは」の続きを生成
ライオンのオスは、森林限界を超え、高山が大雨によりすべて浸食されてしまう。 その結果この森林と地下の地表部分まで流れ込んでしまい、大規模な林決壊の被害を受けた。 死者647名。 1,700万人

ライオンのオスは一日に何匹の敵に出遭うのか。暑さに参る。 気温が40度近くまで上がったり寒波があったりと寒暖差でじわりじわりするほどに寒くなりました。

ライオンのオスは雌の3kgを超える重い腫瘍ができた場合、死んでしまう。 多くの場合、手術による治療だけではまともならなくなる。 多くはショック波を大量に出し、急激な寒波や寒波の続いた後はひどいめ

ライオンのオスは樹上でくたびれたうえ、地面に叩きついた。 出血多量。 命に別条はなかった。 全身の激しい痛みを伴う。 数日安静にしないと動かなくなる。 次第に立ち

ライオンのオスは雌に対し大きな攻撃性を発揮する。 その原因としては遺伝的に雌が攻撃的になることによるモンストロシエラと大地震などによって大打撃を受けてくる。

ライオンのオスは腹側腹壁が大動脈瘤にくもりつづき出血することが多く、ときには出血を止めることができなくなり敗血症や生命の危険にひんする。 さらにひどくなるにつれて死に至る。 

#まとめ
　少々違和感のある文もあります．もっとモデルの完成度を上げたいです．
Laravel Mixで環境に合わせて出力ファイルを変える方法

#はじめに
Laravel Mixを利用する場合に、本番環境と開発環境で出力されるJSファイルやCSSファイルを分けたいと思います。
私は本番環境では不要なコメントを削った圧縮ファイルにしたり、開発環境ではデバッグしやすいように元ファイルがわかるようにしたり、という使い分けをします。
今回はその方法を簡単にご紹介します。

#環境
環境は「[DockerでLaravel-Mix(Laravel8×Vue3)環境構築](https://qiita.com/A-Kira/items/6849c54ae6f6df884ade)」を参考に構築してみてください。
先にこちらをご確認いただくと環境や構成はイメージしやすいと思います。

#方法
## 1. webpack.min.jsを修正
本番環境では`app.min.js`、`app.min.css`として出力し、開発環境では`app.js`と`app.css`として出力されるように設定します。

```js:server/webpack.mix.js
const mix = require('laravel-mix');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel applications. By default, we are compiling the CSS
 | file for the application as well as bundling up all the JS files.
 |
 */

if (mix.inProduction()) {
    mix.js('resources/js/app.js', 'public/js/app.min.js')
        .postCss('resources/css/app.css', 'public/css/app.min.css', [
            //
        ]);
} else {
    mix.js('resources/js/app.js', 'public/js/app.js')
        .postCss('resources/css/app.css', 'public/css/app.css', [
            //
        ]).sourceMaps();
}

mix.vue();
```




## 2. Laravelビューファイル変更
`server/resources/views/app.blade.php`を作成します。
Laravelの.envで設定している環境に合わせて、読み込むファイルを変えるようにしています。

```php:server/resources/views/app.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Laravel</title>
    @if(config('app.env') === 'production')
        <link href="{{ asset('css/app.min.css') }}" rel="stylesheet"/>
        <script src="{{ asset('js/app.min.js') }}" defer="defer"></script>
    @else
        <link href="{{ asset('css/app.css') }}" rel="stylesheet"/>
        <script src="{{ asset('js/app.js') }}" defer="defer"></script>
    @endif
</head>
<body>
<div id="app">
    <test-vue></test-vue>
</div>
</body>
</html>
```

## 3. .envの設定
`.env`の`APP_ENV`で環境名を設定できます。

### 開発環境用
```.env
APP_ENV=local
```

### 本番環境用
```.env
APP_ENV=production
```

## 4. ビルドして確認
ビルドコマンドと出力されるファイルを確認しましょう。

### 開発環境の場合

#### ビルド

```sh
cd environment/development
docker-compose exec node bash -c "npm run dev"
```

#### 出力ファイル
```
public
├── css
│   └── app.css
└── js
    └── app.js
```

### 開発環境用

#### ビルド

```sh
cd environment/development
docker-compose exec node bash -c "npm run prod"
```

#### 出力ファイル
```
public
├── css
│   └── app.min.css
└── js
    ├── app.min.js
    └── app.min.js.LICENSE.txt

```
UntiyでJDKがないとき


ここにチェックいれていない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/63eb95ae-d9e6-0ac9-c47e-e3462bfd5b5e.png)

参考
https://shibuya24.info/entry/jdk_not_found
RStudio server の細かい設定を dockerfile から自動化する

再現性ある環境がいつでもどこでも再現できて大変便利な rocker/verse の docker コンテナですが、
利用者側で細かい設定をしたい部分も色々出てくると思います。

案外情報が見つかりにくかったので、健忘メモがてら書いておきます。

# RStudio 設定ファイルの場所
これはコンテナ内では場所決め打ちです。
dockerビルドのディレクトリ内に、`rstudio-prefs_mysettings.json`のような名前で保存しておき、dockerfile内でコピーリネームするようにしています。

```Dockerfile
# R4.0ごろからデフォルトで出てくるマージンが邪魔
COPY --chown=rstudio:rstudio rstudio-prefs_mysettings.json /home/rstudio/.config/rstudio/rstudio-prefs.json
RUN chmod 755 /home/rstudio/.config/rstudio/rstudio-prefs.json
```

## JSONファイルの中身
書き方を調べても良いのですが、大変なので【一度実行して環境設定】を行った後、
【保存されたjsonファイルの中身からコピペ】する方が早いかなと思います。

```/home/rstudio/.config/rstudio/rstudio-prefs.json
{
    "reuse_sessions_for_project_links": true,
    "show_margin": false,
    "posix_terminal_shell": "zsh",
    "real_time_spellchecking": false,
    "editor_theme": "Solarized Dark",
    "spelling_dictionary_language": "en_US"
}
```

# Rprofileの場所
続いて、R環境のデフォルト設定ファイルも書き換えましょう。
同じくDockerfile内からコピーリネームです。
僕はビルドディレクトリ内に `dotRprofile` として保存し、コピーリネームしています 

```Dockerfile
# Rプロファイルをコピー - RStudio起動時に実行したいRスクリプトをこのファイルに書くことが出来る
# RStudioのみ再起動した場合も読み込まれます
COPY --chown=rstudio:rstudio dotRprofile /home/rstudio/.Rprofile
```

## ~/.Rprofile の中身
こちらは通常の R スクリプトです。
僕は docker-compose 実行時に、ホスト側ボリュームをマウントしてその中にプロジェクトに関するファイル一式を保存するようにしています。
再現性確保のために、プロジェクトごとにコンテナを分けていますので、
コンテナログインと同時に、プロジェクトが開くような設定も加えます。
(この書き方で、RStudioでの実行時のみプロジェクトを開くように出来ます。コンテナ内で `R` した場合には影響を与えません)

```/home/rstudio/.Rprofile
# Rprofile
# cranミラーを国内にした方が、早くDLできて本家の負担も分散できます。
options(repos = c(CRAN = "https://ftp.yz.yamagata-u.ac.jp/pub/cran/"))

# RStudioでのRセッション開始時に自動でプロジェクトを開きます
setHook("rstudio.sessionInit", function(newSession) {
  if (newSession && is.null(rstudioapi::getActiveProject()))
    rstudioapi::openProject("~/host_volume/myproject/someproj.Rproj")
}, action = "append")

# このファイル内にRスクリプトを入れておくと実行時に起動されます。
# healthchecks.io のトリガーを仕込んでみたり
system('curl https://hc-ping.com/XXXXXXXXXXXXXXXXXXX')
```


# docker-compose で /dev/shm をホストにバインド他
Mac/Linux の方限定ですが、デフォルトだと「2GB」などしか仮想メモリが使えず、それを超えた瞬間にコンテナが落ちてしまいます。
手っ取り早いのは/dev/shmをホスト側にマウントしてしまうことです。（セキュリティ的にはベストではないので、自分たちで管理しているホストの場合のみこれを行いましょう）
Mac/Linuxどちらでもそのまま動きます。
ベストプラクティスでは無いのですが（もし不特定多数に公開するような使い方なら厳密に使うメモリ管理したほうが安全）バッドと言われる程でも無いので、その時々で必要メモリ量がバラバラなデータサイエンス系処理ではこうしておくと常に「ホストのメモリ上限」まで使えて便利だと思っています。

(Windows/Windows+WSLはこの問題は未解決のままなので無理と思われます。 https://github.com/microsoft/WSL/issues/7018 異なる方法を試してみてください。  `docker --shm-size=10gb` オプションなど)

また、awsやgcpなどの各種認証トークンはgitなどに入れず、ホスト側ディレクトリに保存して手動で管理するようにしています。

```docker-compose.yaml
version: "3"

services:
  r:
    image: myserver.local:5000/myrepo/r
    volumes:
      - /dev/shm:/dev/shm
      - ~/r/host_volume:/home/rstudio/host_volume
      # 認証トークンなどは手動で管理
      - ~/r/.token:/home/rstudio/.token
```

以上、少々とっちらかってしまいましたが、どなたかの参考になれば！
ポンコツが新人時代に頑張ったこと

## 自己紹介
エンジニア4年目
文系四大卒業

## 心掛けていたこと
1年目～から現在まで、仕事をするうえでポンコツなりに頑張っていたことです。

### 周りの人/物を研究すること
#### 誰かが作ったツールの中身を見て研究する
例えば、作業で使っている誰かが作ったツール等の中身。実は結構参考になります。
実際に作業で使用しているため、I/Oやどういう動きをしているのかがコードと照らし合わせやすいです。
私の場合はシェルやVBAを読んで少しずつ理解し、最終的には元々あるツールを改良したり、新しいツールを作ることができました。

#### 仲間の成果物を見てみる
上記に似ていますが、誰かが執筆した設計書・メール・コードをよく読んで研究することです。
特に、仕事ができると言われている人や、技術力が強い人のものをよく読みました。
他人のコードを見ると「こういう書き方があるんだ！」という新しい発見ができ、楽しいです。
設計書やメールにおいても、「相手に伝わる、見やすい」書き方が発見できます。
私の上司はメールがとても丁寧で分かりやすかったので、とても参考になりました。

#### ”より良くする”を考える
「作業の効率を良くするため、レベルを上げるため」にはどういうものが必要かを考えること。
例えば、ツールを作成する際、現状は何が問題でそれがどうなったら楽かを考える、
可読性が高く、メンテナンスしやすいコードや設計書の書き方はどういうものかを考えることは大切だと感じます。
自分で分からなければ同僚に訊いてみたら良い意見が聞けると思います。

## おわり
作業の合間に殴り書したので雑です、すみません。
正直、地頭(ポテンシャル)には自信がありません。
だからこそ、なるべく自分なりに考え、真摯に仕事をしていました。
1年目～2年目は特に上記のことを頑張っていて、そのおかげで？なのか、上司に褒められることもありました。

もうすぐ、入社5年目になり立場も変わってくるので新しい頑張り方を見つけたいです。
LTO とは

## 勉強前イメージ

なんだっけ？聞いたことあるけど忘れた
テープで保管する的なやつ？

## 調査

### LTO とは

Linear Tape-Open の略で、コンピューター用のデータ保存磁気テープ技術のことを指し
Seagate社、HP社、IBM社が共同開発を行いました。
大容量だが低コストで保管できることが特徴で、長期保存に向いています。

LTOは以下の2種類があります。
しかし、Accelisはあまり浸透せず、LTOというと基本的にはUltriumのことを指します。

- Ultrium : 大容量指向
- Accelis : 高速読み出し

LTOドライブの規格は2~3年ごとに新しいものが登場し、
LTO-1から最新のLTO-8まで存在します。
LTO-8以外は下位2世代までのデータカートリッジと互換性がありますが、LTO-8はLTO-7までしか互換性がありません。

### LTOの特徴

- 長期のデータ保存が可能

磁気テープは30年以上の期待寿命もを持ちます。
また、LTO-3からはデータの改竄や削除を防ぐ `WORM機能` がついており、上書きを防げるようになっています。

- データ転送速度が高速

圧縮時と非圧縮時では転送速度が違いますが、
SATAのSSDより高速にデータの転送ができ、
LTO-8では圧縮時最大750MB/sで転送ができます。

- 低コストで省エネルギー

HDDより保管容量が多く、テープ自体の価格も低いため低コストで保管ができます。
LTO-8では圧縮時最大30TBの記録容量が実現できます。

### ユースケース

- 政府機関

基幹システムのバックアップ等

- 病院

電子カルテや医療データの長期保存


- 法務事務所

膨大な書類の電子化保存

### LTOの注意点

- LTOドライブが必要

テープカートリッジでデータの読み書きの際は専用のLTOドライブが必要です
接続規格にはSASやUSB等があります。

- テープをまたいだ保存はできない

LTO-5以降にLTFSというPCのエクスプローラー画面でデータの確認や書き込みができる機能がついています。
ですが、基本的なLTFSではテープをまたいで書き込みができない場合があるので、事前に確認が必要です。

## 勉強後イメージ

テープとか古いイメージだったけど
2017年に最新規格とか書いてあったから開発が進んでいるのね....
クラウドにもいろいろあって上げれないけど、安全に保管したいときとかに使われそうだね。

## 参考

- [LTOとは？基本的な知識や特長をわかりやすく解説](https://www.pro.logitec.co.jp/houjin/usernavigation/hddssd/20200515/)
- [LTO 【Linear Tape-Open】](https://e-words.jp/w/LTO.html)
- [LTOの容量はどれくらい？LTOを導入する前に確認しておきたい点と併せてご紹介](https://www.pro.logitec.co.jp/about_hdd/hddssd/20200828/)
Rails 取得するレコード数の上限を指定 limit/offset

開発で調べたことをまとめました！

## 概要
ページネーションを実装するためAPI側で、必要な分のレコードを取得して返す。
フロント側からパラメータで、取得レコード数(limit)や、何ページ目(offset)を設定する。


## 使い方
```
モデル.limit(最大取得行数).offset(取得開始位置)

例) usersテーブルから1~5件目、最大5件を取得
User.limit(5)
# SELECT * FROM users LIMIT 5

例) usersテーブルから6~10件目、最大5件を取得
User.limit(5).offset(5)
# SELECT * FROM users LIMIT 5 OFFSET 5

例) limit/offsetパラメータがnilの場合、User.allと同じ
User.limit(nil).offset(nil)
# SELECT * FROM users
```

受け取るパラメータがなかった場合にエラーが出たため、&.(ぼっち演算子)を使う
→nilを返す

```
limit_params = params[:limit]&.to_i
offset_params = params[:offset]&.to_i
```

## 参考

https://railsdoc.com/page/limit

https://techacademy.jp/magazine/20567
Rのスコープに注意すべきところ


スコープ（変数検索ルール）は、関数の実行中に変数を使用する場合、呼び出し時の環境ではなく、変数が定義された環境からレイヤーごとに検索されます。

####関数linear_outputの中に子関数linearを定義します

```R:
x <- 0
y <- 10
linear_output <- function(x){
  y <- 100
  linear <- function(){
    x * 2 + y
  }
  linear()
}

linear_output(1)
```

```:実行結果
102
```
関数内で変数の値を定義されない場合、親環境までに変数の値を探します。関数linearは
xを定義されないので、関数linear_outputをもらう値「x <-1,y <- 100」により実行します。
※　グローバル部署の変数を無視されました。

####関数linear_outputと関数linearは別々に定義します

```R:
x <- 0
y <- 10
linear_output <- function(x){
  y <- 100
  linear(x)
}

linear <- function(x){
  x * 2 + y
}

linear_output(1)
```

```:実行結果
12
```
linear_outputは関数linearの親関数ではないので、linearのｙはグローバル環境に至るまだｙの値を調べました。関数linear_outputをもらう値「x <-1,　y <- 10」により実行します。
####【豆知識】
※ちなみに、推薦ではないですが、↓のような書き方があることを認識して頂くように、こちらで紹介しております。
【<-】 を【 <<-】 にすると関数内での変数操作がグローバルに保存されます


```R:
x <- 0
y <- 10
linear_output <- function(x){
  y <<- 100
  linear(x)
}

linear <- function(x){
  x * 2 + y
}

linear_output(1)
```

```:実行結果
102
```
linear_output関数内のｙはグローバル変数として残ります
PWAでGoogleMapAPIの課金問題を回避する

初回投稿です。
本記事の目的は次の項目のご紹介です。
1．地図を使ったモバイルアプリでGoogleMapAPIの課金設定を回避する方法の試行錯誤結果
2．モバイルアプリのコードをWebアプリ（PWA含む）に変換する方法と限界について
3．医療関連、特に新型コロナ関連アプリのストア公開時のハードルの高さの体験談
4．オープンデータを使ったアプリ開発時の留意点

私もGoogleMapAPIの課金設定が必須になるのは分かっていたのですが、まあiOS向けだけでも配信出来れば良いと安易に考え、最初にReact-Native＋Expoで開発を始めました。iOS向けの開発上は何の問題も発生せず、react-native-mapsを使ってOpenStreetMapのタイルを使い完成したのですが、他の記事にもあるように、AndroidではOpenStreetMapのタイル設定は可能ですが、Expo Go以外のdevelopment-clientや実機での起動が出来ず、色々調べたらGoogleMapを使っていない場合も➀地図にGooleのロゴが表示される（Expo Goで確認）➁実機等ではGoogleMapAPIの設定をしていないと起動しても何も表示されない、ということが判明。同じ悩みを持っている人たちが質問サイト等で結構多いのが分かりました。
 [参考：Qiita React-Nativeで地図を表示する(react-native-maps)](https://qiita.com/yukihigasi/items/76e3e6cdc43ea6a64044"React-Nativeで地図を表示する(react-native-maps)")

１．モバイルアプリでGoogleMapAPIの課金設定を回避する方法
結論を先に言うと、Androidでの配信が必須の場合にはReact-Native＋Expoを諦めて、leaflet＋OpenStreetMapでWebアプリを作り、これをPWA化して配信するというのが私の回避策です。
色々調べましたがreact-native-mapsを使う限り回避方法は見つかりませんでした。本モジュールのソースをGithubで確認しましたが、type="none"やprovide="default"の設定をしても地図のframeworkがGoogleMapに依存しているように見えます（間違っていたら指摘して下さい）。


```Javascript:App.js
<MapView
        provider={null}
        mapType="none"
        style={styles.map}
        region={location}
      >
        <UrlTile
          urlTemplate={urlTemplate}
          maximumZ={19}
          shouldReplaceMapContent={true}
        />
```
上のコードはAndroid用に書いたJSX内のMapviewタグの部分ですが、Expo Goで表示させるとurlTemplateで指定したOpenstreetmapのタイルが表示されますがGoogleのロゴは消えません。また実機では地図自体が表示されませんでした。
iOSの場合はproviderとmapTypeは設定しないとApple純正のMapKitが表示され、上記と同じの設定をするとOpenstreetmapのタイルが実機でも問題無く表示されました。

２．モバイルアプリのコードをWebアプリ（PWA含む）に変換する方法と限界について
今回はExpoとreact-native-mapsでほぼ開発が完了した状態でしたので、上記回避策を実現するにはExpoでコードをWeb向けのビルドをすればWebアプリに変換できると考え、やってみたのですがreact-native-mapsはWebビルドに対応していないことが分かり、ほとんど変換できませんでした。仕方なく部分的に元のソースからleaflet＋OpenStreetMapベースのコードを書き直し、最後はPWA化しました。ちなみに環境は下記の通りです。
React-Native ＋ Expo ＋ react-native-maps
react-native: @0.64.3
Expo SDK: @44.0.0
react-native-maps: @0.29.4
        ↓
leaflet: @1.6.0
leaflet-easybutton@2

３.　医療関連、特に新型コロナ関連アプリのストア公開時のハードルの高さの体験談
これは単に自分の無知が原因ですが、AppleもGoogleも新型コロナ関連や医療関連のアプリをストアで公開する際は、政府関係機関かメジャーな医療関係機関に限定されており、App storeでの審査でも簡単には通りませんね。今回は公式のワクチン接種証明等のアプリではなく、単なる病院検索アプリでだったので大丈夫だろうと考えやってみたのですが、ハードルはかなり高いことが分かりました（Google Play storeには地図問題があったので申請はしてません）。

４．オープンデータを使ったアプリ開発時の留意点
今回は厚生労働省の地方厚生局で公開されている保険医療機関コード別データと、政府CIOポータルで公開されている全国医療機関の医療提供体制の状況のデータを利用させてもらいました。前者は県別データがExcelデータ等で公開されていますが、細かいデータフォーマットまで統一されていないので（例えば電話番号表記のハイフォン有無や括弧書き）利用の際は注意が必要です。
また後者ではJSONデータで直接取得できそうですが、Webサイトから取得する際はCORS問題にひっかり、JSONPとかには対応してないようなのでこれも注意が必要です（モバイルアプリの場合はCORS問題が無いため問題ありませんでした）。自分は結局一旦自分のサーバーにJSONデータを保存してから利用するようにしました。
また各オープンデータを利用する際はライセンス等の確認が必要で、クリエイティブコモンズのライセンスがベースだと思いますが、各々微妙に違うケースもあるので利用の際は注意が必要だと思います。
 [参考：関東　保険医療機関コード別データ](https://kouseikyoku.mhlw.go.jp/kantoshinetsu/chousa/shitei.html"厚生労働省の地方厚生局で公開されている保険医療機関コード別データ")
 [　　：政府CIOポータルで公開されている全国医療機関の医療提供体制の状況のデータ](https://cio.go.jp/hosp_monitoring_c19"政府CIOポータルで公開されている全国医療機関の医療提供体制の状況のデータ")

以上OpenStreetMapを使いコロナ関連のモバイルアプリで公開する方法のご紹介でした。
参考までに今回Webで公開したアプリは下記の通りです。良かったら使ってみて下さい。

https://www.pib.co.jp/company/hosmap/index.html
python matplotlibでX軸が文字列、Y軸が数字のcsvファイルを読み、棒グラフを書く


このようなファイルを棒グラフ化したいとする。。
<pre>
US,125
NL,90
FR,89
</pre>

X軸が文字列
Y軸が数字である。

このように書く。。

<pre>
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import sys
args = sys.argv

data = pd.read_csv(args[1], header = None)

df = pd.DataFrame(data)

X = df.iloc[:, 0]
X = X.astype(str)

Y = list(df.iloc[:, 1])

print(X)
print(Y)
plt.bar(X, Y, color='b', label="Total Population")

ticks =3 
plt.xticks(np.arange(0, len(X), ticks), X[::ticks], rotation=60)
#plt.xticks(rotation=90)
plt.show()
</pre>

ポイントは、

<pre>
X = df.iloc[:, 0]
X = X.astype(str)
</pre>

↑X軸が文字列なので

X軸の数字を少し間引きしている(3行ごと）
<pre>
ticks =3 
plt.xticks(np.arange(0, len(X), ticks), X[::ticks], rotation=60)
</pre>

![qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163445/49525ca1-acd7-e845-02b3-6570408ac828.png)
JUMANで竈門禰󠄀豆子が解析できない問題を調べてみた

タイトルだけでオチが分かりそうですが。

JUMANで`竈門禰󠄀豆子`を解析するとどうなるでしょう。

```
竈門禰󠄀豆子
竈 竈 竈 未定義語 15 その他 1 * 0 * 0 NIL
門 もん 門 名詞 6 普通名詞 1 * 0 * 0 "代表表記:門/もん 漢字読み:音 カテゴリ:場所-施設"
禰 禰 禰 未定義語 15 その他 1 * 0 * 0 NIL
󠄀 󠄀 󠄀 未定義語 15 その他 1 * 0 * 0 NIL
豆 まめ 豆 名詞 6 普通名詞 1 * 0 * 0 "代表表記:豆/まめ 漢字読み:訓 カテゴリ:植物 ドメイン:料理・食事"
子 こ 子 名詞 6 普通名詞 1 * 0 * 0 "代表表記:子/こ 漢字読み:訓 カテゴリ:人 ドメイン:家庭・暮らし"
@ 子 し 子 名詞 6 普通名詞 1 * 0 * 0 "代表表記:子/し 漢字読み:音 カテゴリ:人"
EOS
```
こうなります([Try JUMAN](https://lotus.kuee.kyoto-u.ac.jp/nl-resource/cgi-bin/juman.cgi)で試しました)。
`禰`と`未定義語`になってますね。


```c:juman.h
#if defined(IO_ENCODING_EUC) || defined(IO_ENCODING_SJIS)
#define	BYTES4CHAR	2	/* EUC-JP or SHIFT-JIS */
#else
#define	BYTES4CHAR	3	/* UTF-8 (usually) */
#endif
```
まあ、こういうオチです。
`juman_pat.h`とかでも似たような記述があるので、ここだけが原因ではないですが。

なお、他の形態素解析器は調べてないです(JUMANは知ってたのでサクっと記事を書けるので書いた)。
iPhoneのSafariのデフォルト地図をApple純正マップにしたい

経路案内などに用いるマップアプリはGoogle MapとAppleのマップが二大勢力と言って良いでしょう. しかし, Safariの検索結果から地図を開くとデフォルトではGoogleMapに飛んでしまいます. Apple社のマップをデフォルトに設定したかったのでググってみましたが日本語のページが見当たらなかったのでまとめておきます.
###使うアプリ
今回Safariの機能拡張に用いるアプリは [Mapper for Safari](https://apps.apple.com/jp/app/mapper-for-safari/id1589391989 "App Store")です.
¥120と有料ですが毎回住所をコピペしてマップに貼り付けていた手間を考えれば安いもんです.
ver:1.05
iPhone11, iOS:15.2.1で試しました.
![IMG_6645.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513378/f7943d54-b5fd-e267-c54c-e6d672eea7be.jpeg)

###手順
①Mapper for Safariをインストール.
②設定アプリから[Safari]→[機能拡張を選択]→[Open in Apple Maps]を選択.
![IMG_6646.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513378/fb780fb1-878c-4580-f012-dfd5666098a8.jpeg)![IMG_6647.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513378/401de1ae-6989-8e10-6fc2-b89e54788314.jpeg)
③Open in Apple Mapsをオンにし, 全てのWebサイトに許可を与える.
![IMG_6649.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513378/289ec0ea-871f-53c9-c89b-a0f667687fdd.jpeg)![IMG_6648.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513378/27a9c7fe-97f6-6f2f-6ef1-e95fc7af6d5e.jpeg)

これでSafariの検索結果から地図を開いてもApple純正のマップが開きます!

###参考にしたサイト
[How To Open Apple Maps by Default on iPhone and iPad](https://appletoolbox.com/how-to-open-apple-maps-by-default-on-iphone-and-ipad/#How_To_Open_Apple_Maps_by_Default_on_iPhone)