OmniAICreator/Qiita-1.07M huggingface dataset:
未経験でもアジャイルソフトウェア開発技術者検定試験Lv.1は合格でき、、る！



先日アジャイルソフトウェア開発技術者検定試験Lv.1を受験し、
なんとか合格できたのでその体験記を記載できればと思います。

#(参考)私のプロフィール
・SI会社3年目
・実業務で開発はしておらず、どちらかというとコンサルやPMO？寄り
・業務外でのRails開発経験あり（そっちのほうにキャリアチェンジしたい）
・アジャイルについては社内E-learningなどで少し聞いたことがある程度

受験の動機としてはAgile開発の勉強の手始めに何か資格が欲しいな、、くらいです。

#アジャイルソフトウェア開発技術者検定試験とは
##テスト概要
アジャイルに関する基本的な知識を問う、認定資格です。
公式HP：http://agilecert.org/

Lv.1とLv.2が存在し、今回私が受けたのはLv.1。違いはこんな感じ。
・Lv.1：まさに初心者向け。
・Lv.2：Agileチームメンバーとしての必須知識を問われる、とのこと。

##テスト形式
CBT（Computer basis test）を採用。60分60問4肢択一スタイル。
テストセンターみたいなイメージです。申し込みは以下から。
※最短でも5日後からの申し込み
http://it.prometric-jp.com/testlist/agile/index.html

##受験料
10,000円(税別)べらぼうに高くはない？です。

##合格率
80％以上の正解率で合格。私はなんとか85％でした。


#テスト対策
期間：2週間（計12h程）
やったこと：2冊読書と気になった点はメモ。直前に振り返り

##1週間目（約4~5時間）に読んだ本：
[わかりやすいアジャイル開発の教科書](https://www.amazon.co.jp/%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E8%A5%BF%E6%B2%B3-%E8%AA%A0-ebook/dp/B00GJGOPLO/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB+%E6%95%99%E7%A7%91%E6%9B%B8&qid=1563862376&s=gateway&sr=8-1)
初心者にぴったり。HPにも公式教材として認定されています。
ざっと読む感じであれば1~2hで読めるかと。（冗長的な内容が多い気はします・・・）


##2週間目（約4~5時間）に読んだ本：
[アジャイルサムライ　達人開発者への道](https://www.amazon.co.jp/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%A0%E3%83%A9%E3%82%A4%E2%80%95%E2%80%95%E9%81%94%E4%BA%BA%E9%96%8B%E7%99%BA%E8%80%85%E3%81%B8%E3%81%AE%E9%81%93-%EF%BC%AA%EF%BD%8F%EF%BD%8E%EF%BD%81%EF%BD%94%EF%BD%88%EF%BD%81%EF%BD%8E%EF%BC%B2%EF%BD%81%EF%BD%93%EF%BD%8D%EF%BD%95%EF%BD%93%EF%BD%93%EF%BD%8F%EF%BD%8E-ebook/dp/B00J1XKB6K/ref=pd_sbs_351_2/355-3122554-7380714?_encoding=UTF8&pd_rd_i=B00J1XKB6K&pd_rd_r=6330c539-2f01-4d9b-a2d0-a8802da7c24c&pd_rd_w=FMQCy&pd_rd_wg=0j2hJ&pf_rd_p=ad2ea29d-ea11-483c-9db2-6b5875bb9b73&pf_rd_r=FRDMK8G15K4HTWSJJN9G&psc=1&refRID=FRDMK8G15K4HTWSJJN9G)
1冊目を踏まえて、より細かい内容を学習できます。
題名の通り、サムライが出てきます。（笑）


##テスト直前(約1~2時間)：
参考書2冊をざっと読んで、メモも確認して、家の近くのテストセンターへ。

#テストを受けてみて
試験時間は60分でしたが、私は見直しも含めて50分もかからず終了しました。
難易度もそれほど高くはないかと。
（既にアジャイル開発経験のある方にとっては、余裕だと思います。）

これからアジャイルに手をつけたい！という人にはお勧めです。
Mac から MySQL を本当に削除する

### アンインストール

まずは brew から削除。

```sh
$ brew uninstall mysql
```

### ローカルのディレクトリを削除

brew から消すだけでは駄目。ローカルのディレクトリも消してあげよう。

```sh
$ rm -rf /usr/local/var/mysql
```
【WPF】System.Windows.Interactivityがない！

`エラーCS0234 型または名前空間の名前 'Interactivity' が名前空間 'System.Windows' に存在しません (アセンブリ参照があることを確認してください)。` が出た！

現象
---

以下のエラーメッセージでコンパイルができない･･。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/92fe5b2c-7a64-badc-0fc0-8b00fe237d03.png)

参照にはあるのに！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/d6708ae8-3723-9ea6-12ea-49461bd7d547.png)

`Microsoft.Xaml.Behaviors.Wpf 1.0.1` に変更されたらしい。Nugetで以下のパッケージを導入。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/dbaf6476-e27a-83ef-1f66-133ca83c7b52.png)

### 名前空間
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419037/64d886c0-1f5f-6a05-f510-7fdd103e1882.png)

### XAML側
http://schemas.microsoft.com/expression/2010/interactivity
↓
http://schemas.microsoft.com/xaml/behaviors に一括置換

上記内容で基本的なところは直ります。
EC2 で Amazon DocumentDB を使う

## mongoシェル をインストール

以下のコマンドを EC2 実行します。

```bash
echo -e "[mongodb-org-3.6] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc" | sudo tee /etc/yum.repos.d/mongodb-org-3.6.repo 

yum install -y mongodb-org-shell
```

https://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/getting-started.connect.html

## mongoシェル の動作確認

```bash
wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

mongo --ssl --host xxx.ap-northeast-1.docdb.amazonaws.com:27017 --sslCAFile rds-combined-ca-bundle.pem --username your_name --password your_password
```

※ `xxx.ap-northeast-1.docdb.amazonaws.com` の部分は、DocumentDB の クラスターのエンドポイントを入力する。
※ `your_name` は DocumentDB を作成したときのユーザー名を入力する
※ `your_password` は DocumentDB を作成したときのパスワードを入力する

## php-pecl-mongodb をインストールする

★ remi リポジトリから php がインストールしてある状態

はじめは、以下コマンドで実行しました。

```bash
yum install --disablerepo=amzn-main --enablerepo=remi-php70 php-pecl-mongodb
```

が、 `scl-utils` がないというエラーが表示されるので、先にパッケージを追加します。

```bash
rpm -Uvh ftp://ftp.scientificlinux.org/linux/scientific/6.4/x86_64/updates/fastbugs/scl-utils-20120927-8.el6.x86_64.rpm
```

再度、以下コマンドを実行しました。

```bash
yum install --disablerepo=amzn-main --enablerepo=remi-php70 php-pecl-mongodb
```

が、 `snappy` がないというエラーが表示されるので、 `--disablerepo=amzn-main` を削除して実行します。

```bash
yum install --enablerepo=remi-php70 php-pecl-mongodb
```

## php-pecl-mongodb の動作確認

```php
$dns = 'mongodb://your_name:your_password@xxx.ap-northeast-1.docdb.amazonaws.com:27017/?replicaSet=rs0';
$urlOptions = [
    'ssl' => true
];
$driverOptions = [
    'ca_file' => '/path/to/rds-combined-ca-bundle.pem'
];

$manager = new \MongoDB\Driver\Manager($dns, $urlOptions, $driverOptions);

$bulk = new \MongoDB\Driver\BulkWrite;
$bulk->insert(['name' => 'qiita']);
$manager->executeBulkWrite('database_name.collection_name', $bulk);
```

以下を設定すると、エラーログにデバッグ情報が出力されるので、接続できない場合などに何や役立つかも・・・

```php
ini_set('mongodb.debug', 'stderr');
```

## 公式ライブラリを使う

```bash
composer require mongodb/mongodb
```

```php
$dns = 'mongodb://your_name:your_password@xxx.ap-northeast-1.docdb.amazonaws.com:27017/?replicaSet=rs0'
$uriOptions = ['ssl' => true];
$driverOptions = ['ca_file' => '/path/to/rds-combined-ca-bundle.pem'];

$client = new \MongoDB\Client($dns, $uriOptions, $driverOptions);
$db = $client->selectDatabase('database_name');
$collections = $db->listCollections();
```


## ローカルマシンからの接続（GUI）

`MongoDB Compass` であれば、 SSH接続でEC2踏み台経由 & SSL証明書 で接続ができました。
【Laravel/Bitbucket】Laravelをbitbucketにgit リポジトリ作成して、別の場所にクローン作成まで


