OmniAICreator/Qiita-1.07M huggingface dataset:
USBでLED電球(100V)をオンオフしてみた

## 目次
- USBでLED電球(100V)をオンオフしてみた
	- [目次](#目次)
	- [概要](#概要)
	- [揃えるもの](#揃えるもの)
	- [システムの構成](#システムの構成)
	- [IWT303で100V電源を制御できるようにする](#iwt303で100v電源を制御できるようにする)
	- [PCからIWT303にコマンドを送れるようにする](#pcからiwt303にコマンドを送れるようにする)
	- [IWT303にLED電球を接続する](#iwt303にled電球を接続する)
	- [実行してみる](#実行してみる)
	- [免責](#免責)

## 概要
- PC(Windows10)から100Vで点灯するLED電球を直接付けたり消したりしたい


## 揃えるもの


- LED電球(LDA7L-G-6T6)

|![DSC_0102.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/0d1b082f-6a4b-d502-46bc-b684ac610d92.jpeg)|
|:-:|

- コード付きソケット(KP-M2615H(W))

|![DSC_0099.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/07259c9f-a739-0df7-13c8-b9bdabcdddce.jpeg)|
|:-:|

- IWT303(USBから100V電源をON、OFFできるデバイス)

|![DSC_0100.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/a7d0c6de-4e4e-beee-16c9-e1374e4c698a.jpeg)|
|:-:|

<br>

システムの完成形はこんな感じになります。

|![system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/da86369f-6390-8b2c-abaa-9dcd4e6d32c0.png)|
|:-:|

## システムの構成
1. IWT303にPCからコマンド

2. IWT303がコマンドに沿ってLED電球の電源をON、OFFする


## IWT303で100V電源を制御できるようにする
IWT303から100Vの電源ラインを制御できるように、コード付きソケットを改造します。
2本の線がくっついているので、写真のようにコードの一部分を2本になるように切り離して、そのうちの1本を切断して下さい。
断面は1cm程度、銅線が見えるように被膜を剥いてください。
被膜を剥いた後、銅線を撚って半田付けしてください。

|![DSC_0104.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/bbab7017-e301-64d4-07b1-f3b29d0ff64a.jpeg)|
|:-:|

## PCからIWT303にコマンドを送れるようにする
PCからIWT303にコマンドを送るためにIWT303の制御ソフトをダウンロードします。
以下のページにアクセスしてください。

[USBリレー制御モジュール 3接点タイプ 10A 250V IWT303-3C](https://tokyodevices.jp/items/149)

ページ内に「IWT303制御コマンド(iwt303ctl) 0.0.2 Windows版」があるので、それをクリックしてダウンロードしてください。
コマンドの詳細な使い方に関しては以下のリンクを参照してください。

[ IWT303シリーズ データシート・マニュアル 1.5 ](https://s3.ap-northeast-1.amazonaws.com/tokyodevices.jp/qe4nmRhBeSjsmiHgbtbxxxy4?response-content-disposition=inline%3B%20filename%3D%22IWT303-C_MANUAL.pdf%22%3B%20filename%2A%3DUTF-8%27%27IWT303-C_MANUAL.pdf&response-content-type=application%2Fpdf&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ2YXSNI3GO5DGJAA%2F20200207%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20200207T182343Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=508a9ee4abeda65ac7bed75e51b5700e747b494b25c96d14ebb1d7914708154e)

## IWT303にLED電球を接続する
先ほど、改造したコード付きソケットをIWT303に接続します。
今回はIWT303のCN1に接続します。

写真の通りに接続してください。
接続するコードは区別しません、a端子とc端子に接続できれば大丈夫です。

|![DSC_0105.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/9586784a-55b5-e0d6-1c8b-e7d19faa4f44.jpeg)|
|:-:|

＊注意！

100Vを制御するのでIWT303を非導電性のケースなどに入れてください。また、コードの被膜の剥けている部分に触れないようにしてください。

## 実行してみる
WindowsからIWT303にコマンドを送るには、先ほどダウンロードしたIWT303の制御ソフトをコマンドラインまたはPowerShellから実行する必要があります。

LED電球をONにするときは以下のコマンドを利用します。

```
iwt303ctl.exe set ANY 1
```

|![DSC_0107.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/aa6618e4-596d-005f-e17a-265c6bc404ce.jpeg)|
|:-:|

OFFにするときは以下のコマンドを使います。

```
iwt303ctl.exe set ANY 0
```

|![DSC_0106.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550473/e318ca70-86bb-d144-23b2-9b22647f0c86.jpeg)|
|:-:|

## 免責
本記事を起因として生じる、いかなる損害に対しても一切責任を負いません。
【rails tutorial 13.4.4】「ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key」エラーの対処法

##経緯
railsチュートリアル「13.4.4 本番環境での画像アップロード」において、
AWSの「Simple Storage Service (S3)」との接続がうまくできませんでした。

本来スキップしても良い項目でしたが、
カリキュラム通り進めて
IAMの設定やS3との接続もできた（と思っていた）のですが

`$ git push heroku
`
をすると、
`「ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key」
`
及び
`「remote:!　Precompiling assets failed.」
`
というエラーが出てしまいましたので、その原因と対処法を記載します。

##結論
`heroku config:set`がされていなかった

AWSのS3を使う際には、登録したデータの紐付けが必要になります。
その際のコマンドに""(ダブルクォーテーション)を不必要に付けていたことが原因のようでした。


```
$ heroku config:set S3_ACCESS_KEY="ココに先ほどメモしたAccessキーを入力"
$ heroku config:set S3_SECRET_KEY="同様に、Secretキーを入力"
$ heroku config:set S3_BUCKET="Bucketの名前を入力"
$ heroku config:set S3_REGION="Regionの名前を入力"
```

↑こちらはチュートリアルから引用してきたコマンドです。
""は含まずに代入してください。

代入できたか確認するコマンドが以下になります

```
$ heroku config:get S3_ACCESS_KEY
$ heroku config:get S3_SECRET_KEY
$ heroku config:get S3_BUCKET
$ heroku config:get S3_REGION
```

setがgetになっただけです。
入力値が不安であれば確認の時に使ってください。

これで問題なく`$ git push heroku`はできるようになりました。


##別件の問題が
git push herokuをやりすぎてlimitいっぱいになってしまいました。
herokuはgit push回数に制限があるんですね。知りませんでした。

そこで、別のherokuをcreateしました。

git push herokuは無事できるようになりました。

しかし、
今度はアプリのsigninができなくなりました。

##signinできない原因
認証に使っている`edit_account_activation_url`というリンクに入っている名前の中に古い方のheroku.app名が入っていました。

##対策
production環境のメール設定のhostを新しい方のherokuへ切り替える

```config/environments/production.rb
 host = 'https://自分のherokuアプリ名.herokuapp.com/'
```

これで本番環境でのsigninができました。
ちょっと脱線してしまい、すみませんでした。


##まとめ
・$ heroku config:setコマンドには""は必要ない
・$ heroku config:getで反映できているか確認できる
・production.rbにherokuのhost情報を入れている


##参考
・https://qiita.com/fuku_tech/items/b21e49ff49cb19f04838
・https://310nae.com/es6-compile/
・https://pg-happy.jp/rails-aws-s3-upload.html
・https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39
AWS勉強会のアウトプット

# 今回やったこと
- チュートリアルに沿って「Linux 仮想マシンを起動」をやってみた
- [参考サイト:AWSチュートリアル](https://aws.amazon.com/jp/getting-started/tutorials/)


# Macの操作について学んだことが合った
- 2本指の状態でパットを押すと「右クリックが開く」と同じ役割を果たしてくれる。

# SSHフォルダにキーペアファイルをいれる
- SSHフォルダは隠しフォルダとして隠れている状態。隠しファイルを解除すれば閲覧することができる。
- [参考サイト:隠しファイル・フォルダを表示する方法](https://pc-karuma.net/mac-finder-show-all-files/)
- そもそもフォルダ自体なかったので新規でフォルダを作成。その中にキーペアのファイルを突っ込んだ。

# キーペアの仕組みがイマイチ理解できなかった
- そもそもキーペアってなんぞや？
- ダウンロードフォルダにキーペアファイルがない状態であれば成功。

# インスタンスの仕組みもイマイチ理解できなかった
- チュートリアルに沿って作成してみたが明らかに初心者向けではなかった。

# 使用しないインスタンスは止めないと課金される可能性がある
- 無料版で作成すれば課金されることはないが念のため止めといた方が良い。
Web Workerを別ファイルにしないでインラインスクリプトで実行する方法

参考：[The Basics of Web Workers - HTML5 Rocks](https://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers)

こちらの参考で知ったので、そのまま試してみたという内容になります。よろしくお願いいたします。:bow:

```index.html
<!DOCTYPE html>
<meta charset="UTF-8">
<title>Document</title>

<script id="worker1" type="javascript/worker">
self.addEventListener("message", e => {
    self.postMessage(`${e.data} from worker!`);
});
</script>

<script>
const blob = new Blob([document.querySelector('#worker1').textContent]);
const worker = new Worker(window.URL.createObjectURL(blob));

worker.addEventListener("message", e => {
    console.log("Received: " + e.data);
});

worker.postMessage("hello");
</script>
```

<img width="831" alt="Screen Shot 2020-02-09 at 16.07.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142910/de10ea96-f67b-0082-ce78-b1ea9a0c6fe6.png">

workerファイルを別ファイルにすることなく実行することができました

---

`window.URL.createObjectURL(blob)` でBlobオブジェクトに保存されたデータを参照するためのURL文字列を作成できるので、それを別ファイル扱いにして読み込めるらしいです。

```js
const blob = new Blob([document.querySelector('#worker1').textContent]);
console.log(window.URL.createObjectURL(blob)); // "blob:http://127.0.0.1:8000/a9a7fcfe-5952-49f1-a088-1835a6d0e872"
```

<img width="908" alt="Screen Shot 2020-02-09 at 16.14.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142910/2d1f73c8-17a7-2f5d-3da8-83048b419038.png">

以上です。
R でcsvファイルのデータを読み込んでVenn diagram (ベン図)を作成した例（備忘録）


##背景##
学会の発表資料作成でRでVenn図を書かなければならなかったのですが、調べても自分がやりたい「csvファイルのデータを読み込んでVenn図を書く」という方法について、ドンピシャの情報がなかったので、備忘録として投稿します。

##csvファイルのデータの準備##
まずは実験や観察などの結果をまとめたcsvファイルを作成します。
この時に注意しなければならないのが、Venn図では各条件（目的変数）における説明変数の頻度を視覚した図であるため、列方向に目的変数が、行方向には各説明変数の **"名称"** が情報として必要となります。

私は実験結果をExcelの表でまとめてピボットテーブルで結果をまとめる際に、説明変数を1列目入れて、各説明変数のところにチェックや数字、属性の記号などを使っていたのですが、そのままで読み込もうとしていても、まともなVenn図ができない状況でした。

Venn図に読み込むためには、以下の操作でExcel内でデータを成形して、csv形式に変えました。

1. Excelのフィルターなどで目的変数で空欄を除外する
2. 1列目の説明変数の2行目以降で表示されている説明変数をコピーして、目的変数にペーストする
3. 上記の1と2を説明変数で繰り返す
4. 全ての説明変数で作業が終わったら、フィルターを解除して1列目（説明変数）を削除する

この作業が終わったら、csv形式でファイルを保存します。
保存先はRのWorking directly（Rのスクリプトなどがあるところ）に保存します。


##Rでスクリプト作成##
以下の点に注意してスクリプトを作成します。


###Venn Diagramパッケージのインストールとライブラリ起動###

```R
install.packages("VennDiagram")
library(VennDiagram)
```

###csvファイルの読み込み###
- csvファイルをtable形式で読み込む
- 説明変数の行を削除する
- 空欄をNAに変換する

```R
fname <- "Venn_example.csv"
venn_list <- read.table(fname, skip=1, sep=",", na.strings=c(''))
```

###説明変数を格納する変数を作成###

以下のように1列目、2列目、・・・の情報を格納する変数を作成する
（Venn diagram関数では5つまでの制限があるようです）

```R
AA <- venn_list[,1]
BB <- venn_list[,2]
CC <- venn_list[,3]
```

###変数内のNAの値を除去する###
以下の操作でNAの値を除去しないと、NAという情報がVenn図に掲載されてしまい、数が合わなくなります。

```R
AAA <- AA[!is.na(AA)]
BBB <- AA[!is.na(BB)]
CCC <- AA[!is.na(CC)]
```


###リストを作成###
Venn diagram関数ではリスト形式しか受け付けないようです。
結構ここでハマってしまいましたので、注意してください。
この際、Venn図に表す文字列をイコールの左側（リストのタイトル）に入れるのですが、欲張って長い文字数を入れるとエラーでVenn図が描かれませんので注意が必要です。

```R
VennExample <- list(A = AAA, B = BBB, C = CCC)
```


###いよいよVenn図作成###
いよいよVenn図作成です。ちゃんと変数の設定などを行えば、綺麗な図を描いてくれます :relaxed:

```R
venn.diagram(VennExample, filename = "venn_test.png",fill=c(1,2,3), alpha=0.4, lty=2)
```

ここで、Filenameで出力先を設定することが必要になります。
試してみたところ、png形式の他にtiff形式やjpeg形式でも出力が可能です。

オプションのalphaは透過度を、fillは塗りつぶす色のオプションになります。

以下の参考のリンク先にvenn.diagram関数のオプションが紹介されています。
https://data-science.gr.jp/implementation/ida_r_venn_diagram.html
TypeScript中括弧の型定義方法

### エラー箇所
``` 
  login: ({ commit }) => {
```
### エラー内容
commitの部分で以下のエラーを吐く

```
Binding element 'commit' implicitly has an 'any' type.ts
```

### 修正方法
```
  login: ({ commit }: { commit: Function }) => {
```

参照
[TypeScript公式](http://www.typescriptlang.org/docs/handbook/variable-declarations.html#property-renaming)
RaspberryPi4 セットアップまとめ

#はじめに
RaspberryPi4を買ったので、RP3からの移行や設定をまとめておく。
項目ごと記事にしているので、それをまとめる。

# 記事
[RaspberryPi4 初回起動編](https://qiita.com/kanon700/items/19c9756da13b9283df55)
[RaspberryPi4 ネットワーク編](https://qiita.com/kanon700/items/3291c19037edf945b53d)
[RaspberryPi4 SwitchBot編](https://qiita.com/kanon700/items/69ab043a0d5cd611f693)
[RaspberryPi4 Hubot編](https://qiita.com/kanon700/items/daa6eae6f6aa38f1bb19)
[RaspberryPi4 DDNS編](https://qiita.com/kanon700/items/96a80a0ff18b680d996c)
[RaspberryPi4 外付けSSD編](https://qiita.com/kanon700/items/78d2af26f5949b061f0a)
[RaspberryPi4 DLNA編](https://qiita.com/kanon700/items/8d7f65bc54dd780003ce)
[RaspberryPi4 SoftEtherVPN編](https://qiita.com/kanon700/items/d9a46c01a5ec4c64759b)
[RaspberryPi4 influxDBとGrafana編](https://qiita.com/kanon700/items/e3a8a1cea4bcd635a002)
[環境センサーの値をGrafanaで可視化する！](https://qiita.com/kanon700/items/240329aea4844c07f02c)
[RaspberryPi4 Samba編](https://qiita.com/kanon700/items/eb761ed46cd860cd6e5d)
M5CAMERA 初期設定＋動作確認

#はじめに
M5Cameraは、OV2640カメラ駆動チップと、4MBのPSRAMが統合された、ESP32ベースのカメラモジュールです。今回はArduinoIDEにも初めて触ったので備忘録的に纏めています。
#必要なもの
M5Camera （今回はTypeBです）
Arduino IDE
Windows10
#参考記事
https://ambidata.io/samples/m5stack/m5camera/
https://qiita.com/MypaceEngine/items/29940f509f755726e482
#手順
1．M5CameraをUSBケーブルでパソコンにつなげる。
2．カメラの性能確認。WifiでM5FishEyeCam(私のは魚眼レンズではないですが何故か名前はFishEyeに)
　　につなぎ、http://192.168.4.1
　　にアクセスすると画像が流れてくればOK.一旦Wifiを切ります。
　（時間がなければ省略可）
3．Arduino IDEを起動
4．[USB to Serial Driver](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/drivers/CP210x_VCP_Windows.zip)をインストール（過去に実施済みであれば省略可）
![2020-02-08_20h03_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/0a28931e-5f5f-3417-5deb-440797a2ad18.png)
参照元は[コチラ](https://docs.m5stack.com/#/en/quick_start/m5core/m5stack_core_get_started_Arduino_Windows?id=_2-install-usb-to-serial-driver)
5．ESPボードマネジャーのライブラリーを追加
ファイル＞環境設定＞設定＞追加のボードマネジャーのURLの欄に下記URLをコピー
https://dl.espressif.com/dl/package_esp32_index.json
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/40386d05-8a76-ac88-40d2-7998f80cf8f6.png)

6．ESPボードマネージャーをインストール![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/0350dc8d-d83e-e62e-bd7d-b265573b11c1.png)

ツール＞ボード＞ボードマネジャーへいき、EPS32を検索。ESP32をインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/6574ee2c-8729-42c1-fcb7-eb2681106f78.png)
7.M5STACKライブラリーをインストール
スケッチ＞ライブラリーをインクルード＞ライブラリー管理にてM5STACKを検索しインストール
8．ボードの選択
ツール＞ボードにてESP32 Wrover Moduleを選択。Partition SchemeをHuge APP (3MB No OTA/1M APIFFS)に変更する。これをしないとカメラのスケッチ例を使用するときに容量オーバーでエラーが出る。
9．スケッチ例のFactory Testで接続確認（省略可）
ファイル＞スケッチ例＞M5STACK＞BASICS＞Factory Test
M5Cameraはモニターがないためシリアルモニタで接続を確認
10． カメラ用のスケッチ例を選択
ファイル＞スケッチ例＞ESP32>Camera>Camera WebServer
11.カメラモデルの選択
　define CAMERA_MODEL_WROVER_KIT に//でコメントをつけ、
　CameraWebServerにて#define CAMERA_MODEL_M5STACK_PSRAMの前の//を削除してカメラモデルを選択
　ssidとpasswordの部分にWifiルーターののIDとパスワードを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/28712cb9-32f7-7c7a-e843-ed13487d80e9.png)
12.ピンの変更
camera_pins.h にて下記の2つのピンを変更
上記をimgタグにして、width を追加し任意の値を設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/7c919cf5-5aa4-766f-acb5-b57313e8430b.png" width=80%>
梱包箱の紙のインストラクションにも記載はあります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/08a3a2e3-d470-c7b8-e4da-e5d6c33f347e.png" width=30%>
13．書き込み
→をクリックしてM5cameraへ書き込み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/405c5b03-e849-8b54-b685-8fb5ca19ba88.png)
14．書き込みが終了したら、シリアルモニターを立ち上げます。シリアルモニターにあるURLへアクセスするとカメラが立ち上がります。
#動作確認
Get Stillで静止画、Start Streamで動画が見られます。ただし、パソコン内に保存されている訳ではないのでその場だけです。下記はパソコン画面を携帯でとりました（操作しながらは難しく、若干ぴんぼけ）
![DSC_2099.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/ef6134b1-4618-8927-4261-691b085089e4.jpeg)
#感想
レゴブロックの一部のような、オモチャのような外見で、それなりの画質が取れたのでびっくりしました。よいしょよいしょに変更しないと上手く動かない躓きポイントはありますが、この小ささと軽さは結構魅力的ですね。
Node-RED搭載のRaspberry Pi 4＋USBカメラで撮影する。

#はじめに
年末ごろにNode-REDについて初めて知りました。
コードを書かなくてもパレットと呼ばれる画面で
アプリケーションの動作が書いてある「ノード」を組み合わせれば
やりたい事が簡単に出来る！と個人的には解釈しています。
正しいご説明は[コチラ](https://nodered.jp/about)です。
どうやらNode-REDはRaspberryPiでも簡単に使用できるようなので
今回はRasberryPiにUSBカメラを接続し撮影するということにチャレンジしてみました。
#用意したもの
Raspberry Pi 4 Model B/4GB（Raspbianインストール済み）
Windows10のパソコン
ロジクール LogicoolC270n [ロジクール HD ウェブカム]
参考にしたホームページ：
https://www.1ft-seabass.jp/memo/2019/12/29/raspberrypi-node-red-webcamera-connect-microsoft-custom-vision-service/
https://nodered.jp/docs/getting-started/raspberrypi
https://flows.nodered.org/node/node-red-contrib-image-output
https://flows.nodered.org/node/node-red-contrib-usbcamera

#準備（省略可）
パソコンとRasberryPiを繋げる。
1．パソコンのPowershellを開く
2．RasberryPiのLinuxターミナルにて下記コードでIPアドレスを確認
```ip addr```
3. PowerShellにてsshと2で調べたアドレスを組み合わせたコマンドを打ち、パソコンからRasberryPiが操作できるようにする。
```ssh pi@調べたアドレス```
4. Raspberry Piのパスワードを入力（入力し始めても画面上に変化はないので要注意。）
　その後、Enterキーを押すと接続完了。 
#手順
1．Node-REDをRaspberry Piにインストール(少々時間かかります)
```bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)```
2．USBカメラを使えるように下記ノードをインストール
```npm install node-red-contrib-usbcamera```
3．下記コマンドでRaspberryPiの起動時にNode-REDも自動起動するようになる。
```sudo systemctl enable nodered.service```
4．下記コマンドでNode-RED開始
```node-red```
5. ローカルでパレッドを開く
http://RaspberryPiのIPアドレス:1880
6．パレッドでInject(タイプスタンプ）、usbcamera、msg.payload、image previewをパレットに置き、下図のようにつなげる。左の候補で見つからない時は検索する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/92abea92-e1c2-46ac-510e-e3dcf1251170.png)
7．「デプロイ」ボタンを押す。
8．タイムスタンプボタンをクリックすると画像が出てくる。
#動作確認
若干落差はありますがちゃんと撮影できました!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508834/5e638fb6-8dc3-c8ef-0a3a-f58e90cf1ec3.png)
#感想
本当にコード一つ書かずにRaspberryPiを動かせました！
１つ１つのノードを理解する必要はありますが、組み合わせだけで出来るなんて素敵。
また組み合わせたものを他の人に提供したいときは「書き出し」＋「読み込み」機能で
展開していくこと可能なようです。
もうちょっと1つ1つのノードについて勉強していきたいと思います。
書き込み用にファイルを開けません sudoについて

入社1week目の個人的メモ。

Virtualboxのvmに入って環境構築の作業中..
手順書にしたがってファイルを開こうとすると、以下のように怒られた。

`vi /etc/ファイル名`コマンドを打つと

**書き込み用にファイルを開けません**

以下のようにsudo権限で実行して解決。

```
sudo vi /etc/ファイル名
```

## sudo って...?

**`sudo コマンド`**
スーパーユーザー（rootユーザー）の権限でコマンドを実行する。

パスワードなしで実行できるように設定したり、sudoコマンドを実行するユーザー自身のパスワードでコマンドを実行させたりすることができます。

「root」ユーザはLinuxやUnix Like Systemにおける「管理者権限」。

Windowsでいうところのadministrator(アドミニストレータ)と同じ意味になる。

*引用元：https://www.atmarkit.co.jp/ait/articles/1611/28/news036.html*

*引用元：https://eng-entrance.com/linux-root*
【Progate】Ruby  on Rails環境構築でrails serverが立ち上がらないときの解決法

Progateの[こちら](https://prog-8.com/docs/rails-env-win)の記事を参考にRuby on Rails5の環境構築をしたら
詰まったのでその備忘録を残しておきます

##前提
windows8
Ruby 2.5.1
Rails 5.2.4.1
##発生した問題
Progateの[こちら](https://prog-8.com/docs/rails-env-win)の記事でRuby on Railsの環境構築中
Railsのインストールも完了し最後に
`rails s`
でサーバーを立ち上げようとしたところ

```
Usage:rails new APP_PATH [options]
Options:[--skip-namespace], [--no-skip-namespace]            # Skip namespace (aff
ects only isolated applications)
～
```

というオプションみたいなのが出てくるだけで立ち上がらない。

試しにブラウザで
`localhost:3000`
にアクセスしようとしたが、エラーが出る。

##解決方法
この質問の回答を試したところ解決しました。

[・rails newでbinフォルダ等が作成されない](https://teratail.com/questions/231750)

フォルダ生成の段階で問題があったようで
`rails new フォルダ名`
ではなく、
`rails new フォルダ名 --skip-git`
としたあとに
`cd フォルダ名`
`rails s`
を実行したところ、無事サーバーが立ち上がりブラウザでアクセスもできました。
##解決に至った経緯と原因
はじめは"rails s できない"みたいな検索ワードで調べていました。
するとbinがどうこういってる記事が多く見つかって
`bundle exec rake rails:update:bin`
などなどやってみましたが、うまくいかず、、、

そこで改めて生成したフォルダを見てみるとbinフォルダがそもそも存在しないことに気づき、
フォルダの生成の段階が上手くいってなかったんだと分かりました。
**どうやらgitがインストールされてないことが原因で、`rails new`コマンドでサーバー立ち上げに必要なフォルダが生成されてなかったようです。**

##追記
後日、gitをインストールしてから、`rails new`してみると問題なく`rails s`までできるようになりました。
ただ、progateではgitのインストールに触れていないようなので同じところでつまづく人もいるんじゃないかなと思います。
PHPの -> をいつもタイポするのでPHPStormのLive Templateを設定した話

### 追記
`- 1` とかスペース一つつけて何かを書くのが逆に面倒になってしまったのでボツ案になりました。
元から入っているライブテンプレートの機能は便利なので使うといいけど、後から考えて追加しようとしてもなかなかうまくいかないことがわかりました。

### 以下書き換え前

PHPのメソッド呼び出しの `->` っていつもタイポしませんか？
`^>`（隣のキーを押してしまう） とか `-.`（シフトキー押せてない） とか。

というわけで PHPStorm の Live Template 機能を使って `-` からスペースキーで `->` にしてくれるというのをやってみました。

Preferences から Editor -> Live Templates で設定。

![貼り付けた画像_2020_02_09_15_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144064/33bcadf6-7862-939d-1ae2-85c5de561731.png)

新しく作るときは他のすでにあるテンプレートを参考にすると良さそうです。

もうこれでタイポしません。スペースキーは大きいのです。
Electronで作成しているアプリケーションでfirebaseモジュールを使おうとした時に発生するエラーの解決[Failed to load gRPC binary module because it was not installed for the current system]

`% npm i firebase`
を実行して、プログラム内に

```javascript
const firebase = require('firebase');
```
を記述し、`% electron .`でアプリを起動した際に

```
Uncaught Error: Failed to load gRPC binary module because it was not installed for the current system
```
とgrpcモジュールに関するエラーが表示された。

`% npm i grpc`

を実行したが、今度はgrpcモジュール内に`node_modules/grpc/src/node/extension_binary/electron-v6.0-darwin-x64-unknown/grpc_node.node`というファイルが無いぞとエラーで怒られる。

さらに`node-v72-darwin-x64-unknown/grpc_node.node`ってファイルならあったけどね！`npm rebuild`すると治るかも！と書かれていたので愚直に`% npm rebuild`を実行するも結果は変わらず。

拡張バイナリの中にnode-v72(以下略がありelectron-v6.0(以下略が無いならリビルド時にターゲットを指定してみようと思い、まずelectronのバージョンを確認した。`% electron --version`

使っていたのはv6.0.10であったため、ランタイムとバージョンを指定してリビルド。`% npm rebuild --runtime=electron --target=6.0.10`

再度electronアプリを起動すると、エラーも表示されず無事解決した。
Raspbian Busterにて最新のOpenCVインストール

# 概要

最新のOpenCV(v4.1.2)をRaspbian Busterでソースコンパイルしてインストールした内容のメモです。

# 環境確認

### LinuxバージョンとPythonバージョン確認

```
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

$ python3 --version
Python 3.7.3
```

## 必要パッケージインストール

```bash
# パッケージアップデート
$ sudo apt-get update && sudo apt-get upgrade

# ビルドツールインストール
$ sudo apt install -y build-essential cmake pkg-config

# イメージ関連パッケージインストール
$ sudo apt install -y libjpeg-dev libtiff5-dev libjasper-dev libpng-dev

# ビデオ関連パッケージインストール
$ sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev

# OpenCV関連パッケージインストール
$ sudo apt install -y libfontconfig1-dev libcairo2-dev libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev libgtk-3-dev libatlas-base-dev gfortran

# Python関連パッケージインストール
$ sudo apt install -y python3-dev
```

### Swapサイズ変更

```bash
$ sudo vi /etc/dphys-swapfile
...
CONF_SWAPSIZE=100 --> 2048
...

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
```

# OpenCVインストール

約2~3時間かかるので、tmuxを使いましょう。

### ソースダウンロード

```bash
$ cd ~
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.2.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.2.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip
$ mv opencv-4.1.2 opencv
$ mv opencv_contrib-4.1.2 opencv_contrib
```

### ソースコンパイル

```bash
$ cd ~/opencv
$ mkdir -p build && cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D CMAKE_SHARED_LINKER_FLAGS=-latomic \
-D BUILD_EXAMPLES=OFF ..

# 2~3時間所要
$ make -j4

$ sudo make install
$ sudo ldconfig
```

## OpenCV確認

### Swapサイズ変更

```bash
$ sudo vi /etc/dphys-swapfile
...
CONF_SWAPSIZE=2048 --> 100
...

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
```

### OpenCVリンク修正

```bash
$ cd /usr/local/lib/python3.7/dist-packages/cv2/python-3.7
$ sudo mv cv2.cpython-37m-arm-linux-gnueabihf.so cv2.so
$ cd ~/.local/lib/python3.7/site-packages/
$ ln -s /usr/local/lib/python3.7/dist-packages/cv2/python-3.7/cv2.so cv2.so
```

### バージョン確認

```
$ python3
Python 3.7.3 (default, Apr  3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.2'
>>>
```
RaspberryPi4 ネットワーク編


## ネットワーク関係
### SSH有効化
```bash
$ sudo raspi-config
5 -> P2 SSH -> <yes>
$ mkdir ~/.ssh # フォルダを作っておく
```

### Wifi接続
GUIで初期設定した。
平打PWは怖いので、暗号化したpskを生成して`/etc/wpa_supplicant/wpa_supplicant.conf `に追記
ルートユーザーで以下のコマンドを実行。

``` bash
$ wpa_passphrase [SSID] [PASS] >> etc/wpa_supplicant/wpa_supplicant.conf
```
最終的な`wpa_supplicant.conf`は以下。

``` bash
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
        ssid="[SSID]"
        psk="[暗号化したPASS]"
        key_mgmt=WPA-PSK
}

```

### 固定IP
`/etc/dhcpcd.conf` に以下を追記

```
interface wlan0
static ip_address=192.168.11.xx
static routers=192.168.11.1
static domain_name_servers=8.8.8.8
```

### 公開鍵認証でSSH
#### 1. 接続元PC

```bash
$ cd ~/.ssh/
$ ssh-keygen -t rsa -b 4096 -C "xxx@gmail.com"
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/id_rsa_rp4
Enter passphrase (empty for no passphrase): # パスワードを入れる
Enter same passphrase again: # もう一度入れる
# ゴニョゴニョ表示されて鍵が生成される
$ scp ~/.ssh/id_rsa_rp4.pub pi@192.168.11.xx:/home/pi/.ssh # SCPで公開鍵をRaspberryPiに転送する
```

#### 2. RaspberryPi
公開鍵の設定

```bash
cd ~/.ssh/
cat id_rsa_rp4.pub >> authorized_keys
chmod 600 authorized_keys
chmod 700 ~/.ssh
rm ~/.ssh/id_rsa_rp4.pub
```

SSHの設定変更
`/etc/ssh/sshd_config` に以下を追記

``` bash
Port xxxxx # SSHで使うポート番号
PermitRootLogin no # Rootログインの禁止
AuthorizedkeysFile %h/.ssh/authorized_keys # authに使うファイルの指定
PasswordAuthentication no # パスワード認証の禁止
```

設定できたらRaspberyPiを再起動する

#### 3. 接続
以下のコマンドでRaspberryPiにログインできたらOK

```bash
ssh -i ~/.ssh/id_rsa_rp4 pi@192.168.11.xx -p xxxxx # xxxxxはポート番号
```
RaspberryPi4 SwitchBot編

# はじめに
python3の実行環境は入っている人向け

ここのPython3向けの設定をやる
https://github.com/OpenWonderLabs/python-host


#  依存関係

```bash
sudo apt install libboost-python-dev libboost-thread-dev libbluetooth-dev
sudo pip3 install pybluez gattlib
```

HPには書いていないけど、libbluetooth-devが無いとpybluezが入らないので、先に入れておく


# 実行コマンド
以下のコマンドでSwitchBotが動いたら成功

```bash
sudo python switchbot.py  xx:xx:xx:xx:xx:xx Press
```
xx:xx:xx:xx:xx:xxはSwitchBotのMACアドレス

# バッテリ残量の取得
このやり方はなんかあんまり安定しなかったので別の方法を追記した
いつの間にか電池切れしているで、お馴染みのSwitchBot。
公式には電池残量の取得APIが載っていなかったけど、pipで `switchbotpy`ってのを入れると取得できるっぽい

### switchbotpyのインストール

```bash
pip install switchbotpy
```

### サンプルコード

```python
from switchbotpy import Bot

switchbot = 'XX:XX:XX:XX:XX:XX' #SwitchBotのMacアドレス


def GetSwitchBotBattery(addr):
    b = Bot(bot_id=1, mac=addr, name="data")
    settings = b.get_settings()

    return settings["battery"]


if __name__ == '__main__':
    bat = GetSwitchBotBattery(switchbot)
    print(bat)
```

これで電池切れで玄関解錠できないなんて事を回避できる

# バッテリ残量の取得2
公式のpythonに設定情報取得コマンドを追加した
https://github.com/kanon700/python-host/tree/feature/add_get_settings

```python:switchbot_py3.py
    def run_and_res_command(self, command):
        self.req.write_by_handle(self.handle, self.commands[command])
        return self.req.read_by_handle(self.notif_handle)

    def get_settings_value(self, value):
        value = struct.unpack('B' * len(value[0]), value[0])
        settings = {}
        settings["battery"] = value[1]
        settings["firmware"] = value[2] / 10.0
        settings["n_timers"] = value[8]
        settings["dual_state_mode"] = bool(value[9] & 16)
        settings["inverse_direction"] = bool(value[9] & 1)
        settings["hold_seconds"] = value[10]

        return settings
```
こんな感じのスクリプトでバッテリ残量を取得できる

```python:SwitchBot_Battery_Get.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from switchbot_py3 import Driver

bot = 'xx:xx:xx:xx:xx:xx' #switchbotのMACアドレス

def main():
    bot = Driver(device=entrance)
    bot.connect()
    value = bot.run_and_res_command('settings')
    settings = bot.get_settings_value(value)
    print(settings["battery"])


if __name__ == '__main__':
    main()
```

以上
（初心者）SSHやLinuxコマンド ssh-keygen がよくわからないのでまとめた

入社1week目の個人的メモ。

## ssh接続について

ssh-keygenコマンドは「OpenSSH」で使う公開鍵と秘密鍵や、CA鍵（Certificate Authority、認証局による鍵）を使った「証明書」と呼ばれるファイルを作成できます。

*引用：https://www.atmarkit.co.jp/ait/articles/1908/02/news015.htmlhttps://www.atmarkit.co.jp/ait/articles/1908/02/news015.html*

> OpenSSH とは
ネットワーク経由通信を暗号化する「SSH」のオープンソース実装です。
おもにUNIX/Linuxサーバに対するネットワーク経由での**リモートログイン**に使用します。

> SSH とは
「SSH(Secure Shell)」は、暗号や認証の技術を利用してセキュアにリモートコンピュータと通信するためのプロトコルです。
パスワードなどの認証情報を含む通信を暗号化します。

> プロトコル とは
定められた、データ通信を行うための規約。情報フォーマット、交信手順。

*引用：https://www.ossnews.jp/oss_info/OpenSSH*


## なぜssh接続が必要なのか

*引用：https://www.kagoya.jp/howto/rentalserver/ssh/*

VPS（バーチャル・プライベート・サーバー.）などの各種サーバー機器は、ほとんどの場合、操作をする人から離れた場所にあります。
そのため、この操作をする人だけが安全にインターネット経由で接続できる手段が必要になります。

なぜなら、万一悪意をもった人がサーバーにログインできてしまうと、サーバー内ではやりたい放題となり、さまざまなリスクの原因となるからです。

なおふだん使うSSHという用語には、以下のような複数の意味があるため、どれを指しているかを明確にする必要あり。

1. SSHでサーバーにログインするための情報（ホスト名、パスワード、認証用ファイルなど）
2. ソフトウェアとしてはサーバーとクライアントの両方ある
3. WindowsなどのOSからは、専用のクライアントソフトを使って接続する


### sshとsslの違い

- SSH
目的：サーバーへの接続
主な対象者：サーバー管理者

- SSL
目的：Webサイトを安全に表示
主な対象者：Webサイトの閲覧者


## SSHの認証方法について

離れた場所にあるサーバーへ安全に接続するため、SSHは複雑にできている。
さらに、サーバーへのログインが適正かどうかチェックする認証方法は、複数用意されている。

代表的なものは`パスワード認証方式`と`公開鍵認証方式`。

- パスワード認証方式
この場合のパスワードは、サーバーのユーザーアカウントに設定しているもの。
手軽だが、パスワードが流出すると、悪意をもった第三者からサーバーにログインされてしまう可能性があり、危険でもある。

※ 実際にはパスワードのみを単純に確認しているわけではなく、複雑な動きをしている。
詳しくは引用元参照。

- 公開鍵認証方式
初期設定作業が大変だが、通信の安全性はとても高い方式。
方法はいくつかありますが、**`「鍵」と呼ばれるファイルをしっかり保管さえすれば、「鍵」のないユーザーからのログインは原則できません。`**
これにより、悪意をもった第三者からの不正なログインを防ぐことができます。

公開鍵認証方式は、ざっくり言うと以下のような流れ。

1. 「鍵」作成（「鍵」は、SSHサーバーかSSHクライアントかどちらかで作成します。）
2. サーバーとクライアントで必要な「鍵」をそれぞれ保管
   「鍵」は1つではなく、必ず**`サーバー用（公開鍵）とクライアント用（秘密鍵）`**とをペアで作成します。
3. SSHクライアントを操作し、**`SSHサーバー`**にログインしたい意思を伝える
4. 相互に「鍵」を照合し、合っているか確認
5. 通信の暗号化などの手続き（暗号化や復号化、それらをするための情報のやりとり）
6. 暗号化された通信が開始


## ssh-keygen コマンドとオプション

Linuxコマンド **`ssh-keygen`**

秘密鍵と公開鍵をのセットを発行するLinuxコマンド。
ファイル場所とデフォルトのファイル名は以下の通り。

秘密鍵：/root/.ssh/*id_rsa*
公開鍵：/root/.ssh/*id_rsa.pub*

自分の場合は`~/.ssh/`ディレクトリが存在しなかったので、mkdirで作成した。


## 手順書で出てきた以下のコマンドについて

手順書のコマンド
**`ssh-keygen -f stash_rsa -t rsa -b 2048`**

基本文法
**`ssh-keygen [オプション] [-f 鍵ファイル]`**
※[ ]は省略可能な引数


#### 各種オプションの意味
*引用元：https://www.atmarkit.co.jp/ait/articles/1503/20/news007.html*

- **`-f`** オプション
ファイルを指定する。
今回はstash_rsaという名前にしたかったので、使っていると思われる。
（指定しないとid_rsaという名前で生成される。）

- **`-t`** オプション
鍵の種類 rsa1, dsa, ecdsa, ed25319, rsa (-tで指定しない場合はバージョンにもよるけど大抵rsaがデフォルト)

- **`-b`** オプション
鍵の長さを指定する（最低値は768bit、初期値は2048bit）
上記コマンドでも2048bitが指定されている。
（初期値が2048bitと引用元に書いてあるが、あえて指定している理由は不明）


## 秘密鍵と公開鍵を生成した後の設定

疲れたので後日記載しよう。
ソシャゲCSワークフロー改善風管理画面 12/16として投稿


2020/02/08 構成と設計を記載

こんにちは、コロナです。

今回は、業務に近いけど仮想なポートフォリオを用意してみました。

# 仮設定

## ゲームがそこそこ売れて人員が以下のように分業ができた
### 新規開発チーム
　バックエンド　   ２人
　フロント         x人
　企画             2人
### 運用チーム
  バックエンド     1人
  問い合わせ兼企画 1人

スケジュール
　ゲームを出してから3ヵ月いない

## 運用側の課題に偏りがある
### 偏りがあるために、特定の問題を解決すると他の問題が多く解決できる
　問題設定
　　以下の不具合報告が全体の３割を示している
　　　・キャラクターの紛失
　　　・引継ぎコードを忘れてしまった
　　現状
　　　・リリースまではゲームの開発を最優先していたので、運用時にログを確認する必要がある
　　　　　 ・ログはDBに保存されている
　　　　　 ・レコード数が多く、マスターから確認をしようとすると、本番のCPU利用率に影響を与えてしまう
　　　　　 ・結果として、「新規開発のバックエンドエンジニア」以外対応ができないため、クリティカルなもの以外はチケットが増えて数百件以上あるものとする

現状の課題 仮想なので若干極端に
　　　　　　・新規開発のバックエンドエンジニアが開いていない場合は、お問い合わせ消化率が０になる
　　　　　　・開発チームであっても、データベースサーバに直接問い合わせを作成するので、ミスをしてデータの消失や上書きが発生していた


改善前のワークフロー
<img width="476" alt="CSワークフロー改善_フロー1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45396/4f222e5f-60e6-bcf5-e042-5f45f85656c4.png">

   改善したい内容
　　　　　 ・「新規開発のバックエンドエンジニア」が欠席及び、作業中であっても「最低限のお問い合わせ対応」が可能な状態

　　　　　・修正内容
　　　　　　　引継ぎコードの再発行を管理画面から対応
　　　　　　　キャラクター対応の紛失についてマニュアル修正とチケットから検索項目を出力
　　　　　　　　　→　今回はお問い合わせフォームでよく届くキャラクターレベルと名前からキャラクターを検索できる画面の実装

改善後のワークフローイメージはこちらになります
今回の記事では、改善前のクエリーサンプルと、改善後の管理画面実装をしていきます。

<img width="363" alt="CSワークフロー改善_フロー2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45396/7af9be12-7825-d7b6-5675-127523be7882.png">


今後の課題
## DB環境を構築して、スクショの撮影（クエリーを発行している例）
## 管理画面を実装した後の、スクショ
.NET Core 3.1 と VSCode でHello, World! する WPF アプリを作る

# 目的

Windows デスクトップアプリを作りたいが、Visual Studio 2019 をインストールしたくない。
Visual Studio Code でとりあえず Hello,World してみる。

# 環境

Windows 10 バージョン 1809
Visual Studio Code 1.42.0
.NET Core 3.1.101

# 空のアプリ作成

Visual Studio Code の Terminal で`dotnet new wpf`します。
そのまま`dotnet run`すると空のフォームが表示されます。

# フォームにコントロールを配置する

MainWindow.xaml を開きます。
Grid タグに`<TextBlock x:Name="Text1"/>`を追加します。

```xml:MainWindow.xaml
    <Grid>
        <TextBlock x:Name="Text1"/>
    </Grid>
```

# コントロールに文字列をセットする

MainWindow.xaml.cs を開きます。
配置した`Text1`に文字列`"Hello, World!"`をセットします。
例では中央寄せして、フォントサイズを 64 にしています。

```csharp:MainWindow.xaml.cs
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Text1.Text = "Hello, World!";
            Text1.HorizontalAlignment = HorizontalAlignment.Center;
            Text1.FontSize = 64;
        }
    }
```

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240467/9ed312aa-1340-7153-c7af-fedce0cfd77e.png)

# 終了ボタンの追加

画面にボタンコントロールを追加して、イベントを作成します。

```xml:MainWindow.xaml
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock x:Name="Text1" Grid.Row="0" Text = "Hello, World!" FontSize = "64" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        <Button x:Name="Button1" Grid.Row="1" Content="終了" Click="Button1_Click" Margin="20"/>        
    </Grid>
```

```csharp:MainWindow.xaml.cs
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Button1_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
```
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240467/1ec410de-f95e-703c-1a38-2cd82abfb7b8.png)

ダサい・・・

# まとめ
.NET Core と Visual Studio Code でWindows デスクトップアプリが開発できることが分かりました。
簡単なツールを作る程度なら、Visual Studio 2019 など統合開発環境は不要だと思います。
画面レイアウトを作成するのは辛いので XAML Studio を試してみようかな。

XAML Studio
https://www.microsoft.com/ja-jp/p/xaml-studio/9ntls214tkmq
Heroku での html 公開時のエラー（composer.json で怒られる）


# 環境
Windows 10 Home 64bit

# エラー発生
javascript と html で作成したシンプルなツールを Heroku でデプロイしてみようとしたところ、下記のようなエラーが発生。

```
Basic validation for 'composer.json' failed!
```

[こちらの Gist](https://gist.github.com/wh1tney/2ad13aa5fbdd83f6a489) も参考に `composer.json` と `index.php` を作成してそれぞれ `{}` `<?php include_once("index.html"); ?>` と記入したのに…… と小一時間悩まされました。

# 原因
`composer.json` を **BOM付きUTF-8** で保存していたことが原因でした。
文字コードを BOM無しにするとすんなり解決。
灯台下暗し、というオチでした。
CarthageでChartsを導入してみる

Carthageでグラフ描画ライブラリ[Charts](https://github.com/danielgindi/Charts)を導入したときのメモ。
はじめてのCarthageだったので、その導入から。


## インストール

```
$ brew install carthage
```

## Cartfile作成

```
$ cd path/to/repository
$ code Cartfile
```

```text:Cartfile
github "danielgindi/Charts" == 3.4.0
```

## ライブラリをビルド

```
$ carthage update --platform iOS
```

`Carthage/Build/iOS/` にビルド成果物があれば成功。

```
$ ls ./Carthage/Build/iOS/
059E4A44-BC91-38F6-B36D-D72B91FDE6E5.bcsymbolmap
5A112AED-A5E6-34A0-9C82-74EF7032628F.bcsymbolmap
Charts.framework
Charts.framework.dSYM
```
## Run Scriptを追加
TARGETSの中から、ターゲットを選択
→ Build Phasesタブの `+` をクリック
→ `New Script Phase` を選択
→ 下記のコマンドを記述

```
/usr/local/bin/carthage copy-frameworks
```

→ 次にInput Filesに以下を追加

```
$(SRCROOT)/Carthage/Build/iOS/Charts.framework
```

そして、Output Filesに以下を追加

```
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Charts.framwork

```

こんな感じになればよい👇
![スクリーンショット 2020-03-02 23.03.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124160/4c14bbda-c08a-b6a0-0196-ed1d5e475ea4.png)

## ソースコードでimportしてみる

`import Charts` を記述、ビルドしてエラーが出なければおｋ

![スクリーンショット 2020-02-09 15.19.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124160/a1b9a021-5c90-c350-9cca-7c723649679b.png)
PodmanでPlantUML Serverを起動してみる

# 環境

Fedora CoreOS 31.20200113.3.1
Podman 1.7.0
Podman Compose 0.1.5

# 準備

```
$ sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
$ sudo reboot
$ sudo rpm-ostree install python3 -r
$ sudo pip3 install podman-compose
$ mkdir -p ~/.local/bin
$ curl -o ~/.local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
$ chmod +x ~/.local/bin/podman-compose
```
# ファイル

```docker-compose.yml
version: "3.7"
services:
  plantuml-server:
    image: plantuml/plantuml-server:tomcat
    restart: always
    ports:
      - 8080:8080
```

# 実行

```
$ podman-compose up -d
$ podman ps
 podman ps

CONTAINER ID  IMAGE                                      COMMAND          CREATED         STATUS             PORTS                   NAMES
35948ca95a91  docker.io/plantuml/plantuml-server:tomcat  catalina.sh run  24 seconds ago  Up 24 seconds ago  0.0.0.0:8080->8080/tcp  plantuml_plantuml-server_1
```
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208807/772e0d3c-9b2d-1de8-462c-aa9309735457.png)
RailsAdminをインストールして簡単に管理画面を作成する方法


Ruby on Rails には管理画面をテンプレート的に作成できる gem がいくつかあります。
今回は、カスタマイズ性はそこまで高くはないもののセットアップが簡単な「RailsAdmin」を使って管理画面を作成します。

## 管理画面を作成する

最初に gem をインストールします。
Gemfile に記述し、bundel install を実行します。

```Gemfile
gem 'rails_admin', '~> 2.0.0.beta'
```

```ターミナル
$ bundle install
$ rails g rails_admin:install
```

## 管理画面へアクセス

まずはサーバを起動させます。

```ターミナル
$ rails s
```

ブラウザから、rails の基本画面に "/admin" を後付けしてアクセスします。
初期設定であれば "http://localhost:3000/admin" をアドレスバーに入力します。

インストールに成功していれば、次のような画面が表示されます。
（初回は少し時間がかかります）

<img width="1043" alt="スクリーンショット 2020-02-09 15.08.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364501/c497cfac-16cb-c038-8ea4-6b3ba7d66818.png">

すでに作成したテーブルを作成している場合にはそれが表示されます。
私の環境の場合、Questions というテーブルを作成しているので表示されていますね。

<img width="847" alt="スクリーンショット 2020-02-09 15.10.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364501/6454febb-b3b5-92fe-7edc-a2983a46c71c.png">

テーブル名を選択すると、編集画面に飛べます。
"+Add new" からレコードを追加したり、外部へ出力したりできます。

## BASIC 認証をするよう制限をかける

デフォルトだとアドレスバーから誰でも管理画面にアクセスできてしまうので、セキュリティ的に問題があります。
BASIC 認証（ユーザー名、パスワード認証）をかけましょう。

```config/initializers/rails_admin.rb
# 一番上に追加
  config.authenticate_with do
    authenticate_or_request_with_http_basic('Site Message') do |username, password|
      username == 'admin' && password == 'admin'
    end
  end
```

サーバを起動しなおして、"http://localhost:3000/admin" にアクセスすると認証ダイアログが表示されます。

<img width="442" alt="スクリーンショット 2020-02-09 15.15.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364501/f29687a6-192f-4e04-48bf-b03ca42da22f.png">

上記ダイアログが表示されれば成功です。
Docker for Windows and Mac

WindowsとMacそれぞれにDockerを導入する手順を記述する．(2020年2月9日現在)
いろんな方の記事を参考にさせていただいています．ありがとうございます．
# Windows
はじめに現在使っているのがHomeなのかProなのかを確認する．

```:cmd

> systeminfo
```

「OS 名: 」以降を確認します。

#Homeの場合

# Proの場合

yper-V(仮想化システム)がサポートされているため
Docker for Windowsを使用します。
## Hyper-Vの有効化

コントロールパネルの[プログラム]-[Windowsの機能の有効化または無効化]から「Hyper-V」にチェックを付けます。
※有効化するにはOSの再起動が必要です。

## Docker for Windowsのインストール

以下のサイトから.exeファイルをインストール
https://docs.docker.com/docker-for-windows/install/
安定板のStable channelを選びます。

「Add shortcut to desktop」にチェックを付けて「OK」をクリックします。
インストール終了後、ダイアログの指示通りLog outして
「OK」を選択することでOSの再起動が行われます。

[参考](https://qiita.com/suwa3/items/1eee8d379b8aa906ef64)

# Mac
小ネタ：パスワード付きのAccessに接続する｜Power Query

2020/9/22：[おまけ2：AdoDotNet.Query関数](#おまけ2adodotnetquery関数)を追加しました。
※もともと、コメントに入れてました。

OLE DB、Accessになじみのある方には秒殺だと思いますが、僕は発想もなかったので書き残しておきます。
恐らく、OLE DB接続の方でパスワード処理に対応している接続先には、同じ手口が使えるのではないかと思います。

##読み取るaccdbについて
Accessのパスワードといっても、2種類あって、「以前の暗号化方式」でないとだめなのです。
「以前の暗号化方式」というのは下記のAccessのオプションにて設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/1497bc54-8c96-5f48-a034-8bf0e9c6c135.png)

##接続例
GUIの呼び出しは下記の画面から。接続文字列をそのまま貼りたい場合はその方が便利でしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/db069070-1413-111b-9e31-4f36e21b83e3.png)

僕は接続文字列自体に不慣れだったので、レコード型で探り探り書いたところ、下記ようなコードになりました。
この例でのパスワードは「abc」です。

```
let
    Source = OleDb.Query(
                    //いわゆる接続文字列。伝統的な、セミコロン区切りの文字列でも通ります。
                    [
                      Provider="Microsoft.ACE.OLEDB.12.0",
                      Data Source="C:\Users\Public\Documents\TestDatabase.accdb",
                      #"Jet OLEDB:Database Password" ="abc"
                    ],
                    //SQLを記述。下記程度のは通りました。文字列はシングルクウォートで。
                    "SELECT 仕訳帳.借方, Sum(仕訳帳.金額) AS 金額の合計
                     FROM 仕訳帳
                     WHERE 仕訳帳.日付<=#2015/12/31# AND 仕訳帳.借方>='500'
                     GROUP BY 仕訳帳.借方;
                    "
             )
in
    Source

```

一応、実行結果。データ型はAccessの通りですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/bf4be9f9-d18c-76e2-a615-9b60d57d4c65.png)


##テスト環境

- Office365のExcel（バージョン1911　ビルド12228.20250クイック実行） 
- 同じくAccess

なお、下記をインストール済みです。PowerShellからADO.NETで接続するのには必要だったので、入れていました。本件には必須ではないかもしれません。
[Download Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント from Official Microsoft Download Center](https://www.microsoft.com/ja-jp/download/confirmation.aspx?id=13255)


##おまけ：パスワードつきのExcelはどうなのか。
パスワードをクエリに入れとけば、接続できる――という例にはいまだお目にかかったことがありません。
調べた限り、OLE DBでもできないようです。
なので、現状は、VBAか何かで読み取り対象のブックを開いた状態で、クエリを実行するしかないようです。
ちなみに、Excelの書き込み専用パスワードだけなら、Power Queryは普通に接続できます。

##おまけ2：AdoDotNet.Query関数
Oledb.Query関数のみならず、こちらでも同様にパスワード付きのaccdbにアクセス可能です。
.NET Frameworkプロバイダの指定が増えるだけで、`connectionString`引数は上記の例と同様です。
当方、.NET Frameworkに詳しくないので、こちらを経由させる利点はよく分かりません。（検証も浅いです）

```
= AdoDotNet.Query("System.Data.OleDb",
                [
                 Provider ="Microsoft.ACE.OLEDB.12.0",
                 #"Data Source"="C:\Users\Public\Documents\TestDatabase.accdb",
                 #"Jet OLEDB:Database Password" ="abc"
                ],
              "SELECT * FROM t_単価")
```
参考
[AdoDotNet.Query - PowerQuery M - Microsoft Docs](https://docs.microsoft.com/ja-jp/powerquery-m/adodotnet-query)
ヒントが少なく、例すらないのは、使おうと思うような人ならどうせ知っているだろう、ということなのでしょうか。.NET Frameworkに親しんでいる人ならできるんでしょうけども…。

[.NET Framework データ プロバイダー - ADO.NET | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/data-providers)
Railsが動いてくれない。

rails newはなんとか動く。モデル作成その他が動かない。なんでや！

で、rails newした時によくよく見てみるとこんなんがある。

* bin/rake: Spring inserted
* bin/rails: Spring inserted

なんぞこれ。

調べてみると以前サーバーが起動しなかった時と同じ感じらしい。

```
$ ps ax | grep spring
11588 ?        Sl     0:00 spring server | anilova | started 1 hour ago
12708 pts/1    S+     0:00 grep --color=auto spring
```

11588が何故か動いてるのでこいつを消す。
一旦以下のコードで確認。

```
$spring status
Spring is running:

11588 spring server | anilova | started 1 hour ago
12283 [ruby] <defunct>
```
```
$spring status
Spring stopped.
```
これで11588は止まったはず。
もう一度確認。

```
$ spring status
Spring is not running.
```
```
$ ps -ef | grep spring
vagrant  12728 12631  0 05:53 pts/1    00:00:00 grep --color=auto spring
```


これで正常に戻った！
【備忘録】Windows 10にUbuntuをインストールするまでの手順

#1. Windows Subsystem for Linux（WSL）機能の有効化
- 設定＞Windowsの機能の有効化または無効化で「Windows Subsystem for Linux」を有効化
- Windowsを再起動


#2. Ubuntuのインストール
- Microsoft StoreでUbuntuを検索、インストール
- Ubuntuを起動、ユーザー名とパスワードの設定
- `sudo apt update`･･･インストール可能なパッケージ一覧をアップデート
- `sudo apt upgrade`･･･インストール済みパッケージを更新
- `sudo apt install task-japanese`･･･日本語関連パッケージのインストール
- `sudo dpkg-reconfigure locales`･･･ロケールを日本語に設定
- `exit`･･･Ubuntuを終了
- Ubuntuを再起動
- `sudo dpkg-reconfigure tzdata`･･･タイムゾーンをJSTに設定
- `sudo apt install man`･･･日本語ツールなどのインストール


# 参考文献
- [Windows10にはLinuxの実行環境をインストールできる](https://www.nokotech.net/lab/?p=1212)
- [WSLのDebian環境を日本語化する](https://www.atmarkit.co.jp/ait/articles/1810/26/news035.html)
UIImgaePickerControllerでビデオを撮ろうとすると強制終了する

ちょっと忘れないようにメモ


・エラー内容
プロパティに
Privacy - Camera Usage Description(カメラ) を設定したが
UIImagePickercontrollerのmediaTypeをビデオにして起動すると強制終了する

エラー文言
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.

対策
Privacy - Microphone Usage Description (マイク)の方もプロパティに設定すると強制終了しなくなった。

ビデオを撮るときににはマイクとカメラの二つの使用許可を撮る必要がある。

参考

[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです
http://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/
[Mac] Alacrittyで Ctrl-Q と Ctrl-[ がきかなかった話(ついでに自前ビルド手順)

# はじめに

先日、せっかくだからMacにも[Alacritty](https://github.com/alacritty/alacritty)を入れてみようかな～と思い、

```sh
$ brew cask install alacritty
```

でインストールしてさわってみていたところ、

「あれ、<kbd>Ctrl-Q</kbd>がきかない…？」

となり、調べて対応したメモです。


# 環境

- MacBook Air (macOS Catalina)


# Ctrl-Q

正確には、<kbd>Ctrl-Q</kbd>を2連打しないと、Alacrittyが<kbd>Ctrl-Q</kbd>の入力を認識してくれない、という症状でした。

私は<kbd>Ctrl-Q</kbd>をTmuxのプリフィクスキーに割当てていて、これは死活問題だぞ…と。

## 対応

とりあえずGitHubを見てみると、ちょうどドンピシャのissueがあがっていました。

- [Ctrl\+q not working · Issue \#1359 · alacritty/alacritty](https://github.com/alacritty/alacritty/issues/1359)

ちょうど2日前(2020/02/07)に解決されていたのですが、昨日の今日で[リリース](https://github.com/alacritty/alacritty/releases)に反映されているはずもないので、自前でビルドしました。


### Cargoのインストール

まずRustのパッケージマネージャ兼ビルドツールである[Cargo](https://github.com/rust-lang/cargo)を[こちらの手順](https://doc.rust-lang.org/cargo/getting-started/installation.html)に従いインストールします。


```sh
$ curl https://sh.rustup.rs -sSf | sh
```

インストールがすんだら、画面の指示に従いPATHをとおすようにして、


```sh
$ . ~/.bash_profile
```

でPATHを反映します。

### Alacrittyのビルド

続いて、[Alacrittyをビルド](https://github.com/alacritty/alacritty/blob/master/INSTALL.md#macos)します。

```sh
$ git clone git://github.com/alacritty/alacritty.git alacritty
$ cd alacritty
$ make app
$ cp -r target/release/osx/Alacritty.app /Applications/
```


## 動作確認

Alacrittyを起動し、<kbd>Ctrl-Q</kbd>を試しに押してみると、「動いた！！！」

…と喜んだのも束の間、今度は「あれ、<kbd>Ctrl-[</kbd>動かなくね…？」ということで次に続きます。


# Ctrl-[

どの環境でも、というわけにはいきませんが、<kbd>Escape</kbd>は<kbd>Ctrl-[</kbd>で代替することができます。私も環境が許してくれれば、ホームポジションから遠い<kbd>Escape</kbd>の代りに<kbd>Ctrl-[</kbd>を使います。

AlacrittyでVimを立上げ、INSERTモードからNORMALモードに戻ろうと<kbd>Ctrl-[</kbd>を押すと、今度は「あれ、モードが変らねえ…。」
一方<kbd>Escape</kbd>を押すと、ちゃんと認識してNORMALモードに戻ってくれました。


## 対応

[`~/.config/alacritty/alacritty.yml`](https://github.com/alacritty/alacritty/blob/master/alacritty.yml#L536)の最下部にキーバインド例が載っており、これを参考にして<kbd>Ctrl-[</kbd>を<kbd>Espace</kbd>に置換えるキーバインドを追加します。

```yaml:alacritty.yml
# ↓のコメントアウトをはずす
key_bindings:
  # (Windows, Linux, and BSD only)
  #- { key: V,        mods: Control|Shift, action: Paste            }
  #- { key: C,        mods: Control|Shift, action: Copy             }
  #
  # ...(中略)...
  #
  #- { key: Home,      mods: Shift,   action: ScrollToTop,    mode: ~Alt       }
  #- { key: End,       mods: Shift,   action: ScrollToBottom, mode: ~Alt       }
  #
  # ↓以下を追記
  - { key: "LBracket",       mods: Control,   chars: "\x1b" }
```


### 動作確認

Alacrittyを起動して<kbd>Ctrl-[</kbd>を試しに押してみると「動いたぞ！！！」

ということで、めでたし、めでたし。


# おわりに

そのうちHomebrewやリリースにも反映されるだろうと思います。<kbd>Ctrl-[</kbd>の方は、私の環境依存の問題かもしれないですが、お困りの方がいたら取り急ぎの策ということで、ご参考になれば幸いです。
unityの勉強を兼ねて、STGを作ってみた


コロナです。
今回はUnityの新しくなったインターフェースやプログラムの勉強を兼ねてSTGの学習を始めました

目的
ゲームのジャンルを簡単なものにして、エンジンやプログラムそのものの学習に集中するため

# 一人開発の流れ

1.ネタを考える
実際の開発期間は年末年始だったのでテレビやニュースからネタを考えたり

2.自分で動画撮影や操作をしながら志向作成
実際の動画について一つの例
URL [https://www\.youtube\.com/watch?v=3uZDPFH\-Cpg](https://qiita.com/drafts/f699015a480e99b11fbf/edit)
# ひな形まで作成
以下の３点について、作成できたので年を越したものの
・キャラクターを動かす
・武器を発射する
・敵が出ている

[https://unityroom\.com/games/happy\_gone](https://unityroom.com/games/happy_gone)


# これからの課題
unityroom側に書いてあるissueの消化
PRをもらえたら適宜マージ

# 2020/11/16 更新
unityroomのissue対応

1.当たり判定を追加して、スコアを加算
2.エディタ側で、敵キャラクターの速度や当たり判定を調整できるように
![サリー(sakuriver)@FF7Rとデススト攻略、ドラクエ3中さんはTwitterを使っています 「HappyNewYear is Gone 強さとかパラメータ調整してなかったので、エディタカスタマイズってました(_･ω･) https___t.co_AYwoECBeLQ」 _ Twitter および他 9 ページ - 個人 - Microsoft​ Edge 2020_11_16 21_59_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45396/919b0e72-4654-97a9-e723-6732e8251b65.png)


https://twitter.com/sakuriver/status/1324879238537773056?s=20
【チェリー本】なぜ (~0b1010).to_s(2) #=> "-1011" なのか

## はじめに

<a href="https://www.amazon.co.jp/プロを目指す人のためのRuby入門-言語仕様からテスト駆動開発・デバッグ技法まで-Software-Design-plusシリーズ/dp/4774193976/ref=tmm_other_meta_binding_swatch_0?_encoding=UTF8&qid=&sr=" target="_blank">チェリー本</a>の2章2.9.2のビット演算のところ、サラっと解説してありますけど、n進数の知識が曖昧な人が見ると結構理解が難しいと思うんですよね。特に次の部分。

```ruby:『プロを目指す人のためのRuby入門』より抜粋
# 以下はビット演算を行う例です（結果を2進数で確認できるように、to_s(2)を呼び出しています）。

(~0b1010).to_s(2)    #=> "-1011"
```

`“~”(チルダ)` は**ビット反転**を表すようです。

ビット反転ってのは単純に2進数の01を反転させる操作なんで
`(~0b1010).to_s(2)`ときたら、`"0101"`になると思うじゃないですか！
しかし、irb上で実際に返ってくるのは**`"-1011"`**とのこと。

初めてこれを見たときには頭を抱えましたが、色々調べてみる中でどういうことなのか理解しましたので、ここに記録を残しておきます。

ちなみに前提として、**n進数に関する基本的な知識**が必要です（基本情報処理技術者試験の参考書とかで勉強できます。）

## (~0b1010)

まず、`(~0b1010).to_s(2)` の `(~0b1010)` の部分ですが
こちら側は4桁の2進数を入力したつもりでも、**コンピュータ上だと実際には`0...0001010`のような4桁以上のビット数の値として取り扱われていること**を理解している必要があります。

それを踏まえた上で `“~”(チルダ)` に従い `0...0001010` をビット反転すると、`1...1110101`となります。
（※ 実際には irb 上だと0b表記の2進数は自動的に10進数に変換されるので、`(~0b1010)`は`-11`が返ってきます。しかし結局は`-11 == 1...1110101`ですし、ここでは2進数として考えたほうが都合が良いのでそうします。）

つまり`(~0b1010).to_s(2)`という式は
`1...1110101`に対して`to_s(2)`メソッドが呼ばれていると考えられますね。

## to_s(2)メソッド

ここでもう一つ大事なポイントは、`to_s(2)`メソッドが
**正負を符号ビットで表さない、つまり負の数をマイナス記号で表す2進数**として数値を文字列に変換する点にあります。~~もっと別の言い回しがなかったかなと考えております。~~

そして`1...1110101`は2の補数表現（負の数）であります。

つまり今回の場合、`to_s(2)` メソッドは `1...1110101` を `-XXXX (Xには0か1が入る)` のように**マイナス記号がついた4ビットの2進数**になるように変換します。

要は `1...1110101` を一度正の数に変換したあとマイナス記号をつける、という感じになりますね。

## よって "-1011"

`1...1110101`は2の補数表現（負の数）ですが、これに対して更に2の補数を求める操作を行えば、裏返って正の数になります。`0...0001011`です。

そんで5桁目以降の0を省いて、元は負の数ですのでマイナス記号をつけ、さいごに文字列に変換してやれば....

＿人人人人人人人人人＿
＞　**"-1011"**　＜
￣Y^Y^Y^Y^Y^Y^Y^Y￣

## 以上です
以上です。なんか間違ってる部分あったらご指摘お願いします。