AmazonLinux2上に、Laravelのプロジェクトを構築しました。
[AmazonLinux2でLaravelの開発環境構築](https://qiita.com/h19e/items/02d1301d4fdd8dfa88ac)

そのLaravelプロジェクトを別の場所にクローンするまでの手順のメモです。

まずは、gitをインストール

```terminal
$ sudo yum install git
```

##git configの設定
一度やれば、OK。

```terminal
$ git config --global user.email "メールアドレス"
$ git git config --global user.name "ユーザー名"
```

## Bitbucketでリポジトリ作成
リポジトリ名を munakata.net と仮定


##既存プロジェクト内に移動して、Bitbucketへpush

```terminal
$ cd ~/html/blog
$ git init
$ git add *
$ git commit -a -m 'init'
$ git remote add origin git@bitbucket.org:ユーザー名/munakata.net.git
$ git push -u origin master
```

##クローン作成

```terminal
$ cd ~/html
$ git clone git@bitbucket.org:ユーザー名/munakata.net.git
$ cd munakata.net
$ composer install
$ chmod -R 777 bootstrap/cache
$ chmod -R 777 storage
```

##ログの出力変更
ブラウザ経由でエラーが出た時と、ターミナル経由でエラーが出た際に、ログの権限が変わってしまうと面倒なので、下記で対応


```php:config/logging.php
'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel-' . php_sapi_name() . '.log'),
            'level' => 'debug',
            'days' => 14,
        ],
```

##Virtual Hostの設定

```apache:vhost.conf
<VirtualHost *:80>
    DocumentRoot /home/munakata/html/munakata.net/public
    ServerName munakata.net
    ServerAlias munakata.net
    <Directory "/home/munakata/html/munakata.net/public">

        #.htaccessを利用可能にする
        AllowOverride All

        # Laravelで利用する環境変数を development に設定
        SetEnv APP_ENV development

        #アクセス許可
        Require all granted


    </Directory>
</VirtualHost>
```

httpdの再起動

```terminal
$ sudo systemctl restart httpd
```
Raspberry Pi3 + Chromium + seleniumで自動化

# 緒言
Raspberry Pi 3にseleniumをインストールしたので、その備忘録です。
いささか記述したコマンドが少なく、抜けがあるかもしれません。
Chrome 64bit版をインストールできないので、Chromiumを代わりに使います。

# インストール
```bash
sudo pip3 install selenium
sudo apt-get install chromium-chromedriver
sudo apt-get install fonts-ipafont-gothic fonts-ipafont-mincho

```

# Pythonによる実行
コード例

```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-


from selenium import webdriver

driver = webdriver.Chrome() 
driver.get("https://www.google.co.jp/")

```

# 参考
[Raspberry pi3上でChromeのheadlessモードによる小型低電力＆自動化環境への第一歩](https://qiita.com/yhoriuc1/items/35bcc6ee5b87c0e4bdf3)
robocopyで転送先が見つからなくなる問題が発生する場合の対応

#1.運用の中で発生したこと
 * ルータ越えするディレクトリへのファイル転送でデフォルトだと時々エラーが発生していた、（以下のようなメッセージ）

2019/07/23 14:22:25 エラー 53 (0x00000035) ファイルをコピーしています D:\hoge\hoge-hoge\pdf_hoge\out\image\2019hoge_001_185_038.jpg
ネットワーク パスが見つかりません。

hoge秒 待機しています... 再試行しています...

#2.Robocopyのコマンドの調整
 * 下のコマンドの「/R:」でリトライを設定しますが、ネットワークの設定が機能しなくなった時に、デフォルトの待機時間では復旧しない場合もあり、その場合は「/W:」で待ち時間を調整します。下のコマンドみたいな感じ。


robocopy D:\hoge\hoge-hoge\pdf_hoge\out m:\CATALOGUE /S /Z /DCOPY:T /MAXAGE:7 /R:5 /W:120 /TEE /LOG:D:\hoge\hoge-hoge\robocopy_本番へ.log /NP
【JavaScript修行】初めてのwebpack4

webpackがわからない〜
webpackのプラグインを使うとmoment.jsが軽くなるらしいが、webpackがわからない〜
ということで勉強します。

##webpackをダウンロード
###そもそもwebpackとは？
https://ics.media/entry/12140/
こちらでちょっと勉強しました。
ファイルやモジュールをまとめる（バンドルする）のが主な仕事のようです。

https://qiita.com/cheez921/items/266b1b4534b6111a9686
こちらを参考にインストール作業をします。

ダウンロードするにはnode.jsが必要です。
node.jをダウンロードした上で

```
npm init
```

をターミナルで入力し、聞かれた項目に答えて行きます。
（package.jsonについては割愛します）

```
$ npm install --save-dev webpack
```
そしてこのコマンドを入力して、現在のディレクトリにwebapckをダウンロードします。
すると`node_modules`という色々入ったフォルダと`package-lock.json`というファイルが生まれました。

先ほどの参考サイトの通りに以下のようにファイルを作成します。

>```
webpack-demo
│  index.html
│  package.json
│  webpack.config.js
└─ src
    ─test.js
└─ node_modules
```

##webpack.config.jsって？
webpackの色々な設定ができるファイルになります。

>```javascript
const path = require('path');
module.exports = {
    mode: 'development',
    entry: "./src/test.js", //ビルドするファイル
    output: {
        path: path.join(__dirname, 'dist/js'), //ビルドしたファイルを吐き出す場所(絶対参照)
        filename: 'bundle.js' //ビルドした後のファイル名
    },
        module: {
        rules: [
              //loader
        ]
    }
};
```

こんな風にしましょうって書いてます。ムムム、どういう意味なんでしょうか。
https://qiita.com/one-kelvin/items/b810aafb6b5ef90789a3
https://qiita.com/soarflat/items/28bf799f7e0335b68186
この辺りを参考に。

**mode**・・・develop,production,nonの３つが指定できて、色々な設定が有効になる。
**entry**・・・ビルドを始める際の開始地点のjs
**output**・・・どこにどのように吐き出すのかの指定（path:どこに filename:どの名前で
**rules**・・・JavaScript以外を処理できるようにする処理（test:正規表現で拡張子を指定し、処理するファイルを定める。use:testで指定したファイルの依存関係などがbundleファイルに加えられるよう変換)
**plugins**・・・ファイルの最適化や環境変数の設定など、色々できる。

何となくここに書かれてるコードの意味がつかめました。
では実際にバンドルやってみましょう。

##バンドルするぞ！

```javascript:inu.js
export default function inu(){
    console.log('わん');
};
```

```javascript:neko.js
export default function neko(){
    console.log('にゃー');
};
```

```javascript:test.js
import neko from './neko.js';
import inu from './inu.js';

neko();
inu();
```

inuとneko をtest.jsでよんでいます。
こいつをバンドルするぞ！
バンドルはターミナルで`webpack`と打てばいいそうです。

あれ、command not foundになる...

調べると、webpack4からは`webpack`コマンドを実行するにはwebpack-cliをインストールしないといけないようです。

```terminal
npm install webpack-cli --save-dev   　//ダウンロード
export PATH=$PATH:./node_modules/.bin    //パスを通す
```


改めて`webpack`のコマンドを入力すると...ちゃんとバンドルできました！
自分用メモ　GitHub



#リポジトリを複製
1回だけ

```
$ git clone https://github.com/kd2air/qiita
$ cd qiita
```

#ファイル変更後の登録
都度

#### 0. 状態チェック
```
$ git status
```

#### 1. ステージングエリアに追加
```
$ git add .
```

#### 2. ローカルリポジトリに登録

```
$ git commit -m "commit message."
```

#### 3. リモートリポジトリへプッシュ
```
$ git push -u origin master
```

#### 4. 同期確認(fetch & merge)
```
$ git pull
```
Cognos Analytics ダッシュボード 図形の利用

#ダッシュボードで図形の利用
ダッシュボードの任意の位置に、好きな図形やテキストを配置する手順を学びます。
<img width="960" alt="011.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/ffa29dae-793b-0e0c-de69-c11da049b781.png">


#手順
D2.Dashboardを開始点とする。

パワーポイントで良く使用する「吹き出し」のようなものを作りたいと思い、「ウィジェット」から、赤枠の「コールアウト」をドロップする。
<img width="857" alt="001.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/35ba9578-a22d-71ad-963e-401ca100b2c1.png">

「テキスト」を適当な場所に配置し、メッセージを入力。
<img width="596" alt="002.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/bfc09633-c598-30eb-8805-a375a921fe36.png">

このままだと吹き出しが透けているので、吹き出し内を色塗りしたい。
<img width="259" alt="003.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/1fe09cf0-38b3-85bf-3855-5c68a87d7fbd.png">

ちょっと原始的だが、四角形で埋める作戦とする。
<img width="523" alt="004.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/185fc76a-613b-7a38-f8c4-640a203d2f20.png">

四角形を選択した状態で、上の青帯の「プロパティ」アイコンを選択すると、四角形の細かな表現指定ができるので、塗りつぶし色を変更する。
また、四角形のサイズは、右下をつかんで引っ張る事で変更できる。
<img width="677" alt="005.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/0df364c3-9f4d-1d38-a434-a379235ca1b2.png">

サイズ・色を変更した四角形を、吹き出しに置いてみる。
どうやら前後の順番の指定が必要な事がわかる。
<img width="150" alt="006.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/3c0b7e6a-a6d4-b284-5ab9-1fa030e57f1b.png">

四角形を選択すると表示されるメニューで「背面へ移動」。
<img width="88" alt="007.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/ce842147-e13e-91e3-902a-b1dc3e98767d.png">

問題なさそうな表示となる。
<img width="88" alt="008.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/7e39e74a-1696-8263-102c-00f56cdd0fa3.png">

Ctrlボタンを押しながら「テキスト」「四角形」「コールアウト」を選択し、「グループ」アイコンを選択。グループ化される。
<img width="128" alt="009.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/ad7e9ebc-f040-4690-7f10-a9c45b575fbb.png">

完成した吹き出しを好きな位置に配置。※前後の指定は、グラフやクロス集計との間でも可能。
<img width="538" alt="010.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/603b4ed7-7983-3e97-b9e6-7756a936ffca.png">

このように、パワーポイントと似た操作感で、ダッシュボード上に図形や線の配置を自由に行う事ができる。


#自己学習記事一覧
**Cognos Analytics をエンドユーザーの方に自己学習して頂くためのサイト**
https://qiita.com/shinyama/items/95885c7246dc413b6448
本版のQiitaみたいなサービスを立ち上げた

## 本をベースに独学時のつまずいたポイントを共有 - HITAMUKI
https://hitamuki.me

資格、受験、IT、経済、医療など様々な分野で独学している人が本をベースに情報を記録できる。

全部無料。

既存の読書ログサービスは、マークダウンに対応してないから作ってみた。
本の**つまずきポイント**が集約されれば、後から勉強する人にとって宝の山になるはず!

最終的に、本版のQiitaみたいなサービスになった。

## システム構成
### マークダウンエディタについて
マークダウンエディタは「tui.editor」を利用した。

https://github.com/nhn/tui.editor

マークダウンエディアは色々あるけど、「tui.editor」が一番組み込みやすかった。
なにより画像アップロードに簡単に対応できるのが素晴らしい。

### デザインについて
デザインはbootstrapのサンプル改造した。

https://startbootstrap.com/templates/

bootstrapに対する知識は全く無かったけど簡単に改造できた。

### 認証周りについて
フレームワークにLaravelを利用した。

https://laravel.com/

最新版の5.8を利用すれば基本的な認証周りが実装済み。
ソーシャル連携はsocialiteを利用した。

https://laravel.com/docs/5.8/socialite

あまりに簡単に実装できて感動した（笑）
はじめはfirebaseの利用を予定していたけど、カスタマイズ性が低くて却下した。

### データベースについて

aws RDSを利用した。
auroraは月額費用が高いから、mysql版を利用した。
MYSQLのバージョンは5.7。

https://aws.amazon.com/rds/

インスタンスタイプは「db.t3.micro」。
シングルAZ。
月額1500円くらいで済む。

### PHP実行環境について
aws ECSを利用してコンテナベースでプログラムが動いている。
PHPのバージョンは7.2。

https://aws.amazon.com/ecs/

Fargateは使わずにEC2で動かしている。
インスタンスタイプ「t3.micro」。
月額が900円。

## 高速化のために工夫した点

すべて基本的な対応。
HITAMUKIでは、グローバル・ネットワーク越しにレイテンシがトップページで52msと非常に満足な結果が得られた。

### OPcacheを有効にした

https://www.php.net/manual/en/book.opcache.php

OPcacheを有効にするだけでレイテンシが全然違う。

### PHPとmysqlの接続を永続化した

https://php.net/manual/en/pdo.connections.php

```
PDO::ATTR_PERSISTENT => true
```

このオプションを有効にする。
ベンチマークを取ると分かるが、コネクションを永続化しないとアクセスが増えた時にスムーズにスケールしない。

### マスター系の情報をローカルのmemcachedに保存する

データのキャッシュに「Amazon ElastiCache」とか使いたくなる。

https://aws.amazon.com/elasticache/

ただ、マスター系の情報はローカルにキャッシュするのが最速。
極力外部リソースの利用を避けた方がレイテンシが小さくなる。

よって、ECSクラスタインスタンスにnginxとphp-fpmと一緒に、memcachedのコンテナを同居させた。

### 外部リソースのアクセスを極力減らした
レイテンシを減らす上で重要なのが、極力mysqlへのアクセスを減らすこと。
例えばループで必要な情報を都度mysqlから取得するのは最悪。
そういうケースではin句を使って一括で情報を持ってくるべき。

ただし、注意しないといけないのが、ビジネスロジックをmysql側に持たせないこと。
ストアード・プロシージャーを使うと最悪。
メンテナンスコストが激増してしまう。

### laravelを本番環境にむけて最適化

[Laravel]デプロイ時の最適化
https://qiita.com/qiita-kurara/items/d37dbc5b67e6b6dfbe1d

### すべてのリソースを同じAZに配置する
日頃ゲーム会社でシビアなレイテンシを求められる。
awsを利用する際に、multi-AZを推奨されるがこれには落とし穴がある。
webサーバーとDBサーバーが異なるAZとだと、ベンチマークの時にはっきりとレイテンシが大きくなる。
最速を目指すのであれば、すべてのリソースは同じAZに配置すべき。

※ただし可用性は落ちる

## 今後の課題について

とりあえずサービスはローンチできた。
まだ利用者が全然いないから、今後はサービスを広げていく事にフォーカスしたい。
Goの開発環境構築

### Goのインストール
```
brew install go
```

### GOPATHの設定
Go言語の開発を行うワークスペースの場所を指定する。
どこに設定しても問題ない
`$GOPATH/bin`にgoのコマンドラインツールが配置されるのでパスを通す

```
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
```

### go getしてみる
`$GOPATH`を設定すると、`go get`で外部パッケージを`$GOPATH`配下にインストールできるようになる

GoのREPLである[gore](https://github.com/motemen/gore)というツールを入れてみる
ソースコードリポジトリを直接指定する

```
GO111MODULE=off go get -u github.com/motemen/gore/cmd/gore
```

`$GOPATH/src`には、ソースコードが配置される
`$GOPATH/bin`には、実行形式ファイルが配置される

### GoのREPLを使ってみる
```
$ gore -autoimport
gore version 0.3.0  :help for help
gore> fmt.Println("Hello World!")
Hello World!
12
<nil>
```

gocode、pp、godocも入れると補完や出力のハイライト、ドキュメントの参照ができるようになる

```
go get github.com/nsf/gocode
go get github.com/k0kubun/pp
go get golang.org/x/tools/cmd/godoc
```
Steinでお手軽データベース

# Steinとは

Google SpreadSheetをDBに見立てて、シートがtable、シートの列がcolumn、シートの行をレコードとして扱えるようになります。

## アカウントを登録してみる

[https://steinhq.com](https://steinhq.com)にアクセスして登録作業を行います。
プランがいくつかありますが、まずはフリープランで。
フリープランでもtableの作成は無制限、レコードは200行まで、月辺りのリクエスト数5000回使えます。

## DBを作る

Google SpreadSheetで一枚SpreadSheetを作ります。
シートの一行目が、カラムの定義になります。

| title | content | link | author |
|:--|:--|:--|:--|
|test|Hello World|https://steinhq.com|@kowloon|
|テスト|日本語も書ける|https://www.denkihitsuji.com|@kowloon|

このシートのURLをコピーしておきます。

## APIの登録

Steinに戻ってAPIを作ります。
Create a new APIで、先ほどのURLを貼り付けてCreate APIボタンをクリックします。
はい、完了。
SteinのAPI URL/シート名でtableにアクセスできます。
とりあえず確認したい場合、以下のURLを叩くとJSONで返ってきます。

```
$ curl [API URL]/シート名
```

こんな感じ。

```json
[{
	"title": "test",
	"content": "Hello World",
	"link": "https://steinhq.com",
	"author": "@kowloon"
}, {
	"title": "テスト",
	"content": "日本語も書ける",
	"link": "https://www.denkihitsuji.com",
	"author": "@kowloon"
}]
```

ということでDBの編集がGoogle SpreadSheetの操作だけで完結します。
次はもう少し踏み込んでDBの読み書きできるようにします。
PlayCanvasでモデルのBone一覧を取得して3Dモデルを動かす

スキンインスタンスを持っているエンティティの一覧を表示します

```javascript
pc.app.root.children[0].children.map(entity =>{
    if(entity.hasOwnProperty("model")){
	    return entity
    }}
).filter((_)=> _ ).filter(model => model.model._model.skinInstances.length)
```

Boneの一覧を取得し、Boneに対してポジションを変更することで、スクリプトだけでBoneを動かすことができます。

```javascript
const modelName = "base" //キャラクターの名前がbaseの場合です
const bones = pc.app.root.findByName(modelName).model.model.skinInstances.map((skinInstance) =>skinInstance.bones.map(bone => bone)).flat()
```

```javascript
Model.prototype.update = function(dt) {
    const bones = this.entity.model.model.skinInstances.map((skinInstance) =>skinInstance.bones.map(bone => bone)).flat()
    bones[2].setLocalPosition(0,20,20)
};

```

```javascript

 pc.app.root.children.map((child) => {
	if(child.model){
		return child.model
	}
}).filter(_ => _)
```


```javascript

 pc.app.root.children.map((child) => {
	if(child.model){
		return child.model
	}
}).filter(_ => _).map(charactor => {

   return charactor.model.skinInstances.map((skinInstance) =>skinInstance.bones.map(bone => bone)).flat()
}).flat()
```

<font color="OrangeRed">
PlayCanvas開発で参考になりそうな記事の一覧です。
</font>
<font color="OrangeRed">
入門

- [PlayCanvas入門- モデルの作成～ゲームに入れ込むまで](https://qiita.com/yushimatenjin/items/2a2c35fe7b1d08f9e361)
- [JavaScriptでスロットを実装する。【PlayCanvas】](https://qiita.com/yushimatenjin/items/e84c42da74df1eb07386)
- [3Dモデルのビューワーを3分で作る【初めてのPlayCanvas】](https://qiita.com/yushimatenjin/items/4b09c9e2076a0b2a6933)
</font>
<font color="OrangeRed">
応用
</font>

- [PlayCanvasのコードエディターでes6に対応する](https://qiita.com/yushimatenjin/items/a61a21c64c1c1a550dd4)
- [Gulpのプラグインを書いたらPlayCanvasでの開発がめちゃくちゃ便利になった](https://qiita.com/yushimatenjin/items/5f0f178e8a4ba4a5ee57)
- [PlayCanvas Editorに外部スクリプトを読み込む新機能が追加されたので開発方法を考える。- Reduxを組み込む](https://qiita.com/yushimatenjin/items/7a64220cceac66843d7d)
</font>
<font color="OrangeRed">
その他の記事はこちらになります。

- [React Native + PlayCanvasを使ってスマートフォンゲームを爆速で生み出す](https://qiita.com/yushimatenjin/items/7c7ad5d35473c11f32f2)
- [PlayCanvasのエディター上でHTML, CSSを組み込む方法](https://qiita.com/yushimatenjin/items/814b4a32db53397219df)
- [【iOS13】新しくなったWebVRの使い方 ](https://qiita.com/yushimatenjin/items/344d86b3d193e0a88567)
</font>

<font color="OrangeRed">
その他関連
- [PlayCanvasタグの付いた記事一覧](https://qiita.com/tags/playcanvas)
</font>


### PlayCanvasのユーザー会のSlackを作りました！
少しでも興味がありましたら、ユーザー同士で解決・PlayCanvasを推進するためのSlackを作りましたので、もしよろしければご参加ください！

[日本PlayCanvasユーザー会 - Slack](https://t.co/IdSRIfJhN5?amp=1)
Solaar をインストールする

# Solaar をインストールする

## はじめに

`sudo apt upgrade` を行ったら Solaar がうまく動かなくなったので、対策として手動インストールの方法を取り急ぎ共有します。
そのうち清書します。たぶん。

## 検証環境

- Ubuntu 16.04
- Logitech K780

## 手動インストール (おすすめ)

### インストール手順

1. 端末 (Terminal) を起動する。
2. [GitHub][01] からクローンする。

```shell
$ git clone --recursive https://github.com/pwr-Solaar/Solaar.git
```

<br>3. 正常に動作するコミットまで巻き戻す (今回の場合は "a597b81f5ac974ca681c1784e72867d502d39ecb") 。

```shell
$ cd Solaar
$ git reset --hard a597b81f5ac974ca681c1784e72867d502d39ecb
```

<br>4. (もしかしたら必要ないかも)

```shell
$ cd rules.d
$ sudo ./install.sh
$ cd ..
```

<br>5. インストールする。

```shell
$ sudo -H python3 setup.py install --record files.txt
```

### アンインストール手順

1. 端末 (Terminal) を起動する。
2. アンインストールする。

```shell
$ cd Solaar
$ cat files.txt | sudo xargs rm -rf
```

## APT を使用してインストール (現在はこの方法だとうまく動作しないものがインストールされる)

1. [Solaar の PPA][03] を追加する。

```shell
$ sudo add-apt-repository ppa:solaar-unifying/ppa
```

<br>2. インストールする。

```shell
$ sudo apt update
$ sudo apt install solaar
```

## 参考文献

1. [Solaar - Manual installation][02]
2. [Solaar git build : “Solaar” team][03]
3. [UbuntuでもK400 Plusのファンクションキーを有効にしたい - いくやの斬鉄日記][04]
4. [setup.pyを用いてインストールしたモジュールのアンインストール方法 - Qiita][05]

[01]: https://github.com/pwr-Solaar/Solaar
[02]: https://pwr-solaar.github.io/Solaar/installation.html
[03]: https://launchpad.net/~solaar-unifying/+archive/ubuntu/ppa
[04]: https://blog.goo.ne.jp/ikunya/e/cfebb6ba850c8f28f5f553c68583939d
[05]: https://qiita.com/orion46/items/dfe476067e499cca8535
GoogleForms  と GoogleSpreadSheet で一言コメント

偶々、身につけたプログラミング知識でなんとか世の中を泳いでおります。

ねぇコンピューター詳しいでしょ、
なんとかしてよと言う声が時々かかります。

お店のホームページへコメント欄が欲しい〜

知らないよ、そんなに詳しくないんですよ。
ええいめんどくさい。

GoogleFormsで投稿欄を作って
GoogleSpreadSheetに書き出して、読み込み権限で埋め込めば？
（見た目ダサいかな..?）
https://naruhodo.repop.jp/google-spreadsheets-iframe/

スプレッドシートをちょっとカラフルにして満足した様でした。

https://twitter.com/77_stratocaster
【VBA】オートシェイプにテキストを挿入する　

すでにあるオートシェイプにテキストを入れる方法。
なかなか見つからなかったので自分用備忘録。


```vb
' 変数
Dim strShapeName as String
Dim strText as String

' 図形の名前（決めておいてください）
strShapeName = "SampleShp1"
' テキスト
strText = "Sample Text"

' 本処理
ActiveSheet.Shapes.Range(Array(strShapeName)).TextFrame2.TextRange.Characters.Text = strText
```
【Eclipse】Gitのリモートリポジトリからローカルリポジトリを作成する（クローンする）方法

Eclipseで、Gitのリモートリポジトリをクローンし、ローカルリポジトリを作成する方法です。

##対象ツール
Eclipse（Neon;2016年版を使用）

##手順
1. プロジェクトエクスプローラーペインにて右クリックし、「インポート」 > 「Gitからプロジェクト」 > 「次へ」

2. 「URIの複製」> 「次へ」

3. 「ソースGitリポジトリー」にて、URI欄に対象のプロジェクトのURI（自分の名前の記載があるもの）を入力し、パスワードを入力して「次へ」
※その他の必要項目はURIを入力すると自動で入力される（左記と異なる場合は別途対応のこと）

4. 「ブランチ選択」にて、リモートブランチ一覧が表示されるので、確認して「次へ」

5. 「ローカル宛先」にて、内容を確認し、「次へ」（※デフォルトでは初期ブランチはmaster）

6. 「プロジェクトをインポートに使用するウィザードを選択」にて、「一般的なプロジェクトとしてインポート」を選択し（デフォルト）、「次へ」

7.「プロジェクトのインポート」にてプロジェクト名を確認し、「次へ」

## 備考
必要に応じて、プロジェクトのGradle化など、後続で必要な作業を実施すること
pymysqlのプレースホルダは数値と文字列を区別する

## 結論
Pythonでmysqlを使っていたらプレースホルダで躓いたので調べました。
結果はタイトルの通り。

直感的に数値は`%d`を使用しましたが、全て`%s`で良く、数値はクォートされずに展開されていました。

## 経緯

こんなコードでインサートを実行したら

```python
import pymysql as pm
import traceback

DATABASE = {
    'host': 'localhost',
    'db': 'test',
    'user': 'root',
    'password': 'test',
    'port': 3306,
    'cursorclass': pm.cursors.DictCursor
}

con = pm.connect(**DATABASE)
try:
    with con.cursor() as cur:
        sql = """
            insert into corporation (id, name)
            values (%d, %s)
            ;
        """
        cur.execute(sql, (1,'テスト会社'))
    con.commit()
except:
    traceback.print_exc()
    con.rollback()
finally:
    con.close()
```
「%dは数値入れろ、文字列じゃねーよカス（意訳）」と怒られたのでインターネットをグーグルしたら
issueに回答が書いてありました。
曰く、プレースホルダは`%s`で良く、数値か文字列か適切に展開してくれるとのこと。
[TypeError: %i format: a number is required, not str #329](https://github.com/PyMySQL/PyMySQL/issues/329)

```text
Traceback (most recent call last):
  File "<ipython-input-4-84616a96211d>", line 21, in <module>
    cur.execute(sql, (1,'テスト会社'))
  File "/home/sysman/.pyenv/versions/anaconda3-5.3.1/envs/script/lib/python3.7/site-packages/pymysql/cursors.py", line 168, in execute
    query = self.mogrify(query, args)
  File "/home/sysman/.pyenv/versions/anaconda3-5.3.1/envs/script/lib/python3.7/site-packages/pymysql/cursors.py", line 147, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: %d format: a number is required, not str
```

## クエリのエスケープ処理箇所
`%d`としていたところを`%s`に変更してデバッガで確認したら以下のように数値は数値として展開されていて、すごいなと思いました。（小学生並）

![cursors.py](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/2ed9f4eb-2111-a08c-56e3-00a03c5cc931.png)
![展開後のクエリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/3d6c7d2f-4116-b8e0-b977-199453a851e3.png)
Alibaba Cloud Linux 2.0 (Alinun Linux 2.0)って何だろう

Alibaba Cloud Linux 2.0 (Alinun Linux 2.0)の特徴って何だろうと漠然と思っていたので調べてみました。

Aliyun Linuxなんて見たことないという方は、ぜひAlibaba CloudにサインアップしてECS（仮想サーバサービス）でインスタンスを立ててみてください。

Alibaba Cloud Linux 2.0 (Alinun Linux 2.0) は2019年4月にリリースされました。
これまでは、Aliyun Linux 15, 16, 17とバージョンが上がってきたのですが、突如 2にバージョンが下がりました。

## 特徴

僕が気になる特徴を挙げてみます。

- Alibaba CloudのECS（仮想サーバサービス）に最適化されているため起動が高速で、マルチスレッド性能が向上されているうLinuxディストリビューション。
- CentOS 7.6系と互換性。
- Linux Kernelは4.19.24で、カーネルの独自のチューニングを実施済み。
- サポートされているインスタンスの仕様vCPUは1 vCPU〜160 vCPU、メモリサイズは0.5 GiB〜3840 GiB
- バージョンが2つ上がるまでセキュリティアップデートする。
- 2022年3月31日までサポート。3年間のサポートを提供。

やはり注目するところは、Linux Kernelは4.19.24でCentOSから入れ換えられている所なんでしょうが、良く理解できません。元の記事を読んでみてください。
CentOSベースなので僕的には扱いやすいですね。

誰もが分かるメリットは、ECSで起動が速く、マルチスレッド性能が向上しているそうなので是非使ってみてください。

## 同梱されているツール群

そして、Alibaba Cloudを利用するためのいくつかのパッケージがyumでインストールできるようになっており、アリババクラウドを活用する場合は便利そうです。

- Alibaba Dragonwell：Ali-JDKのオープンソース版で、2019年6月下旬にGA版をリリースしました。
- PouchContainer：Alibabaによって開発された効率的なコンテナエンジン。
- Dragonfly Client：オープンソースのP2Pベースの画像およびファイル配信システム。
- Tengine：Nginxをベースにした、多くの高度な機能と大容量Webサイトのニーズに追加された機能を備えたWebサーバ。
- Aliyun-cli：Alibaba Cloudリソースを管理するためのオープンソースツール。
- Ossfs：Alibaba Cloud OSSバケットをローカルにマウントするためのツール。
- eBCC：コミュニティ版のBCCの機能拡張。パフォーマンス分析ツール


さらに、BCCって何か分からなかったので調べてみたところ、


BCCは、4.xカーネルバージョンのeBPFに基づいて開発された一連のパフォーマンス分析ツールです。BCCは、その名前が示すように、拡張BCCの略語です。BCC自体のツールセットと、新たに開発されたツールセットの一部が含まれています。とのこと。

さらにさらに、eBPFって何だということで調べてみるとextended Berkeley Packet Filter の略で、 元々はパケットフィルタリング用に開発されたらしいですが、カーネル内部のフィルタリングにも広く利用されているものみたいです。

# まとめ

Alibaba Cloud Linux 2.0 (Alinun Linux 2.0)は、
CentOS7.6と互換性がある程度ありながら、Linux Kernel 4.19系を採用して、クラウドに最適化されたLinux ディストリビューションです。
Alibaba Cloudの各種ツールがRPMで提供されているためAlibaba Cloudを利用する場合に便利なようです。
機会があれば是非使ってみてください。

# 外部リンク

- オープンソース後のAlibaba Cloud Linux 2の新機能は何ですか？
https://zhuanlan.51cto.com/art/201907/600050.htm
- Aliyun Linux 2
https://help.aliyun.com/document_detail/111881.html
- eBCCパフォーマンス分析のベストプラクティス（0） - パフォーマンス分析の新しい章を開く
https://yq.aliyun.com/articles/697679
Introduction to AWS CodeBuild 和訳してみた

##はじめに
AWS Training and Certification にて紹介されている AWS Codebuild についての動画を和訳してみました。

このコンテンツへのアクセス方法については、[こちらに](https://qiita.com/Yoshiyuki03/items/bfbf416ab47ef5121927)記載しております。

##Introduction to AWS CodeBuild
###About AWS CodeBuild
それでは、AWS CodeBuild について紹介していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/e6e52612-dbd0-22ef-2445-580fdc5ae541.png)
AWS CodeBuild はフルマネージド型のビルドサービスです。サーバもソフトウェアも必要ありません。AWS CodeBuild はコードのコンパイル、テスト、パッケージングを行うビルドスクリプトを実行することができます。

AWS CodeBuild は、以下の特徴があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/891b79a6-2e9e-8179-860b-f52ca661dda4.png)

- フルマネージド型
- スケーリングが可能
- 拡大が可能
- セキュアな環境
- 継続的な統合とデリバリーが可能
- 従量課金

###How Does It Work?
AWS CodeBuild の仕組みについて紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/ec42c34b-b849-f866-1d4c-92b4a711352e.png)
AWS CodeBuild はユーザが環境を決め、そして構築を開始する必要があります。ユーザは、ビルド環境毎に実行するコマンドを選択したり、コンピュータタイプを選択したりする必要があります。AWS Code Build は継続的なスケーリングや、複数の構築を同時に行うことが可能です。

- ビルド環境を選択、あるいはユーザのビルド環境を準備する
 - Java、Python、Node、Android、Docker などから選択
 - ビルドの構成として自分のイメージを用意して作成

- ユーザ側で設定する項目
 - コードのロケーション
 - ビルド環境
 - ビルドコマンド

###Use Cases
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/3d801796-a2a9-c51b-8550-cecb73f2a10b.png)
AWS Code Build は複数のテストを同時に行ったり、ビルド環境をカスタマイズしたりする場合には、とても役立つサービスです。また、それ以外のユースケースとしては、以下の内容が考えられます。

- 準プロビジョンド環境を用意したい
- ユーザ自身のプロビジョン環境を用意したい
- 並列で複数のテストを実行したい
- 複数のビルド環境をまとめて実行したい


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/cbff312a-db8b-87e6-8bad-480e135ed5b4.png)
AWS CodeBuild の特徴をまとめまると、以下となります

- ソースコードをコンパイル
- テスト環境の実行
- コードのパッケージング化
- ハードウェアのマネージング、継続的なスケーリングが可能

##おわりに
AWS CodeBuild についての説明は以上となります。こちらのサービスを利用することで、ユーザにあったオリジナルのビルドツールを作成することができます。複数の開発やテストの実行にも役立つこちらのサービス、ぜひ利用してみて下さい。
最速の開発環境が欲しい。ストレージ編

開発をする上でPCの速度が速い方がストレスが少ないことは明白
ストレージが速ければOSの起動も大きなデータの入出力も快適になり
大変コスパの良い効率化になる
HDDからSSDにすれば速くなるが
そのあたりをもう少し詳しくみてみる


結果だけ知りたい人は、金があるなら大容量の NVMe M.2のSSDを買えばいいよ！
お金をもう少し節約したければ、下まで読んでね


#物理的なメディアの比較
ハードディスクより速いことは知っていると思うが実測するとすごい違いがある

##よくある3TBのHDD
![HDD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/ebab9a52-77a7-514a-cec2-44489fe5d8b6.png)

よくあるHDDだ。SSDと比較すると非常に遅い。。。
SATA接続なので、バスの転送量的には6Gbpsほどある

##2.5インチのSSD
![PCIESSD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/2e846f05-c0c9-a88b-4ed5-5d10add9b79b.png)

2.5インチのSSD。当然 SATAである
バスの転送量は6Gbps

##NVMe M.2のSSD

![NVMe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/63620a9e-5778-6597-36ab-7a3c6f0ea561.png)

SATAに比べても圧倒的に速い！（が、安物なので高級品よりはかなり遅い）
NVMeが差せるならNVMeを使うべき！
バスの転送量は40Gbps

##USB3.0 SSD
![USBSSD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/6b6b4594-8f21-23c8-1269-1c4bdf6c6752.png)

ちょっと古いSSDなので遅いのもあるが、SATAのSSDより多少遅いがそこまで差がない
バスの転送量は 5Gbps

#SSHD的なテクノロジ
SSDは上記でみたとおり、HDDに比べ2，3桁のオーダーで速い
ただ、HDDにくらべ容量も少なく値段が高い
ので、SSDの速度とHDDの安さを併せ持ったハイブリッドなディスクがある
要はHDDにデータをもち、SSDをキャッシュとして使うようなテクノロジだ

##SSHD
物理的にHDDにSSDがついている
OS問わず使える
SATAしかないので NVMeには速度は劣る

##FusionDrive
MacOS限定のソフトウェアによるハイブリッド
HDDよりは圧倒的に高速にはなるが
SSDと比較するとかなり遅い

##StoreMi
WindowsかつAMD限定のハイブリッド
NVMeの手前の速度まで出る
また、メインメモリをキャッシュに使うと恐ろしい速度がたたき出される

##ISRT
WindowsかつIntel限定のハイブリッド
ただし数年前からマザーボードから機能が削られている

##OptaneMemory
上記ISRTに代わる技術
WindowsかつIntel限定で、OptaneMemoryを装着する必要がある
OptaneMemoryは特殊なSSDで、SSDにくらべキャッシュ性に優れているらしい
SorteMiと同じぐらい、NVMeの手前ぐらいの速度まで出る


#容量による速度
SSDはチップごとに分散して書き込むことが出来るので、チップが多い方が書き込みが速くなる
＝ 基本的に容量の多いSSDの方が書き込みが速い
また、容量が多い方が書き込み寿命も長くなるため
お金に余裕があれば、容量が大きい方が良い


#まとめ
大容量のNVMe SSDが最も速い

デスクトップならOptaneMemoryやStoreMiでハイブリッドにしても十分

外付けUSB3.0でも十分な速度が出るので、ノートPCの容量足りない時にはそれでいい

M.2 NVMe SSD to USB3.1 Gen.2 という化け物外付けSSDもあるので高速な外付け欲しければどうぞ・・
iOSアプリ開発　FireBase

firebaseでの実装機能について、工数やかかる時間、難易度注意点を教えてください。


Swiftを用いて、チャット機能のついたアプリを開発、アップストアにリリースを目標に日々学んでいます。
FireBaseというものを知り、現在勉強しています。

まだfirebaseに関して言えば初心者です。
Swiftで簡単なアプリは作ることができます。

プログラミングをもっと極めて、一人でアプリリリースできるくらいになりたいと考えています。
教えてください、おねがいいたします！！
js readyState確認用コード

webページのローディング状況によってdocumentのreadyStateの値が変遷する

そこでreadystatechangeイベントを拾い、アラートで通知してみる

```javascript:check-readyState.js
alert(document.readyState); // -> 初回 'loading'
document.addEventListener('readystatechange', function () {   
  alert(document.readyState); // -> 2回目 'interactive'、 3回目 'complate'
});
```

以上。
PostgreSQLでcsvファイルのインポート

PostgreSQLでCSVデータのインポートについてささっと。


##事前準備(テーブル作成まで)

まずはDBを作成



名前は適当に**customer**。作ったらDB内へ入る

```terminal:terminal
sf213471118:~ sf213471118$ createdb customer
sf213471118:~ sf213471118$ psql customer
psql (11.4)
Type "help" for help.
customer=# 
```




以下の感じで**customerテーブル**を作っていく

####[テーブル]

|id|name|gender|age|
|:---:|:---:|:---:|:---:|
|10001|田中太郎|m|31|
|10002|中村花子|w|44|
|10003|佐藤一郎|m|20|
|10004|内田彩|w|18|
|10005|高橋次郎|m|56|
|10006|中里悟|m|34|


####[詳細]

|カラム|詳細|
|:---:|:---:|
|id|5桁の数字|
|name|桁数指定なしの文字|
|gender|男 --> m <br> 女 --> w|
|age|桁数指定なしの数字|





今回はDBを**UTF-8**で作成してあるので

```terminal:terminal
customer=# \l
                                List of databases
   Name    |    Owner    | Encoding | Collate | Ctype |   Access privileges   
-----------+-------------+----------+---------+-------+-----------------------
 customer  | sf213471118 | UTF8     | C       | C     | 
```
日本語を使用する今回は**1文字3バイト**をしっかり考慮する必要がある。




では早速テーブル作成






```terminal:terminal
customer=# CREATE TABLE customer
(id char(15) NOT NULL,
name varchar NOT NULL,
gender char(3) NOT NULL,
age INTEGER ,
PRIMARY KEY (id));
CREATE TABLE
```


##csvファイルをテーブルに全てをインポート

csvファイルを読み込む際はpsql内の`\copy`コマンドを使用する。

後ろについている`with csv`がcsvファイルをコピーする命令となっている。

```sql:terminal
# \copy <Table name> from <File name/pass> with csv
```

この`with csv`がないとただのtxtになるので注意。

今回はあらかじめ**customer.csv**を作成しておいたので、早速インポート。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426462/38c88789-9cf2-0270-0408-b44a68f2c7cd.png)




```sql:terminal
customer=# \copy customer from 'Documents/customer.csv' with csv
COPY 6
```

確認して格納されていることを確認。

```sql:terminal
customer=# SELECT * FROM customer;
       id        |   name   | gender | age 
-----------------+----------+--------+-----
 ﻿10001           | 田中太郎 | m      |  31
 10002           | 中村花子 | w      |  44
 10003           | 佐藤一郎 | m      |  20
 10004           | 内田彩   | w      |  18
 10005           | 高橋次郎 | m      |  56
 10006           | 中里悟   | m      |  34
(6 rows)
```


今回はヘッダー無しのパターンだったが、ヘッダーありのパターンの場合は`copy`コマンドのoptionが若干異なる。

例えば以下のようなcsvファイルを読み込む場合は
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426462/684f82e6-7890-d48c-0565-ebdebb787d32.png)

```sql:terminal
# \copy <Table name> from <File name/pass> with csv header
```

と`header`optionをつけることでインポートが可能になる。







##csvファイルの指定カラムのみをテーブルにインポート


指定カラムのみをインポートしたい場合にはテーブル名の後ろにカラムを指定すればOK


```sql:terminal
# \copy <Table name>(column1,column2, ... ) from <File name/pass> with csv
```


先ほどの例をベースにして`id`,`name`のみを指定して取り出すと


```sql:terminal
customer=# \copy customer(id,name) from 'Documents/customer.csv' with csv
```

となる。
[firebase] consoleからログイン、ログアウト

個人サービスでwordpressみたいなcmsを作った際、ログイン機能を自分しか使わなかったためログイン画面を作るのが面倒だった

以下、developer-toolsのconsoleからログイン、ログアウトするためのコード

```javascript:signin
firebase.auth().signInWithEmailAndPassword("yourEmail", "yourPassword")
  .then(user => {
	console.log("you logged in!");
  }, err => {
    console.log("you failed to log in");
  });
```

```javascript:signout
firebase.auth().signOut()
  .then(user => {
	console.log("you logged out!");
  }, err => {
    console.log("you failed to log out");
  });
```

以上。

追記：安全性に懸念があるとかあればどなたか教えていただきたし。
elmの関数合成を端的に

関数fを適用してから関数gを適用する

以下4つは同値。

```elm
g(f(x))
= (g << f) x
= (g << f) <| x
= g << f <| x
```

<< が <| よりも優先して処理される

以上。

#### 参考

https://qiita.com/mather314/items/1d5917b2b9f415d18372
メモのテンプレートを生成するシェルを作る

毎日、同じ内容のメモを書くときにコピー&ペーストするのが面倒なのでシェルでコマンドにしました。
コマンド名はcmにしています。

注意：　codeコマンドを使ってファイルをVSCodeで開くようにしています。
参考URL：　https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line


```sh
$ vim cm
```

```sh:cm
#!/bin/bash

set -e

function create_column() {
cat << EOS > $1/$(date "+%Y-%m-%d").md
## 今日の予定

- $(date "+%Y-%m-%d")

### タスク

- 

### 詳細

- 
EOS
}

if [ -z $1 ]; then
    DIR="$(pwd)"
else
    DIR="$1"
fi

if [ -e ${DIR}/$(date +%Y-%m-%d).md ]; then
    echo "[WARN] Already exit."
    exit
fi

create_column ${DIR}
code ${DIR}/$(date +%Y-%m-%d).md
```

```sh
$ sudo cp cm /usr/local/bin/
$ sudo chmod +x /usr/local/bin/cm
```

### ついでにVSCodeでtaskも作ってみる

VSCodeでtaskにして、コマンド一発で作れるようにします！
今回は`memo`ディレクトリにメモを追加します。

```sh
# VSCODEで開いているディレクトリ
.
|____memo
|____.vscode
   |____tasks.json
```

```json:tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "create memo",
            "type": "shell",
            "command": "cm",
            "args": [
                "memo"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
```

これで、`Ctrl + Shift + B`もしくは`Cmd + Shift + B`でビルドするとメモができます！

### 余談

todo treeを使うとすごく仕事がはかどります！
* https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree
【三日目】Unity でモブプログラミング [D01_DropCatch]

# 概要

今回、モブプログラミングで作成したのは、キャンディーをカバンでキャッチするゲームです。
なかなか企画が決まらなかったので DS のメイドインワリオなどで勉強して企画を練りました。
ここで重要なのはメイドインワリオを遊んでたわけでなく勉強していたことです。

# ゲーム内容

素材に苦しむのはイヤだったので準備できそうな題材にしました。
画面上部からキャンディーが落ちてくるので、
プレイヤーはカバンを横に動かしてキャッチします。
１つでも取りこぼすと即ゲームオーバーというシビアな難易度に。
それに反して見た目はカワイイファンシーなカンジなゲームになりました。

【タイトル画面】

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/8c1a33fe-2b80-b4ca-eceb-4cad7c29d588.png" width="50%">

【プレイ画面】

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/8aabcd37-013f-03a6-6407-8458a7b0380b.gif" width="50%">

【結果画面】

- ゲームオーバー




<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/464533d2-843f-155b-03d1-752988a6623f.gif" width="50%">

キャンディーが落ちていきます。

- クリア

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/30516c65-cce2-8401-f631-50238fa4b357.gif" width="50%">

クリアについてはキャンディーがバウンドして楽しいカンジにしています

# 難易度

最大同時に３つまでキャンディーが落ちてきます。横一列にキャンディが落ちてくるのでカバンを一気にスライドする形でキャッチする形になるため、これがとっても難易度が高いです。ただし、実際には取れないわけではないので、シビアな状況はそのままにしておきました。もし優しくするなら難しい配置はなくす形になりそうですね。

# 振り返り

- 素材はイイカンジのファンシーなモノが用意できたので良かった
- 現行の難易度だとシビアではあるが実装的にはかなりシンプル
- 難易度のチューニングをするとなるとキャンディーの出し方を考える必要があるかもしれない
- ただし、今回は時間内に整えれたので良かった
- ちなみに Android にもビルドして動いたので、その点も良かった！
【三日目】Unity でモブプログラミング [D02_CatDeffence]


# 概要

６月２９日（土）初心者～上級者まで集まってモブプログラミングでゲームを作ります。今回もみんなでゲームの企画を考えて、あーだこーだ言いながらゲームを作成しました。

# ゲーム内容

「いらすとや」さんのイラストからゲーム企画を考えてみました。可愛らしいネコがあったので、それを中心とした企画を考えることに。ネコを何かから守るようなディフェンスタイプのゲームを作成することになりました。何かから守る部分については、ちょうど「いらすとや」さんに雨の風景のイラストがあったので雨からネコを守るゲームに決定しました。

【タイトル画面】

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/9a308414-340d-b953-625e-5052f49934b7.png" width="50%">

【プレイ画面】


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/986fb9e3-5e62-2f63-f16e-296339de6ca3.gif" width="50%">

プレイヤーは傘を掴んで雨が当たらないようにネコの上に来るように操作します。傘から外に出てしまうとダメージ？を食らってしまい身体が赤くなっていきます。ダメージ？を食らい過ぎると・・・ゲームオーバーに。表示されている時間を守れればゲームクリアになります。

【ゲーム結果画面】


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/aef1fb1b-3154-ce82-e2f4-3dd80664839a.png" width="50%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/bb7cab54-4844-1f7e-1e37-5032aa87eead.png" width="50%">

こちらはシンプルです。ゲームオーバーについては真っ赤なんでお亡くなりなったんですかね？

# ゲームの仕組み

見た目的には雨からネコを守るゲームで上から降ってくるモノを傘で防ぐようにみえます。ただ、実際には傘とネコのそれぞれに当たり判定を設定し、それぞれの当たり判定が接触している状態なら雨から守れていることにしています。更に厳密にいうと傘の方が当たり判定が縦に長いため、ある程度ネコから離れてても雨から守れているという雰囲気を出すことができたと思います。ちなみに傘とネコが離れすぎるとネコにダメージ？が入ってしまいます。現実も傘を高くさし過ぎると雨に当たるので上手く表現できたかなと思ってます。

# ゲームの演出

上記の仕組みはゲーム性を見た目的に工夫したことになります。シンプルな実装でもプレイヤーのイメージに任せてゲームとして成立させてもイイんじゃないかなと。例えばファミコンのドラゴンクエストも正面に敵が出てくるだけですが、敵からダメージを受けると画面が震えて痛く感じてしまう・・・。実際には体力の数値が減るだけなんですが、震えたり体力が少なくなったりして黄色くなるだけで、伝わってくる情報は違ってくるのかなと思います。今回はそういう観点での１つのアプローチになったと思っています。

# 振り返り

- 素材からゲームの企画を考えるとスムーズ（「いらすとや」さんがイイ！）
- ゲーム性はシンプルだが周りのイラストなどで雰囲気などがイメージしやすい形になってよかった
- ネコにダメージ？が入るときに点滅する演出は、他で製作しているときのコードを流用できた。
- 「いらすとや」さんについてアプリにしたときに広告を出したりすると商用になるので注意が必要（商用は数が限られているらしい）
【三日目】Unity でモブプログラミング [D03_PetitBaseBall]

# 概要

モブプログラミングで１つのミニゲームを作る企画。今回のゲームはカンタンな野球ゲームを作成することになりました。

初心者だけの人が集まったため、実際にはモブプログラミングではなくハンズオン形式で作業をみてもらう形になりました。

# ゲーム内容

今回のゲームはカンタンな野球ゲームになります。参加者からはボール打ち返すシューティングゲームのようなものという企画内容からテニス？などのアイデアが挙がり、最終的には野球ゲームに落ち着きました。

【タイトル画面】

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/40099a28-a754-c567-67b0-fbc57ade4b63.png" width="50%">

【プレイ画面】

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/2e3eb5d7-d31d-beda-cf94-4e0a89b0f17f.gif" width="50%">

ボールを打ち損じるとアウトになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412322/82f8738c-dee9-8d8b-b488-c5db285a5858.png" width="50%">

上手く打ち返すとホームランになります。残念ながら打ち返すときの連続したスクリーンショットが取得できませんでした・・・。

# ゲーム性について

シンプルなゲームですが一定のゲーム性を設定しています。バットを振るのは一度のみのチャンスで、空振りするとボールを打ち返せないのでアウトになります。

またボールの打ち返す場所もファールとなる部分にあたるとアウト判定になり、打ち返す部分も塁の線より中に打ち返せばホームランになります。

# 具体的な実装内容

見た目は野球をしていますが、ボールには Rigidbody を設定しています。つまり、このゲームは落ちてくるゲームを打ち返す内容になっています。重力を使うことで打ち返す力などは Unity に任せることができます。ただし、ボールの速度が重力になっているので速度が速ければ速いほど打ち返しづらくなります。極端に重力を上げなければゲーム性を保てますが剛速球とかになると打ち返せなくなる可能性があります。

# 振り返り

- バットを振る仕組みが意外にハマって時間が掛かってしまった
- 物理的な動きを Rigidbody に割り切ったことで主要な部分は手早くできた
- 本当の野球ゲームを目指すなら速度をちゃんと管理すべきかもしれない
- Unity の機能を学習する意味においてはちょうどイイ教材になったと思える
パーシャルビューの呼び出し

renderでパーシャルビューファイルの呼び出しが、よく理解できなかったので、おさらい。
コードの中身はシンプルにしました。

```ruby:index.html.rb
<div class="contents row">
  <%= render @tweets %>
  <%= paginate(@tweets) %>
</div>

```

```ruby:_tweet.html.rb
<div class="content__post" style="background-image: url(<%= tweet.image %>);">
    <%= simple_format(tweet.text) %>
</div>

```

ツイート一覧(index)で、ツイートを並べる部分をパーシャルにして、renderで描画しているのですが、なぜ_tweet.html.rbを自動で認識してくれているのかが不明でしたが、


ざっくり説明すると、<%= render @tweets %>こう省略して記述ができ、Railsがrenderを使っているならpartialだろうな→同じフォルダの改装にtweetの名前をしたpartialないかなと勝手に探してくれるみたいです。

```ruby:index.html.rb
<%= @tweets.each do |tweet| %>
  <%= render :partial => "tweet", :locals => { tweet: tweet } %>
<% end %>
```
このようにrenderを省略せずに書くと、tweetのpartialとして_tweet.html.erbを呼び出しているし、その中でtweet:は@tweetsの中から一つづつ呼び出したtweetをさしていることがわかりました。
Illustrator で LaTeX のフォントを使う

LaTeXのフォントが格納されているディレクトリを以下をターミナルに打ち込んでみつける．

```
kpsewhich -var-value TEXMFDIST
```

表示されたディレクトリを$TEXMFDISTとする． CM* フォントは ``$TEXMFDIST/fonts/type1/public/amsfonts/cm`` に， MS* フォントは ``$TEXMFDIST/fonts/type1/public/amsfonts/symbols`` にある． これらのファイルを ``~/Library/Application Support/Adobe/Fonts`` にコピーする． Illustratorを再起動する．

## 参考ページ
- https://tex.stackexchange.com/questions/45256/how-do-i-edit-pdf-files-produced-by-latex-in-illustrator-fonts-are-not-found/306701#306701
- https://helpx.adobe.com/illustrator/using/fonts.html
Rubymineをcmd.exeから「mine .」で起動できるようにする方法

macos版のRubymineには、Toolsメニューからコマンドラインを追加するメニューがあったのですが、Windows版では無かったので自作してみました。

## `mine.cmd`の作成
Rubymineの実行ファイルとおなじフォルダーに以下のファイルを作成します。
（私の環境の場合は、`C:\Program Files\JetBrains\RubyMine 2018.3\bin` でした）

```cmd:mine.cmd
@echo off
"%~dp0\rubymine64.exe" %*
```

## PATHを追加
環境変数を新規追加し、作成したコマンドラインにパスを通します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883/c68b49a9-c05e-652b-49c6-6eb23905357d.png)

## 動作確認
cmd.exeを起動して、以下の状態になれば準備完了です。


```cmd
>where mine
C:\Program Files\JetBrains\RubyMine 2018.3\bin\mine.cmd
```

## つかいかた

適当なgemを取得してきて、`mine .`すると、Rubymineがカレントディレクトリを開いてくれます。便利 :+1:

```cmd
>git clone https://github.com/axgle/a.git
Cloning into 'a'...
remote: Enumerating objects: 76, done.
remote: Total 76 (delta 0), reused 0 (delta 0), pack-reused 76
Unpacking objects: 100% (76/76), done.

>cd a

>mine .
```
良さげリトライ機能の実装の仕方

Laravelのソースコードを呼んでいたら良さげなリトライ実装がされていたのでメモ

```
    function retry($times, callable $callback, $sleep = 0)
    {
        $attempts = 0;
        $times--;

        beginning:
        $attempts++;

        try {
            return $callback($attempts);
        } catch (Exception $e) {
            if (! $times) {
                throw $e;
            }

            $times--;

            if ($sleep) {
                usleep($sleep * 1000);
            }

            goto beginning;
        }
    }
```
蟻本の購入から読み始めまで

#はじめに
前回の記事 [プログラミング初心者がAtCoderに手を出し始めた話](https://qiita.com/flowerrr__lily/items/c8588c73744c4ec9897d) で初めてAtCoderに参加し、本格的に勉強しようと思った。

#蟻本とは
「競プロ 参考書」と検索すると一番はじめに出てくるもの。[プログラミングコンテストチャレンジブック](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%B3%E3%83%B3%E3%83%86%E3%82%B9%E3%83%88%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-%EF%BD%9E%E5%95%8F%E9%A1%8C%E8%A7%A3%E6%B1%BA%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E6%B4%BB%E7%94%A8%E5%8A%9B%E3%81%A8%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%E3%82%92%E9%8D%9B%E3%81%88%E3%82%8B%EF%BD%9E-%E7%A7%8B%E8%91%89%E6%8B%93%E5%93%89/dp/4839941068) (通称、蟻本) 
これですね。この界隈の超有名本らしいです。

#購入
早速買おうと思ったのですが、どうせなら重くないし検索とかコピペできるしPDF版が欲しい！ということで、調べました。いくつか選択肢があって


- [マイナビブックス](https://book.mynavi.jp/ec/products/detail/id=22672)
- [Amazon](https://www.amazon.co.jp/プログラミングコンテストチャレンジブック-第2版-～問題解決のアルゴリズム活用力とコーディングテクニックを鍛える～-秋葉拓哉/dp/4839941068)
- [達人出版会](https://tatsu-zine.com)

Amazonだと単行本3542円、Kindle版だとなんと1440円で買えます！
ただ、Kindleは読むのが可能な環境が限られるとか、DRM制限がかかってて少し不便...。

また、達人出版会というところから2880円でDRMなしのPDFも販売されているけれど、ページの最下部に購入者のメールアドレスが表示されるらしい。

ということで、**マイナビブックスでPDF版を購入。**2880円でした。これでも単行本よりはだいぶお得です。DRM制限なしでスクショも可能。各ページにメアドが表示されることもなく、とても便利！良い選択をしました。**マイナビブックスおすすめです！！**

#読み始め
##ウォーミングアップ
早速読み始め。PDF購入したのでその場でダウンロード、開くことができました。
最初の方はパラパラと。ウォーミングアップのとこから順に読み進めましたが、これが割と難しい！！！某有名な蟻の問題も、解法は知っていたものの、いざコードを書くとなると手が止まりました。ここはウォーミングアップページなので、あまり深入りせずざっと読んでコードを理解したら次に進むことに。
##初級編
続いて初級編。え、難しいです。いきなりストックとか、キューとか。どこが初級じゃ！と突っ込みたくなりました。ABCだとD, E問題レベルですかね。知らないコードとか出てきて、ちゃんと本腰入れて読まないと理解できません。。

   *勉強不足、、、*

##注意点
一つ注意したいのが、この蟻本にはAtCoderが想定されていません。まだAtCoderが有名になる前(できる前？)に書かれたので違うコンテストなどが紹介されています。
ということで、AtCoder上でジャッジできる問題に対応付けた練習が必要です。
[AtCoder 版！蟻本 (初級編)](https://qiita.com/drken/items/e77685614f3c6bf86f44)
はい、このページ。とても便利。
これ見ながら勉強することにしました :)

#終わりに
初めて見た触感、勉強の進捗はまた次回〜
単なるメモ(Label)

phinaのリファレンスからいちいち調べるの面倒だったので、こっちにまとめようと思います。
自分用のメモです。不確定な内容も多いので参考にはならないと思います。

#概要
Class名:phina.display.Label
SuperClass名:phina.display.Shape
#インスタンス(?)生成時指定できるプロパティ
##このクラスのプロパティ
**text**(*string*) : 出力する文字列を指定する(default: **'Hello, world!'**)
**fontSize**(*Number*) : 出力する文字のサイズを指定する(default: **32**)
**fontWeight**(*string*) : 出力する文字の太さを指定する(?)(default: **''**)
**fontFamily**(*string*) : 出力するフォント名を指定する(default: **'HiraKakuProN-W3'**)
**align**(*string*) : "left","center","right"で横の表示位置を指定する(default: **center**)
**baseline**(*string*) : "top","middle","bottom"で縦の表示位置を指定する(default: **middle**)
**lineHeight**(*Number*) : 行間を指定する(default: **1.2**)
**backgroundColor**(*Color*) : 背景色を指定する(default : **'transparent'**)
**fill**(*Color*) : 文字の塗りつぶしの色を指定する(default : **'black'**)
**stroke**(*Color*) : 文字の縁取りの色を指定する(default : **null**)
**strokeWidth**(*Number*) : 文字の縁取りの太さを指定する(default : **2**)
##親クラス(phina.display.Shape)で指定できるプロパティ
**shadow**(*Color*) : 影の色を指定する(default : **false**) 
**shadowBlur**(*Number*) : 影のぼかしの大きさを指定する(default : **4**)
##親クラス(phina.app.Object2D)で指定できるプロパティ(この辺からはわからないので検証してから後で直す)
**scale**(*Vector2*) : Label全体の拡大・縮小率を指定する(default : **null**)
~~**position**(*Vector2*) : ？(default : **null**)~~ ←指定不可でした
**rotation**(*Number*) : Labelの初期の回転角度を指定する(default : **0**)
**origin**(*Vector2*) : 基準点を指定する(default : **{0.5,0.5}**)

#インスタンス(?)から呼び出せるメソッド
*int* **calcCanvasWidth()** : 文字を表示した時の横幅を返す
*int* **calcCanvasHeight()** : 文字を表示した時の縦幅を返す

*void* **setX(** *Number* **)** : X座標を指定する
*void* **setY(** *Number* **)** : Y座標を指定する
*void* **setPosition(** *Number*, *Number* **)** : XY座標を指定する
*void* **setRotation(** *Number* **)** : 回転を指定する
*void* **setScale(**  *Number*, *Number* **)** : 拡大・縮小を指定する
*void* **setOrigin(**  *Number*, *Number* **)** : 基準点を指定する

他にもたくさんありそうですが、とりあえずこんなとこで。
確認取れたら更新します。

#参考リンク
http://phinajs.com/docs/source/label.html#phina-display-Label
http://phinajs.com/docs/source/shape.html#phina-display-Shape
http://phinajs.com/docs/source/object2d.html#phina-app-Object2D
http://phinajs.com/docs/source/displayelement.html#phina-display-DisplayElement
VisualStudio2019でMySQLデータセットを更新できない時は…

#またMySQLのデータセット関連で動かない…  

以前、visuldstudioを2013から2015にした時に↓記事を書いたのですが
[visualstudio2015 mysqlのデータセット作成時のエラー](https://qiita.com/y-tn/items/34921b37aaa40a23b424)
※後にVS2015からVS2017の更新への対応も追記

今回VS2019でもまたおかしくなりました…
VS更新する度に、毎回この問題で詰まってる気がする:cry:

毎度のことながら、データセットのTableAdapterを更新する際に発生

今回起こった事象は、毎回出ていた↓のダイアログだけではなく
![errer_dialog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149339/24fb722e-e092-9c94-4014-0f7a5e810240.png)
web.configの接続文字列すら取得してくれないというドイヒーなやつ:worried:
![webconfig_no.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149339/c8d45ab7-debe-2d5f-6519-68517ea25016.png)

#解決策は？
Google先生で検索したらこんなのを見つけました。
[StackOverFlow](https://stackoverflow.com/questions/55642848/mysql-visual-studio-2019-integration)

VS2019では、MySQL for VisualStudioとMySQL connector netのバージョンを上げろ的な？
VS2017までは逆に上げると動かなかったのに、なんでやねん。

まとめると

|   | MySQL for VisualStudio | MySQL connector net |
|:---|:---|:---|
| VS2019  | 2.0.5  | 6.10.8  |
| VS2017  | 1.2.7  | 6.9.8  |
| VS2015  | 1.2.7  | 6.9.8  |


ということでしょうか？
**ちょっと他の影響が怖くて、まだ私の方で試せていません:bow_tone1:**ので
また時間がある時に試してみます。

今回は**VS2017でデータセットだけ更新して**からまたVS2019で開発していくという手段で事なきを得ました。