OmniAICreator/Qiita-1.07M huggingface dataset:
しゃべるMobileNet作って見た！blogspotを開くだけ。

MobileNetに音声発生を接続してみた。
https://randomwalkjapan.blogspot.com/2019/10/aiai-tells-you-what-she-sees.html

テキストに音声がついただけなのに、見ていると、防犯、視覚障害支援など、いろいろな想像が湧いてくるのは不思議だ。

GitHubは次のリンクです。

https://github.com/tanakayutaka/YOLO-that-speaks/blob/master/index.html

問題点としては、iOS（ipadなど）Safariでは、videoと同時に利用するせいだとおもうけれど、音声がでない。今、回避策を調査中。


Linked MobileNet to speechSynthesis. Simple but now YOLO started to look like real. Also surprized that this simple change made me to have more concrete imagination on application such as security system or visual assistance aid system.

https://randomwalkjapan.blogspot.com/2019/10/aiai-tells-you-what-she-sees.html

GitHub is below. 


https://github.com/tanakayutaka/YOLO-that-speaks/blob/master/index.html
[メモ] Arduino Zero(atsamd21/ARM Cortex-M0)系のbootloaderのビルド


とりあえず、メモ。実機を入手したら、試す..(ので、まだ、ためしていない)


# 環境
- Windows 10 64bit
- Arduino: ---- (試す実機がない)

# 手順

1. 管理者で、PowerShellを開く(左下のWindowsアイコンを右クリックして、`a` を押す)
2. Chocolateyインストールし、git, make, arduino をインストール

    ```powershell:以下こぴぺ
    Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    cinst -y git make arduino
    ```
3. Arduino起動
    1. Tools > Board:"xxxxx" > Boards Manager... 選択
    2. "mkrzero"で検索し、[Install] (ARMのコンパイラなどいろいろツールがインストールされる)
    3. 待つ
    4. [Close]をおして、Arduinoも閉じる。

3. エクスプローラーで、適当に作業フォルダ(例: `C:\Dev`)を作って、右クリック=> Git Bash Here
4. bashにて、

    ```
    git clone https://github.com/arduino/ArduinoCore-samd 
    cd ArduinoCore-samd/bootloaders/zero
    ```
5. `make` でビルド開始(デフォルト:??)

6. タイプを指定したり、

    ```bash:mkrzero向け
    BOARD_ID=arduino_mkrzero NAME=samd21_sam_ba_arduino_mkrzero make
    ```

7. 全部ビルドしたり、できる

    ```bash
    . ./build_all_bootloaders.sh
    ```


# その他
サーバーの PHP バージョンは 5.3.29 ですが WordPress 5.2.4 は 5.6.20 以上のみでご利用になれます。への対策

「AmazonWebServices基礎からのネットワーク＆サーバー構築 改訂版」でハンズオンに挑戦中です。

良著ですがAmazonのレビューにもあるように、出版から時間が経っているので、そのままやるとハマります。

## 環境
- MacOS 10.14.6
- WordPress 5.2.4

## エラー内容

『8-3 WebサーバーにWordPressをインストールする』で、WordPress:latest(5.2.4)をインストール後、Apacheを再起動するとトップページにエラー。

`「サーバーの PHP バージョンは 5.3.29 ですが WordPress 5.2.4 は 5.6.20 以上のみでご利用になれます。」`

もしくは

`「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」`

## 解決法

WebサーバーのPHPと関連モジュールのバージョンを7.3にアップデートすると解決しました。

## 手順

※AWSでWebサーバーが構築されている状態を前提とします。

まず、現在のPHPのバージョンを確認。

```
$ php -v
PHP 5.3.29 (cli) (built: May 12 2015 22:42:19) 
```
ふるっ(^_^;)

PHP5.3.29ならびに関連モジュールを削除。

```
$ sudo yum remove php-*
```

PHP7.3をインストール。

```
$ sudo yum install php73
```

httpd-toolsが競合していると言われたので削除して再インストール。

```
$ sudo yum remove httpd-tools
$ sudo yum install php73
```

無事インストールされたか確認。

```
$ php -v
PHP 7.3.10 (cli) (built: Oct 18 2019 18:35:30) ( NTS )
```

いいかんじですね(^O^)v

関連モジュールをインストール（PHP7.3用にしています）

```
$ sudo yum install php73-cli php73-common php73-fpm php73-mbstring php73-mysqlnd php73-pdo
```

Apacheを再起動してみましょう。

```
$ sudo service httpd restart
```

エラーがとれましたヽ(=´▽`=)ﾉ
<img width="762" alt="WordPress_›_構成ファイルのセットアップ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403659/1e044de6-9edc-afd2-8045-ff8d97871857.png">

## 参照

[Amazon LinuxのPHPバージョンアップ(5.3 -> 7.2)したメモ – WordPress │ 能無しプログラマーの云々](https://www.nonashi-se.com/76/)
[2019年4月からWordPressのphpバージョンは5.6以上が必要になるよ！ | WEBマスターの手帳](https://homepage-reborn.com/2019/01/22/2019%E5%B9%B44%E6%9C%88%E3%81%8B%E3%82%89wordpress%E3%81%AEphp%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AF5-6%E4%BB%A5%E4%B8%8A%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%88/amp/)
マテリアライズドビューの機能（PostgreSQL）

#マテリアライズドビューとは
　一般的な**ビュー**はテーブルのデータではなく、ビュー定義の**SELECT文**だけ保持しています。ビューへSELECTをすると、ビュー定義のSELECT文を使って、テーブルへのSELECTに書き換えています。そしてテーブルのデータを返します。
　**マテリアライズドビュー**は、テーブルの**データ自体**を保持しているビューのことです。マテリアライズドビューへSELECTすると、マテリアライズドビューのデータをそのまま返しています。そのため、ビューへの問い合わせのときよりも、すぐに結果を返すことができます。

#マテリアライズドビューの作成方法
　マテリアライズドビューは以下のようにして作成することができます。MATERIALIZEDと書く以外は、ビューの作成と同じです。

**書き方：CREATE MATERIALIZED VIEW マテリアライズドビュー名 AS （SELECT文）;**

```sql
postgres=# select * from have_money_table ;        --マテリアライズドビューの元のテーブルの確認
 id | name | money
----+------+-------
  1 | aoi  |  2000
  2 | sato |  4000
  3 | kato |  5000
(3 rows)

postgres=# create materialized view mat_money_view as select id, money from have_money_table;                                              --マテリアライズドビューの作成
SELECT 3  
                                       
postgres=# select * from mat_money_view ;          --マテリアライズドビューの確認
 id | money
----+-------
  1 |  2000
  2 |  4000
  3 |  5000
(3 rows)
```

#マテリアライズドビューの注意点
　マテリアライズドビューは、作成後そのままにしておくとデータが古くなることに注意が必要です。マテリアライズドビューは、マテリアライズドビュー作成時のテーブル情報を保持するだけであり、その後のテーブルへの更新処理（UPDATEやDELETE）によって更新されないためです。
　マテリアライズドビューの内容をテーブルの最新の状態と同じにしたいときには、**REFRESH MATERIALIZED VIEW**を実行します。

**書き方：REFRESH MATERIALIZED VIEW マテリアライズドビュー名;**

```sql
postgres=# update have_money_table set money=1000 where id=1;        --元のテーブルを更新
UPDATE 1

postgres=# select * from have_money_table ;          --元のテーブルの状態を表示
 id | name | money
----+------+-------
  1 | aoi  |  1000
  2 | sato |  4000
  3 | kato |  5000
(3 rows)

postgres=# select * from mat_money_view ;            --マテリアライズドビューの確認（更新されていないことがわかる）
 id | money
----+-------
  1 |  2000            --moneyが1000になっていない
  2 |  4000
  3 |  5000
(3 rows)

postgres=# refresh materialized view mat_money_view;  --マテリアライズドビューの更新
REFRESH MATERIALIZED VIEW

postgres=# select * from mat_money_view ;             --マテリアライズドビューが更新されたか確認
 id | money
----+-------
  1 |  1000
  2 |  4000
  3 |  5000
(3 rows)
```

#まとめ
　マテリアライズドビューはデータ自体を保持しているビューなので、問い合わせの結果をすぐに返すことができます。しかし、そのデータは古くなるので、REFRESHをする必要があります。
　読んでくださり、ありがとうございました。
anaconda navigatorが起動しなかった話

##前置き
- 動作環境
OSX Catalina

- Anaconda3の配置先
/Users/me/anaconda3


既知の問題通り、Catalinaバージョンアップ後にAnacondaがルートディレクトリから除外されることで様々なエラーが連発しています。
参考：https://qiita.com/akinko/items/1909c8d0145d9ba530b9

私の場合、上記URL通り修正しましたが、Anaconda Navigatorが起動しなかったので解消方法をまとめました。



##本題
結論から言うと下記で直りました。
`conda install -c anaconda qt`


###症状
zshでAnaconda Navigatorを起動しようとすると下記エラーが発生
>QFactoryLoader::QFactoryLoader() checking directory path "/Users/me/anaconda3/bin/platforms" ...
>This application failed to start because it could not find or load the Qt platform plugin "cocoa"
>in "".

>Reinstalling the application may fix this problem.
zsh: abort      anaconda-navigator


「QT Platform」とはなんじゃと思って調べたら、GUIアプリケーションの諸動作との関わりが深いらしく、ないと問題がある模様
※細かいことは自分で調べてください

---
`conda list qt`を実行する


| Name | Version | Build | Channel |
|:--------------------|:-------:|:--------------:|:-:|
|pyqt                 |  5.9.2  | py37h655552a_2 |   |
|qt                   |  5.9.7  | h468cd18_1     |   |
|qtawesome            |  0.6.0  | py_0           |   |
|qtconsole            |  4.5.5  | py_0           |   |
|qtpy                 |  1.9.0  | py_0           |   |
|sphinxcontrib-qthelp |  1.0.2  | py_0           |   |




##結果
Anacondaチャンネルにインストールすることで解消することができました！

| Name | Version | Build | Channel |
|:--------------------|:-------:|:--------------:|:--------:|
|pyqt                 |  5.9.2  | py37h655552a_2 |          |
|qt                   |  5.9.7  | h468cd18_1     | **anaconda** |
|qtawesome            |  0.6.0  | py_0           |          |
|qtconsole            |  4.5.5  | py_0           |          |
|qtpy                 |  1.9.0  | py_0           |          |
|sphinxcontrib-qthelp |  1.0.2  | py_0|          |          |


#####備考
Spyderとかでも似たエラーが出ているらしいので
恐らく、QFactoryLoader系のエラーはこれで解消できるのかな？

また、`conda update conda` `conda update --all`も有効らしいです。

#####追伸
正直Catalinaバージョンアップと関係あるのかは神のみぞ知る。
CakePHP2でformタグ直書きでCSRF対策

#はじめに
CakePHP2でFormヘルパーを使わずにformタグを直書きしたい場合、
CSRFトークンのタグだけを出力するメソッドが
フレームワーク側で用意されていないためCSRF対策で困ることになります。

今回はCSRFトークンのタグを出力する方法を書きます。


#環境
PHP 7.3
CakePHP 2.10
Smarty3

#実装方法
###１．ヘルパーを作成
View/Helperディレクトリに以下のクラスを作成します。
（クラス名などは適当に）

```php:View/Helper/MyFormHelper.php
App::uses('FormHelper', 'View/Helper');

class MyFormHelper extends FormHelper {
	public function csrfField(){
		return $this->_csrfField();
	}
}

```

デフォルトのFormHelperにて、
_csrfFieldメソッドがCSRFトークンのinputタグを出力しているのですが、
protectedで定義してあったので、継承してpublicメソッドでラッピングしただけです。

###２．ヘルパーをViewで使用する
お好きなコントローラの$helpersに
さきほど作成したクラスを追加して
View側のformタグ内でメソッドを実行すればOKです。

```php
class AppController extends Controller {
	~
	public $helpers = array('MyForm');
	~
}
```


```smarty
<form action="" method="POST">
{$this->MyForm->csrfField()}
<button type="submit">送信</button>
</form>
```

###３．セキュリティコンポーネントの設定
ついでにSecurityコンポーネントの設定も

```php
$this->Security->validatePost = false; // フォーム改ざん検知をOFF
$this->Security->csrfCheck = true;  // CSRFトークンチェックをON
$this->Security->csrfUseOnce = false; // CSRFトークンの使用回数１回の制限をOFF Ajaxを使用する場合必要
```
今回フォーム改ざん検知用のタグは出力していないので
validatePost＝false

CSRFトークンチェックを有効にしたいため
csrfCheck＝true

AjaxでCSRFトークンを使用する場合は使用回数１回の制限解除する必要があるので
csrfUseOnce＝false

#まとめ
CakePHPが推奨している方法ではないので、この方法で安全とは保証はできません。
あくまでも自己責任でおねがいします。
wkhtmltopdf+snappyでヘッダー(フッター)をすべてのページに表示させる方法

phpでpdfを作成するときに、ヘッダーをすべてのページに入れる必要があった。
wkhtmltopdf&snappyのオプションを使ってできるとのことだったので実装してみた。

##結論
下記のoptionを指定する。

文字を入れる場合
・header-right
・header-left
・header-center

htmlを入れる場合
・header-html
・footer-html
をオプションで指定する。

##サンプル
```php
// htmlファイルを読み込む　※htmlファイルを読み込むことも可
$html = '<EOF
<div>
    <table>
        <tr>
            <th>hoge</th>
            <th>hoge2</th>
            <th>hoge3</th>
            <th>hoge4</th>
            <th>hoge5</th>
        </tr>
        <tr>
            <td>hogehoge</td>
            <td>hogehoge2</td>
            <td>hogehoge3</td>
            <td>hogehoge4</td>
            <td>hogehoge5</td>
        </tr>
    </table>
</div>
<style>
    table, tr, th, td {
        border: 1px solid #4c4c4c;
    }
    table {
        border-collapse: collapse;
    }
    th {
        background: #0a8aa1;
        color: #fff;
    }
</style>';

// 保存するディレクトリを指定
$tmpDir = $tmpDir . date("Ymd")."_application.pdf";

// wkhtmltopdfの位置をコンストラクタに渡す
$pdf = new Knp\Snappy\Pdf('/usr/local/bin/wkhtmltopdf', [], ["LANG" => "ja_JP.UTF8"]);

// optionをセット
$options = [
    'encoding'                => 'utf-8',
    'page-size'               => 'A4',
    'orientation'             => 'portrait',
    'margin-top'              => '5',
    'margin-right'            => '10',
    'margin-bottom'           => '5',
    'margin-left'             => '10',
    'disable-smart-shrinking' => true,
];
$pdf->setOptions($options);
$pdf->generateFromHtml($html, $tmpDir, []);
```

##ページ番号を表示したい場合など文字列を表示する場合
optionsにheader-right（右上） / header-left（左上） / header-center（上真ん中）
のいずれかを指定するが早い。

```php
$options = [
    'encoding'                => 'utf-8',
    'page-size'               => 'A4',
    'orientation'             => 'portrait',
    'margin-top'              => '10',
    'margin-right'            => '10',
    'margin-bottom'           => '5',
    'margin-left'             => '10',
    'disable-smart-shrinking' => true,
    'header-right'            => "[page] / [toPage]", // ←これで右上にページ番号が自動的に入るようになる。
];
```

##組んだhtmlファイルを表示する場合

```php
$header = <<<HTML
<!DOCTYPE html>
<html>
  <head><style type="text/css">p { color: #FF0000; }</style></head>
  <body><p>Lorem ipsum</p></body>
</html>
HTML;

// optionをセット
$options = [
    'encoding'                => 'utf-8',
    'page-size'               => 'A4',
    'orientation'             => 'portrait',
    'margin-top'              => '5',
    'margin-right'            => '10',
    'margin-bottom'           => '5',
    'margin-left'             => '10',
    'disable-smart-shrinking' => true,
     'header-html'            => $header, 
];
```

##引っかかったこと
①ヘッダーのHTMLが表示されない
→HTMLの改行を消したらできた。

##wkhtmltopdfの公式サイト
▼wkhtmltopdf
https://wkhtmltopdf.org/usage/wkhtmltopdf.txt

▼snappy
https://github.com/KnpLabs/snappy

困ったらdoc→FAQを読んだほうが早い。
【python】sakuraサーバー上でpythonを使ってtwitter投稿するまでの話

## 前提

- 環境：さくらレンタルサーバースタンダードプラン（設定は全くいじっていない）。
- 目的：ローカルで動くpythonによるtwitter投稿スクリプトを、ssh接続した上記のサーバー上にて実行できるようにする。

以下のページのコードをサーバー上で実行するために色々セットアップが必要で困ったので、備忘録として記事にしました。
>[PythonでTwitter API を利用していろいろ遊んでみる](https://qiita.com/bakira/items/00743d10ec42993f85eb) 

## 手順
### シェルをbashに変更

さくらレンタルサーバーのデフォルトではシェルはcshになっていルため、ログインシェルをbashに変更し、再ログイン。

`$ chsh -s /usr/local/bin/bash`

慣れたシェルじゃないと戸惑うからね。

### pythonのバージョンを3系にアップデート(初期設定では2.7だったので3.7へ)

#### pyenvのインストール

`$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv`

#### pyenv-virtualenv インストール

`$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv`


#### パスの設定

- ~/.bashrc に下記内容を追記。
自分の場合はシェルを変えたのに.bashrcと.bash_profileが存在していなかったので、自分で作成した。

```:.bashrc
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export TMPDIR="$HOME/tmp"
export PYTHON_PATH=./
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```

```:.bash_profile
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
```

- .bashrcの読み込み

`$ source ~/.bashrc`

#### pyenv で欲しいバージョンをインストール・設定

ふつーにpyenvを使う。

- install可能なバージョンの確認

`$ pyenv install --list`

- 任意のバージョンをインストール。今回は3.7.0にした。

`$ pyenv install 3.7.0`

この時、こんな感じの画面になって画面の更新が止まるし、ファイルへのアクセス権限がないみたいなメッセージ出てるし、エラーかなって思うけど、**待ってればちゃんとインストールされるから中断しない**ように！
<img width="894" alt="スクリーンショット 2019-11-01 21.30.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/7c8ef9dd-aabd-bde0-15e9-9a6637ac6799.png">

"Installed Python-3.6.4 to /home/miyablo/.pyenv/versions/3.6.4"
ちゃんとこのディレクトリにインストールされた。
<img width="894" alt="スクリーンショット 2019-11-01 21.33.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/42e41bb3-5c98-5929-78c4-6577a781f736.png">

ちなみに写真は違うバージョンインストールしたときのやつだからバージョン名が違う。。。笑

- デフォルトで使うバージョンに設定。

`$ pyenv global 3.7.0`

- 確認！

`$ python -V` -> `Python 3.7.0 (default, Oct 31 2019, 02:04:42)`

これでおけ。

### pipのインストール

- pip実行ファイルのダウンロード

`$ curl -O https://bootstrap.pypa.io/get-pip.py`

- ダウンロードしたスクリプトの実行

`$ python get-pip.py`

- installの確認

`$ pip -V`

これできちんと表示された。大丈夫だ。

- 実行スクリプトの削除

`$ rm get-pip.py`


### pythonスクリプトの実行準備から

ここから先は、以下のページに従えば、うまくいく。
>[PythonでTwitter API を利用していろいろ遊んでみる](https://qiita.com/bakira/items/00743d10ec42993f85eb) 

投稿完了。
<img width="695" alt="スクリーンショット 2019-10-31 3.01.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270898/6cd053e9-ed82-2280-07d1-bfb8b21d6d02.png">

pythonは人気あるおかげで、すぐ動くコードが簡単に見つかるから嬉しい。

## 参考サイト
[pyenvのインストールから設定まで](https://michimani.net/post/sakura-how-to-use-python3/)
[pipのインストール方法に関して](https://www.python-izm.com/tips/pip/)
[pythonを使ったtwitter投稿に関して](https://qiita.com/bakira/items/00743d10ec42993f85eb)
MSXML（その２）

なんかひらめいた（別に大したことではない）ので、やってみたらできた。
※いったい何に苦戦していたのか謎すぎる。。。


**やりたかったこと**
理想はタグ単位で改行してほしいけど、そこまでは最悪いいかな。。。
```xml:save.xml
<?xml version="1.0" encoding="UTF-8"?>
<Content><header><item1>item1</item1></header><body><item2>item2</item2></body></Content>
```

**ソース**

```c++:test.cpp

#include "stdafx.h"
#include "resource.h"

#include <iostream> // ostream
#include <string>   // string
#include <vector>   // vector
#include <cassert>  // assert
#include <cstdlib>  // atoi, _itoa
#include <atlacc.h>
#include <atlcom.h>
#include <atlcomcli.h>


#import "msxml3.dll" named_guids raw_interfaces_only

bool AssembledData()
{
	IXMLDOMDocumentPtr pDoc("MSXML2.DOMDocument.3.0");
	IXMLDOMProcessingInstructionPtr pPi;
	pDoc->createProcessingInstruction(bstr_t("xml"), bstr_t("version='1.0' encoding='UTF-8'"), &pPi);
	pDoc->appendChild(pPi, NULL);

	IXMLDOMNodePtr     pNodeContent;
	IXMLDOMNodePtr     pNodeHeader;
	IXMLDOMNodePtr     pNodeHeaderItem1;
	IXMLDOMTextPtr     pTextItem1;
	IXMLDOMNodePtr     pNodeBody;
	IXMLDOMNodePtr     pNodeBodyItem2;
	IXMLDOMTextPtr     pTextItem2;

	
	//NG:BSTRだと文字化けする。理由は謎
	//pDoc->createNode(_variant_t(NODE_ELEMENT), BSTR("Content"), BSTR(""), &pNodeContent);
	//OK:_bstr_tだと文字化けしないっぽい
	pDoc->createNode(_variant_t(NODE_ELEMENT), _bstr_t("Content"), _bstr_t(""), &pNodeContent);		//<Content>を作成
	pDoc->appendChild(pNodeContent,NULL);															//XMLに<Content>を追加

	pDoc->createNode(_variant_t(NODE_ELEMENT), _bstr_t("header"), _bstr_t(""), &pNodeHeader);		//<header>を作成
	pNodeContent->appendChild(pNodeHeader, NULL);													//<Content>に<header>を追加

	pDoc->createNode(_variant_t(NODE_ELEMENT), _bstr_t("item1"), _bstr_t(""), &pNodeHeaderItem1);	//<item1>を作成
	pDoc->createTextNode(_bstr_t("item1"), &pTextItem1);											//<item1>に設定するデータを作成
	pNodeHeaderItem1->appendChild(pTextItem1, NULL);												//<item1>にデータを追加
	pNodeHeader->appendChild(pNodeHeaderItem1, NULL);												//<header>に<item1>を追加

	pDoc->createNode(_variant_t(NODE_ELEMENT), _bstr_t("body"), _bstr_t(""), &pNodeBody);
	pNodeContent->appendChild(pNodeBody, NULL);

	pDoc->createNode(_variant_t(NODE_ELEMENT), _bstr_t("item2"), _bstr_t(""), &pNodeBodyItem2);		//<item2>を作成
	pDoc->createTextNode(_bstr_t("item2"), &pTextItem2);											//<item2>に設定するデータを作成
	pNodeBodyItem2->appendChild(pTextItem2, NULL);													//<item2>にデータを追加
	pNodeBody->appendChild(pNodeBodyItem2, NULL);													//<body>に<item2>を追加

	pDoc->save(_variant_t("save.xml"));

	return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
	CoInitialize(NULL);	// COMの初期化処理

	AssembledData();

	CoUninitialize();	// COMの終了処理

	return 0;
}
```
express がいつのまにかバージョンアップしてた

なので、今新しくexpress のシステム作ろうとして WEB に出回っているコードをコピペしても **全然** 動いてくれません。

https://expressjs.com/ja/guide/migrating-4.html

とりあえずこれを参照すればなんとかなると思います。
有用なレビュー文の特徴案

####有用性の観点(案)

・評価の根拠がある
・投稿者が商品の使用者であると判断できる
・レビュー対象の商品について情報量が十分である(個人差がある)

・レビューの投稿者が, 商品を使用したと推測できる
・レビュー中に, 他の商品との比較がされている
・商品についての言及が多い
・文字数が長い(情報量がある)
・紹介文にある商品の特徴やスペックに言及している
・レビュー中に評価の根拠がある
・商品についてpositive/negativeな意見がある
・商品の問題のある特徴に対して, 解決案を提案している

[引用]"商品レビューを対象とした有用性の定義と判別", 佐々木, 2014. [[引用元リンク]](https://db-event.jpn.org/deim2014/final/proceedings/B5-1.pdf)
[引用]"From Helpfulness Prediction to Helpful Review Retrieval for Online Product Reviews", Chau Vo, Dung Duong et al, 2018 [[引用元リンク]](https://dl.acm.org/citation.cfm?id=3287931)
***


#Readability
####Estimating the Helpfulness and Economic Impact of Product Reviews: Mining Text and Reviewer Characteristics, Anindya Ghose and Panagiotis G. Ipeirotis, 2010.
[参照元](https://ieeexplore.ieee.org/document/5590249/)
有用性と経済的影響を推定
有用性の素性の一つにReadabilityを使用

使用したReadabilityのメトリック:

* Automated Readability Index
* Coleman-Liau Index
* Flesch Reading Ease
*  Flesch-Kincaid Grade Level
* Gunning fog index
* SMOG

計算方法
引用:
"患者向け説明文書の可読性判定, 酒井, 2006."      [参照元](http://www.mslis.jp/am2006yoko/12_sakai.pdf)
"読みやすさの指標について, A&People"       [参照元](https://www.a-people.com/readability/barometer/)
###SMOG
簡単な方法で文書の可読性(Readability)を示す学年レベル(Grade Level)を計算できる.
学年はアメリカの学年で示される. 
ヘルスケア系の資料で広く利用

1. 文書の最初, 中間, 最後の3か所から10ずつ計30の連続する文章を抽出する.
2. 30の文書から3つ以上の音節を持つ多音節語の数をカウントする
3. 多音節語の数の平方根を求め, 3を足す. 

$$grade = 1.0430\sqrt{number\ of\ polysyllables\times \frac{30}{number\ of\ sentences}} +3.1291$$

####Automated Readability Index(ARI)
米国陸軍で使用する文書用に作成された
技術資料などで利用
$$4.71(\frac{number\ of\ characters}{number\ of\ words})+0.5(\frac{number\ of\ words}{number\ of\ sentences})-21.43$$

####Coleman-Liau index(CLI)
$$CLI=0.0588L-0.296S-15.8$$
L: 100単語あたりの平均文字数
S: 100単語あたりの平均文数

####Flesch Reading Ease(FRE)
$$206.835-1.015(\frac{total\ words}{total\ sentences})-84.6(\frac{total\ syllables}{total\ words})$$
syllables: 音節

####Flesch-Kncaid Grade Level(FKG)
FREの改善版？
$$0.39(\frac{total\ words}{total\ sentences})+11.8(\frac{total\ syllables}{total\ words})-15.59$$

####Gunning Fog Index(GFI)
$$Grade\ Level = 0.4(ASL+PHW)$$
ASL: 平均文長
PHW: （i）固有名詞、（ii）簡単な単語またはハイフンでつながれた単語の組み合わせ、または（iii）-esおよび-edで終わる3音節の動詞ではない3つ以上の音節の単語数を数え, サンプルパッセージの数または単語数で割ったもの 



#ほかの商品との比較
どういうキーワードで調べればいいかわからない

#商品の評価する表現
[意見(評価表現)抽出ツール](https://alaginrc.nict.go.jp/opinion/index.html)
、国立研究開発法人情報通信研究機構 旧知識処理グループ 情報信頼性プロジェクトによって開発

1. 1行につき１文が書かれたテキストファイルが入力, 以下の情報を出力
2. その評価情報を表す表現の抽出（評価表現抽出）
3. その評価情報の意味的な分類（評価タイプ分類）
4. その評価情報が肯定的なニュアンス（ポジティブ）を表すのか、否定的なニュアンス（ネガティブ）を表すのかの判定（評価極性判定）
5. その評価情報を発信する主体の抽出（評価保持者抽出）

#評価の根拠
英語で検索するにはどういうキーワード？(根拠: reasoning, background, rationale)
####"レビュー解析に基づくユーザ評価の根拠提示の一手法", 松尾, 2014. 
[参照元](https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_action_common_download&item_id=106763&item_no=1&attribute_id=1&file_no=1)
レビュー中から評価の星の数の根拠を提示する.
商品の機能や特徴といった情報を商品属性とし, レビュー文章中の商品属性に関して記述されている文(評価文)を抽出.
対象の商品カテゴリはノートパソコンとタブレットPC

####"評価値の予測タスクでの語の重要性に基づく商品レビューの評価根拠の抽出", 清瀬, 2016
[参照元](https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=174512&item_no=1&page_id=13&block_id=8)
評価文からSVMを用いて評価値を予測し, 予測に用いた素性から評価の根拠を抽出
ゲームをつくる：CocosCreator v2.x でタッチ位置を検出する

#この記事は、
大戦略好きが、最近スマホでイケてるヘックス・ターン制SLGが無いので自分で作る奮闘記です。

# この記事のまとめ
- Cocos Creator v2.xのTouch Eventはスクリーン座標なので
- CameraでWorld座標に変換した後
- 該当NodeでNode座標に変換して判定する


## Cocos Creator v2.x のタッチイベント
基本的に、cc.Nodeに用意されているイベントコールバック用のメソッドを使います。

```javascript:
node.on(cc.Node.EventType.TOUCH_START, callback, this);
```
イベントが発生すると、callbackが呼ばれます。
最後のthisは、callbackが呼ばれた際のターゲットの指定。省略可。

今回はヘックスマップがあるSLGを作る予定です。なのでどのヘックスにタッチされたか検出する必要があります。
すべてのヘックスにそれぞれイベントを貼るのは処理が重くなりそうで嫌なので、ゲーム全体をカバーするタッチ検出用の大きなnodeを作って、状況に応じて、メニューやヘックスやユニットなど、何をタッチしたか判定する形にします。
こんな感じ。

```javascript:
    this.node.on(cc.Node.EventType.TOUCH_START, this.TouchStart);
    this.node.on(cc.Node.EventType.TOUCH_MOVE, this.TouchMove);
    this.node.on(cc.Node.EventType.TOUCH_END, this.TouchEnd);
    this.node.on(cc.Node.EventType.TOUCH_CANCELED, this.TouchEnd);
```
this.nodeが全体をカバーするnodeです。
タッチ開始、タッチ移動、タッチ終了は、それぞれ別のコールバックになります。
ダブルクリックや、スワイプ、慣性スクロールなどは、この3つを駆使して検出することになります。

## コールバックが呼ばれた際の処理
タッチコールバックのメソッドがコールバックとして呼ばれると、Touchクラスのインスタンスが引数として渡されます。
ここからtouch座標をメソッドを使って取得します。

```javascript:
// ****************************
// タッチ開始イベントコールバック
// ****************************
  TouchStart(event) {
    let touchPos = event.getLocation();
  }
```
この座標はCameraの影響を受けた、スクリーンのどこをタッチしたかの座標です。 

## ワールド座標に戻す
最終的に該当ノードのどこをタッチしているのか判定するためには、一度カメラを使ってワールド座標に戻す必要があります。
cc.CameraのgetCameraToWorldPointメソッドを使います。

```javascript:
this.MainCamera.getCameraToWorldPoint(touchPos, worldPos);
```
this.MainCameraは、エディタのNodeTreeに置かれているMainCameraノードのCameraコンポーネントです。
あらかじめ取得しておきます。
結果のワールド座標は第２引数のwordPos（cc.Vec2）に入ります。
(このメソッドだけちょっと特殊な気がします。大抵のメソッドがVec2の参照を戻り値で返すのに）

## タッチ判定を行いたいNodeの座標系に変換
ワールド座標から、判定を行いたいノードの座標系に変換して、判定を行います。

```javascript:
let hexMapTouchPos = HexMap.node.convertToNodeSpace(worldPos);
```
さて、これでHexMapノード上で、どのヘックスをタッチしたか判定する準備が整いました。
次回は[実際にどのヘックスをタッチしたか判定](https://qiita.com/papipu-games/items/d52b4d538e3e8ca8e202)します。
実務でよく使うVim操作

Vim操作のまとめです。

私が実務でよく使っているものを中心に載せました。
お腹いっぱいになる事を防ぐため、あえて載せてないものもたくさんあります。

これだけ(と言っても結構ありますが)覚えれば、やりたいことは大体できるかと思います。

## 基本
### 終了方法
|  コマンド | 説明 |
|:--------:|:-------------|
| :w | 保存 |
| :wq | 保存して終了 |
| :q! | 保存せず終了|

### モード変更
|  コマンド | 説明 |
|:--------:|:-------------|
| i | 挿入モードへ |
| o | カーソル下に行を追加して挿入モードへ |
| O | カーソル上に行を追加して挿入モードへ |
| Esc | 挿入モードを抜ける |

## 移動系
### 大きい移動
スクロール系は **u**p と **d**own で覚えます。

|  コマンド | 説明 |
|:--------:|:-------------|
| gg       | ファイルの先頭行へ |
| G       | ファイルの最終行へ |
| 123gg  | 123行目へ |
| Ctrl + u         | 上に半画面スクロール |
| Ctrl + d         | 下に半画面スクロール |

### 小さい移動
wとbは **w**ord と **b**ack word で覚えます。

|  コマンド | 説明 |
|:--------:|:-------------|
| 0(ゼロ)   | 行の先頭へ   |
| $       | 行の末尾へ   |
| %       | 対応する括弧へ |
| w       | 次の単語の先頭へ(空白, 記号区切り) |
| b       | 前の単語の先頭へ(空白, 記号区切り) |

### 検索して移動
`*`が便利すぎる。
`/`を使う時は`gg`で先頭に行ってから。

|  コマンド | 説明 |
|:--------:|:-------------|
| /dog       | カーソル位置よりも下の`dog`を検索   |
| *       | カーソル位置の単語を検索   |
| n       | 検索にマッチした位置に移動(順方向) |
| N       | 検索にマッチした位置に移動(逆方向) |

## 編集系
`yy`や`dd`は`3yy`のようにすることで複数行を対象にできますが、打ち間違いやすいので`行選択 + y`のほうをよく使ってます。

|  コマンド | 説明 |
|:--------:|:-------------|
| yy   | カーソル位置の行をコピー |
| dd   | カーソル位置の行を切り取り |
| Ctrl + v -> カーソル | 矩形選択          |
| V -> カーソル | 行選択          |
| y       | 選択範囲をコピー |
| d       | 選択範囲を切り取り |
| p       | カーソルの次の位置に貼り付け |
| P       | カーソルの手前に貼り付け |
| u       | 元に戻す |
| Ctrl + r  | 元に戻すを取り消す |

## その他

### 入力中の単語を補完する
挿入モードで文字入力中に`Ctrl + n`または`Ctrl + p`
※候補はファイル内から選ばれます

### ファイル内の文字列を置換する
キーワードには正規表現が使えます。

|  コマンド | 説明 |
|:--------:|:-------------|
| `:%s/置換前/置換後/`   | 最初に一致した文字列のみを置換 |
| `:%s/置換前/置換後/g`  | 一致した文字列すべてを一括置換 |
| `:%s/置換前/置換後/c` | 一致した文字列すべてを一つずつ確認して置換 |


### 複数行の一括コメントアウト
複数行の先頭に一括で`#`や`//`を入れる操作です。

1. 行頭で`Ctrl + v`
2. コメントアウトしたい行の先頭を`j`,`k`で範囲選択する
3. `I`で挿入モードに入る
4. 行頭に入れたい文字を入力 (例: `#`)
5. `Esc`で抜ける

### 複数行の末尾に特定文字を入れる
各行の末尾に一括でカンマを入れたい時とか。
1. `Ctrl + v`
2. 対象行を`j`,`k`で範囲選択する
3. `$`で行末に移動する
4. `A`で挿入モードに入る
5. 行末に入れたい文字を入力 (例: `,`)
6. `Esc`で抜ける

### 複数のファイルを開く
ファイル間でのコピー&ペーストが可能

|  コマンド | 説明 |
|:--------:|:-------------|
| `:vs /path/filename`   | 画面を左右分割して`filename`を開く |
| `:sv /path/filename`   | 画面を上下分割して`filename`を開く |
| Ctrl + w -> w  | 次のウインドウへ移動 |

## 参考リンク
もっと色々知りたい方は、こちらの記事達がおすすめです。

* [Vim幼稚園からVim小学校へ](https://qiita.com/hachi8833/items/7beeee825c11f7437f54)
* [脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き)](https://qiita.com/jnchito/items/57ffda5712636a9a1e62)
* [脱初心者を目指すVimmerにオススメしたいVimプラグインや.vimrcの設定](https://qiita.com/jnchito/items/5141b3b01bced9f7f48f)
* [よく使うVimのコマンドまとめ](https://qiita.com/hide/items/5bfe5b322872c61a6896)
JavaScriptでRedmineのワークフローの設定で対角線にチェックを入れる方法

# 初めに

[Ankosoft](https://www.ankosoft.co.jp)の山崎です。
redmine.tokyo の[第17回勉強会](https://redmine.tokyo/projects/shinared/wiki/第17回勉強会)まで後3日と迫っていますので、少しでもRedmineを盛り上げられればと思い、Redmineの改善のお話をしたいと思います。

Redmineで管理者権限があるユーザーが「ワークフロー」ページの「ステータスの遷移」タブで、各ロールごとに、各トラッカーごとに、ワークフローを設定することができます。

ステータスの種別が多い場合、一つ一つのチェックボックスをクリックするのは、相当な回数ボタンをクリックする必要があります。
下図は15行かける14列なので、全部で最大210のチェックボックスをオン、オフする必要があります。
手動で全てのチェックボックスをオン、オフするのは効率が良くないため、Redmineでは「現在のステータス」のレ点の部分をクリックすることによりワンクリックで簡単に全部の項目の一斉オンオフができます。

![alt](http://ankosoft.co.jp/wp-content/uploads/2019/10/redmine_workflows_1.gif)

同様に、行や、列を同時にオン、オフする方法も下図のようにレ点をクリックすることで実現が可能です。

![alt](http://ankosoft.co.jp/wp-content/uploads/2019/10/redmine_workflows_2.gif)

しかし、下図のように斜めに、対角線的にワンクリックでオン、オフにする方法がなく、手動で入力をしなければなりませんが、これをJavaScriptで自動的に入力をできるようにしました。
このように「ステータスの遷移」で対角線的にチェックボックスをオンにすることにより、ステータスの段階を後戻りさせず、絶えず前進するようなワークフローの設定になります。
![alt](http://ankosoft.co.jp/wp-content/uploads/2019/10/redmine_workflows_4.png)

## JavaScript実行結果

下図のようにJavaScriptを実行すると斜めに、対角線的にチェックボックスがオン、オフされます。

![alt](http://ankosoft.co.jp/wp-content/uploads/2019/10/redmine_workflows_3.gif)



## 作成したJavaScriptコード

```javascript:qiita.rb
tate = $("#workflow_form > div > table > tbody > tr").length;
yoko = tate - 1;

j = 0;
k = 0;

$("#workflow_form > div > table > tbody input[type=checkbox]").each(function(i, elem) {
  if (j == yoko) {
    j = 0;
    k = k + 1;
  }
  j = j + 1;

  if (k >= j) {
    $(elem).prop("checked", false);
  } else {
    $(elem).prop("checked", true);
  }
});
```

簡単にコードの説明をすると
`tate = $("#workflow_form > div > table > tbody > tr").length`の部分で縦の行数をカウントしています。

`yoko = tate - 1`の部分で、横の列数を求めています。単純に縦よりも１つ少なくなります。縦列にだけ「新しいチケット」という項目があるため、実際のステータス数よりも１つ多くなり縦と横の項目数に1つの違いが生じます。

`j = 0;
k = 0;`の部分は縦と横のカウンターになります。jが横の列のカウンター、kが縦の行のカウンターになります。

`  if (j == yoko) {
    j = 0;
    k = k + 1;
  }
  j = j + 1;`の部分でカウンターを初期化したり、カウントを上げたりしています。


 ` if (k >= j) {
    $(elem).prop("checked", false);
  } else {
    $(elem).prop("checked", true);
  }`

の部分が対角線的にクリックをさせるための肝になる部分です。
対角線よりも右側にあるチェックボックスをオンにして、そうではない部分をオフにしています。

上記のJavaScriptを[view customize plugin](https://github.com/onozaty/redmine-view-customize)に登録して、適当なボタンなどを作り、イベントリスナーに連動して使えばワンクリックで対角線的にチェックを入れることができます。

この方法ですとステータスの数が決め打ちでの対応ではないため、各自の色々なRedmineの環境（ステータスの多い少ないにかかわらず）でも斜めにチェックを入れることができます。

今回の例では対角線的にしましたが、現実的にはこのような設定に対する需要はあまりないのかもしれません。しかし、事前にJavaScriptで色々なチェックパターンを定義してあげれば、毎回手動でチェックを入れる手間が省けますので、皆様のRedmine管理の際のヒントになればと思い、情報を公開いたしました。

### 参考情報

ではでは、3日後のredmine.tokyo の[第17回勉強会](https://redmine.tokyo/projects/shinared/wiki/第17回勉強会)で皆様とお会いできるのを楽しみにしております。

---

JavaScriptでUIを改善した記事です。
[たった1行のJavaScriptコードでRedmine UI （カスタムフィールドのトラッカー名の表示）を改善する方法](https://qiita.com/ankosoft/items/353724782497c6453865)

[たった3行のJavaScriptでRedmineの項目削除時の「よろしいですか？」問題を解決した件](https://qiita.com/ankosoft/items/6de1cf3285521d13bab0)

---
RedmineのガントチャートUIを大幅に改善したANKOガントチャートの紹介ページ
[ANKOガントチャート](https://www.ankosoft.co.jp/anko_gantt_chart/)
【要永久保存】Finderを最大限に活用する

## はじめに
WindowsからMacに移行してきて戸惑ったのがFinderでした。
使い勝手が違いすごく**使いにくい**なあ、と思ったものです。

ですが実は設定、ショートカットの利用などでかなり快適なFinderライフを過ごせます。

Macで快適なFinderライフを過ごすために私が調べた知識をまとめます。

## Finderの環境設定

デフォルトではとてもつかいにくいFinder。

まず使いやすいFinderになるよう設定をいじりましょう。

万が一Finderを再起動して設定が初期化してしまっても最低限この設定を覚えていれば5秒で快適な状態に戻せます。

### 基本のショートカットで瞬時にできる5つの初期設定

#### 隠しファイルを表示する

`command+ shift+ .`

web製作必須の隠しファイルを表示します。とりあえず表示しておきましょう。

#### タブバー表示

`command+ shift+ t`

windowsにはできないタブが利用できるのがMacの強みです。

整理して使うためにも表示しておきましょう。

#### ステータスバー表示

`command+ /`

容量とか何かと見えると便利なので表示しておきましょう。

#### パスバー表示

`command+ option+ P`

パスバーから**optを押しながらドラッグ&ドロップ**でもリンクが作れたりと、活用しやすいので表示しましょう

#### フォルダ、ファイル名のテキストサイズ変更

`command+ J` で表示オプションを表示し、テキストサイズを選択する

ちなみに自分はデフォルトのままです、

使いやすい大きさにすればいいと思います。

まとめるとFinderが初期化したなど、設定をしたい場合は

以下を入力いいと思います。

~~~
command+ shift+ .
command+ shift+ t
command+ /
command+ option+ P
command+ J
~~~


### さらに環境設定で活用しやすく

#### 常に新規ファイルをタブで開く

`Finder > 環境設定 > フォルダを新規ウインドウではなくタブで開く、にチェック`

<img width="370" alt="スクリーンショット 2019-10-25 1.53.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146670/0540aea2-1ebc-e8bf-aa29-827f67743e3f.png">
![](2019-10-25-02-05-49.png)

上記の**タブバー表示**だけでは例えばデスクトップから開いた際は新しいウインドウでフォルダが開いてしまいます。

これを防ぐためにはDockの設定も必要になります。

`システム環境設定 > Dock > 書類を開く時はタブで開く、を常に、に`


## いかがでしょうか

いかがでしょうか？

些細なことではありますが、Finderは1日に何回もは楽ので自分にとって最善の設定にしておくことは大事です。

次回はさらに使い勝手のよい、Finderにするための機能などを説明したいと思います。

つづく
ViewControllerのviewの上に乗せた別のviewでもsafeAreaLayoutGuideは有効な値か？

3周遅れでAutoLayoutを取り入れています。よろしくおねがいします。
今回のテーマは
**ViewControllerのviewの上に乗せた別のviewでもsafeAreaLayoutGuideは有効な値か？**
です。
知らない人には新しい、知ってる人には懐かしい、そんな記事を目指してます。

#結論
有効です。

#コード

```swift
class ViewController: UIViewController {
	
	let testView1 = UIView()
	let testView2 = UIView()

	override func viewDidLoad() {
		super.viewDidLoad()
		// Do any additional setup after loading the view.
		
		view.addSubview(testView1)
		testView1.addSubview(testView2)
		
		testView1.backgroundColor = .red
		testView2.backgroundColor = .blue
		
		testView1.translatesAutoresizingMaskIntoConstraints = false
		testView1.widthAnchor.constraint(equalToConstant: 100.0).isActive = true
		testView1.heightAnchor.constraint(equalToConstant: 100.0).isActive = true
		testView1.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
		testView1.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
		
		testView2.translatesAutoresizingMaskIntoConstraints = false
		testView2.widthAnchor.constraint(equalToConstant: 50.0).isActive = true
		testView2.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
		testView2.centerXAnchor.constraint(equalTo: testView1.centerXAnchor).isActive = true

		//↓↓↓これです↓↓↓
		testView2.bottomAnchor.constraint(equalTo: testView1.safeAreaLayoutGuide.bottomAnchor).isActive = true
	}
}

```

#結果
シミュレータで実行したiPhone11の画面の下の部分です。
![safe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46631/82544ac3-8579-2a31-ad67-049303825097.png)
赤は土台のviewの上に乗ってます。
青は赤の上に乗っています。
赤のsafeAreaLayoutGuide.bottomAnchorと青のbottomをイコールにしています。

#さいごに
super-sub関係を飛び越えることをよしとするなら直接viewController直下のviewのsafeAreaLayoutGuideにアクセスするのもよいですね。自分はこの辺のスタンダードがわからなかったので、super-sub関係内で出来るかどうかコードを書いて確かめてしまいました。

#追加
オートレイアウトをやっているときに出てきた疑問だったのでオートレイアウトの話題のつもりで書いてますけど、よく考えたらsafe areaの話題と言ったほうがいいかもしれません.
Macで外付けHDDをアンマウントせずに抜いてしまい、再マウントできなくなる

# 事象
私の利用しているUSBハブは接続不良で、よくHDDがアンマウントせずに抜けてしまう。
そのとき、ハードディスクは再度接続しても再マウントされず、ディスクユーティリティで見てもグレーアウト、First Aidもエラー8ですぐ終了してしまう。
(TODO: キャプチャはあとでとる)

# 解決策
fsck_msdosが動いているか見る。元気よく動いているようだったら、そのまましばらく待つとプロセスが終了し、firstAidができるようになる。
が、しばらくしてもfsck_msdosが終わらない場合は強制kill。
```
MacBook-Pro:~ yu$ ps aux | grep fsck_msdos
root             10686   5.2  0.2  4537496  27076   ??  U     1:57AM   0:04.36 /System/Library/Filesystems/msdos.fs/Contents/Resources/./fsck_msdos -y /dev/rdisk2s1
yu               10705   0.0  0.0  4287476    840 s000  S+    1:59AM   0:00.01 grep rdisk2
MacBook-Pro:~ yu$ sudo kill 10686
Password:
```

このあとFirstAidを実行し、再マウント。
YouTubeのWebサイト埋め込みテクニック【再生編】動画の再生方法を設定する

#はじめに
Youtubeの動画やプレイリスト（再生リスト）を自分のブログやWebサイトに埋め込みはしたが、
特定の位置から再生したい場合や同一の動画をループさせたい場合などがあると思います。
そこで、今回は再生ルールの設定について紹介していきたいと思います。

#目次
【再生編】動画の再生方法を設定する
1. 動画を途中から再生させる
2. 動画を途中で停止させる
3. 動画の一部分だけを切り取って再生させる
4. 動画を自動で再生させる
5. 動画をループ再生させる


#1. 動画を途中から再生させる
```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?start=60" frameborder="0" allowfullscreen></iframe>
```
?start=秒数を追記します。例では「60」と入力したので動画の60秒から再生されます。比較的よく使うので覚えておくと非常に便利。


#2. 動画を途中で停止させる
```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?end=30" frameborder="0" allowfullscreen></iframe>
```
?end=秒数を追記します。例では「30」と入力したので、動画始まってから30秒後に再生が止まります。これでも途中再生と同じく、非常に便利な設定です。


#3. 動画の一部分だけを切り取って再生させる
```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?start=60&end=90" frameborder="0" allowfullscreen></iframe>
```
?start=秒数&end=秒数を追記する。途中再生の「start」と、途中終了の「end」を組み合わせることで、動画の一部分だけを再生させることも出来る。ものすごく使えます。

#4. 動画を自動で再生させる
デフォルト設定では動画を一度クリックしないと再生されません。
記事を開いて動画が読み込まれ次第、自動で再生させて欲しい場合は以下のように設定しましょう。

```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?autoplay=1" frameborder="0" allowfullscreen></iframe>
```
URL部分のすぐ後ろに?autoplay=1を追記する。
※ページを開いていきなり動画が再生されます！突然音が出るとびっくりさせてしまう可能性があるため、くれぐれも注意しましょう！！

#5. 動画をループ再生させる
```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?loop=1&playlist=動画ID" frameborder="0" allowfullscreen></iframe>
```
?loop=1&playlist=動画URLを追記する。埋め込んだ動画が、何度も自動でループ再生されます。
再生終了後に自身のチャンネル含め関連動画を一切表示せず、同一の動画のみを再生したい場合は現状この方法しかありません。（2019/10/31時点）


#まとめ
今回は再生ルールの設定についてまとめました。特に、再生位置や自動再生の設定などは動画のプロモーションを含めサイトの演出に関わる部分なのでぜひ有効に活用してみてください!

なお、パラメータによる挙動は仕様が変更されると違ったものになるので、こまめにリファレンスをチェックして最新の情報を仕入れることが運用にとって大切になります。

次回は、海外向けページへの埋め込みの際必要となる言語設定や全画面化の禁止などの少々細かな設定について
まとめたいと思います。

参考：YouTube公式リファレンス
https://developers.google.com/youtube/player_parameters?hl=ja

関連リンク
[YouTubeのWebサイト埋め込みテクニック【基本編】動画の埋め込みと設定](https://qiita.com/ktr1211/items/c1d1d7eaed735bf6bddb)
[YouTubeのWebサイト埋め込みテクニック【表示編】＆【応用編】高度な設定]
(https://qiita.com/ktr1211/items/ae0308a320fe2edca1fc)
さくっとデザインガイドを作成するための Fractal

突然ですが、デザイナーとエンジニアの間で一番多く共有されるものって何でしょう？
（おそらく）そうデザインテンプレートです。

[K.S.ロジャース](https://www.wantedly.com/companies/ks-rogers)の島袋です。

今回は、デザインガイドを作成するために [Fractal](https://fractal.build/) を使用してみた所感や使い方を書いていきたいと思います。なお、あくまでエンジニア主導と目線による使用感になるので、デザイナーから見た場合は少し違った感想になるかとは思いますのであしからず。

## デザインガイド作成のきっかけ
実は今回のデザインガイドはデザイナーとエンジニア向けではなく、HTMLほぼ初心者の方でもHTMLを構築できるようにするためでした。なので、導入部分のデザイナーとエンジニアの共有とは少し違いますが、分かりやすい指標を作る必要があったため、デザインガイドを作成しました。
 
簡潔に作成するためにいくつかのフレームワークを検討しましたが、一番導入が簡単そうな `Fractal` を使うことにしました。

## インストールと起動
インストールはとても簡単で `npm` の環境があればコマンド一発で可能です。
が、依存関係をコントロールやしやすい [yarn](https://yarnpkg.com/ja/) がおすすめです。


### CLIツール
buildなどでコマンドを頻繁に叩くので、CLIツールのほうが便利です。

```bash
yarn global add fractal
```

参考：[公式ドキュメント](https://fractal.build/guide/installation.html#installing-fractal-in-your-project) 

### 起動
[公式](https://fractal.build/guide/getting-started.html#the-tl-dr-method)から引用すると

1. ターミナルでプロジェクトを作るディレクトリに移動
2. `fractal new <project-name>` でプロジェクトを作成
3. 表示される質問に答える
4. 質問に全部答えるとプロジェクトが作成されるので移動
5. `fractal start --sync` で開発用サーバーの起動
6. 表示されるURLで見れるよ

となります。簡単ですね。

## ディレクトリ構造と要素
Fractalは2つの要素で構成されます。

1. デザインテンプレートを構成する `COMPONENTS`
2. ドキュメントを構成する `DOCUMENTATION`

ディレクトリ構造も上記に即しており、非常に分かりやすかったです。

```shell
├── src
│   ├── components
│   └── docs
└── package.json
```

参考：[公式ドキュメント](https://fractal.build/guide/getting-started.html#the-tl-dr-method) 

### COMPONENTS
ざっくりと言うと、テンプレートエンジンに [Handlebars](https://handlebarsjs.com/) を使用して、READMEとか書けるといったものです。Handlebars自体エンジニアであれば見覚えある方も多く、使いやすくなってます。
詳しい使い方は公式ドキュメントを参照いただければと思います。

今回使ってみてテンプレート毎にREADMEを書けるのは、汎用性があって使いやすいと思いました。下記のように注意事項やtipsを書き込んでおけるので、共有する上では非常に助かりました。
<img width="1187" alt="map.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103383/dc1640bb-dafa-46c1-0be7-7d3d94d9b6b8.jpeg">

その他に[変数データを別途JSON形式のファイルで保持できたり](https://fractal.build/guide/core-concepts/context-data.html)、[テンプレート毎にステータスを設定できたり](https://fractal.build/guide/core-concepts/statuses.html)と痒い所に手が届く機能も多いです。

### DOCUMENTATION
こちらはテンプレートとかはなく、純粋にドキュメントを書いていく部分になります。
使い方はその時の次第になるかと思いますが、 `docs` ディレクトリの最初のファイルがアクセス時のトップページになるので、目次やデザインガイド全体のルールを載せると良いかと思います。

もちろん単純な文字だけでなく、[変数的な使い方](https://fractal.build/guide/documentation/#using-data-in-page-templates)をすることもできます。
詳しい使い方は公式ドキュメントを参照いただければと思います。

## 使ってみた所感
正直言うと、かなり良いものを見つけることができたと思います。導入も簡単で使い勝手も良いので、今後似たような案件の場合、Fractalを使用しても良いなと思いました。
もちろん、気になった点もいくつかあるので書いておきます。（いくつかはissue出してみようかな…）

### 良いと思った点
- npm利用ですぐにインストール・起動ができる
- 起動オプションにホットリロードがある
- buildで `dest` を作成できる
- 機能もディレクトリ構造も簡潔で分かりやすい

### 気になった点
- npmを利用するので純粋なデザイナーさんだけでは導入できなさそう？
- ホットリロードはあるが、記述にエラーがある場合強制シャットダウンされる
- `お願いします→お願いし〼` のように日本語が謎の変換される（おそらく文字コードあたりの設定のような気がする）

他のフレームワークも同じような機能はありますが、導入前に調べた限り ***扱いが簡単*** という点ではFratalが一つ飛び抜けているかと思います。

今回はここで終わりになりますが、ご感想やご指摘ありましたらどうぞよろしくお願いします。

## あとづけ
ちなみに弊社、Tech系以外にも会社ブログも掲載してますので、気になった方は是非どうぞ。
https://www.wantedly.com/companies/ks-rogers
YouTubeのWebサイト埋め込みテクニック【基本編】動画の埋め込みと設定

#はじめに

Youtubeの動画やプレイリスト（再生リスト）を、自分のブログやWebサイトに埋め込みたい。
そんな時はYoutubeで生成できる埋め込みコードをコピーして利用するのが基本となります。
それくらい知ってるよ！という方も多いと思いますが、実は埋め込みコードには非常にたくさんのオプションが用意されており、これらを使いこなすことでYoutube動画の埋め込みを様々にカスタマイズできます。

今回はまず、基本となる動画埋め込みの方法アレコレについて紹介します。


#目次
【基本編】動画の埋め込みと設定
1. Youtube動画をブログに埋め込む
2. 横幅 / 縦幅を調整して埋め込み
3. 動画のタイトルを非表示に
4. 動画の終了後、関連動画を表示させない
5. プレーヤーのコントロールを非表示に
6. Youtubeのプレイリストを埋め込む方法



#1. Youtube動画をブログ等に埋め込む

ブログやサイトにYoutube動画を埋め込みたい時、もっとも簡単な方法がYoutubeから直接「埋め込みコード」を取得し、コピペするという方法です。
```
<iframe width="560" height="315" src="https://www.youtube.com/embed/動画ID" frameborder="0" allowfullscreen></iframe>
```
コピーした埋め込みコードをブログに直接貼り付ければ、Youtube動画がブログから見れるようになります。
なお、埋め込みコードの欄に「リクエストによる埋め込み無効」と書かれている場合はブログやサイトに動画の埋め込みは出来ません。
例え、コピペした埋め込みコードのURL部分だけを書き換えても、動画は再生できません。
このリクエスト無効設定は増加傾向にあり、企業が運営する公式アカウントやYoutuberなどもリクエスト無効を使うのが当たり前になってきています。
（リクエスト無効設定はYouTube側の動画設定で行います。）


#2. 横幅 / 縦幅を調整して埋め込み

```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID" frameborder="0" allowfullscreen></iframe>
```

ブログに貼り付けたけど、記事の横幅やバランスを考えてと幅を調整したい。
こんな場合は、貼り付けた埋め込みコードのwidth=”XXX” height=”XXX”の部分を横幅に合うように調整すれば大丈夫です。上記は幅718px（width=”718″）に設定しています。

横幅と縦幅は、Youtubeの「埋め込みコード」欄からも設定できます。こちらで設定すると、横幅に合わせて自動で縦幅を指定してくれるので楽になります。
縦横比を計算するくらいならYoutubeで設定しましょう。
#3. 動画のタイトルを非表示に

上部分に表示されていた動画のタイトルを非表示にできます。動画のタイトルにはYoutubeへのリンクが設定されています。クリックしてYoutubeへ飛んでしまうのを避けたい場合は良いでしょう。

```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?showinfo=0" frameborder="0" allowfullscreen></iframe>
```

基本は同じです。URL部分のすぐ後ろに?showinfo=0を追記するのみでO.K.これでタイトルが表示されなくなります。見た目がシンプルになるのもgood!

#4. 動画の終了後、関連動画を表示させない

埋め込んだYoutube動画は、終了すると自分のものでない関連動画がババッと出てきてしまいます。この仕様が不都合な場合についてです。
```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?rel=0" frameborder="0" allowfullscreen></iframe>
動画のURL部分のすぐに後ろに?rel=0を追記します。
```
こうすることで、動画が終わっても自身のチャンネルの関連動画に表示されます。
企業で運営するサイトで自社と関係ない動画を表示したくない場合は非常に有効です。

#5. プレーヤーのコントロールを非表示に

埋め込んだYoutube動画の下部分に表示されている、コントロールも非表示に出来ます。
```
<iframe width="718" height="408" src="https://www.youtube.com/embed/動画ID?controls=0" frameborder="0" allowfullscreen></iframe>
```
やり方はまったく同じで、URL部分のすぐ後ろに?controls=0を追記するだけ。これだけでコントロールが非表示になります。

しかし、この機能はあまりお勧めできません。クリックで動画の再生 / 停止は可能ですが、動画を飛ばしたり少し前に戻ったり出来ない上、字幕表示や画質の変更も不可能になります。UX的に微妙ですね。。。

#6. Youtubeのプレイリストを埋め込む方法
動画単体だけでなく、プレイリストをブログなどに埋め込むことも可能です。

ブログに貼り付けたいプレイリストを開き、「共有」という部分をクリックします。
動画を埋め込む時と同じやり方で、埋め込みコードをコピーして貼り付けるだけでO.K.！

```
<iframe width="718" height="404" src="https://www.youtube.com/embed/videoseries?list=プレイリストID&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>
```
?list=プレイリストIDの部分に、埋め込みたいプレイリストのURLを入力する方法でも同様の挙動になります。

#まとめ

今回は埋め込みコードの生成と基本となるパラメーター設定についてまとめました。
他にもいろいろと設定があるので、別途記事としてまとめていきます！

参考：YouTube公式リファレンス
https://developers.google.com/youtube/player_parameters?hl=ja

関連リンク
[YouTubeのWebサイト埋め込みテクニック【再生編】動画の再生方法を設定する](https://qiita.com/ktr1211/items/1b92ac8601d8368be8dd)
[YouTubeのWebサイト埋め込みテクニック【表示編】＆【応用編】高度な設定](https://qiita.com/ktr1211/items/ae0308a320fe2edca1fc)
Jenkins Pipelin(groovy)でslackのhistoryを取得してパースする

#コード
```groovy
import groovy.json.*

//URL
def url = "https://slack.com/api/groups.history?token=your_token&channel=your_channel_id&pretty=1"

def jsonResult = new URL(url).text  
def jsonParse = new JsonSlurper().parseText(jsonResult)

jsonParse.messages.each {
  println it.text 
}
```

#実行結果
```
MessageA
MessageB
.....
```
Railsでツイート検索

# 内容
RailsでツイッターAPIを用いてツイートの取得を行います。
## ツイッターAPIキーの取得
[Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ　※2019年8月時点の情報](https://qiita.com/kngsym2018/items/2524d21455aac111cdee)
上記の記事を参考に作成しました。
APIキー取得後ツイート取得のための下準備をします。
## .envファイルの使用
APIキーを念のために.envに書くようにする


Gemfileに　`gem 'dotenv-rails'`を記載し`bundle`


``` :Gemfile
gem 'dotenv-rails'
```

```
$ bundle install
```
### .envファイルの編集

``` :.env
TWITTER_CONSUMER_KEY=取得したキーを入れてください
TWITTER_CONSUMER_SECRET=取得したキーを入れてください
TWITTER_ACCESS_TOKEN=取得したキーを入れてください
TWITTER_ACCESS_TOKEN_SECRET=取得したキーを入れてください
```
### settings.ymlの編集

``` settings.yml
twitter_api:
  consumer_key: <%= ENV['TWITTER_CONSUMER_KEY'] %>
  consumer_secret: <%= ENV['TWITTER_CONSUMER_SECRET'] %>
  access_token: <%= ENV['TWITTER_ACCESS_TOKEN'] %>
  access_token_secret: <%= ENV['TWITTER_ACCESS_TOKEN_SECRET'] %>
```
## ツイート検索
### 準備
Gemfileに　`gem 'twitter''`を記載し`bundle`

``` :Gemfile
gem 'twitter'
```
```
$ bundle install
```
### 検索(Controller)
ハッシュタグ付きまたは、ハッシュタグなしのキーワードで検索しています。

``` .rb
  def index
    @tweets ||= []
    tweet_search('検索するワード')
  end

  def tweet_search(keyword)
    # ツイート検索のオプションを記入
    twitter_params = { count: 15, lang: 'ja', result_type: 'recent', exclude: 'retweets', tweet_mode: 'extended' }
    begin
      @tweets = twitterClient.search("##{keyword} OR #{keyword}", **twitter_params).take(10).map do |tweet|
      {
        tweet_link: "https://twitter.com/#{tweet.user.screen_name}/status/#{tweet.id}"
      }
      end
    rescue => exception
      @tweets = []
    end
  end

  def twitterClient
    @twitterClient ||= Twitter::REST::Client.new do |config|
      config.consumer_key = Settings.twitter_api.consumer_key
      config.consumer_secret = Settings.twitter_api.consumer_secret
      config.access_token = Settings.twitter_api.access_token
      config.access_token_secret = Settings.twitter_api.access_token_secret
    end
  end
```
### 表示
ツイッターにはツイートを表示する際に規約があるのでそれに準ずるためにレイアウトを独自に組むOR埋め込み、今回は埋め込みを使います。
https://developer.twitter.com/en/developer-terms/display-requirements.html

``` .erb
  <% @tweets.each do |tweet| %>
    <blockquote class="twitter-tweet tw-align-center" data-lang="ja" data-cards="hidden">
      <%= link_to '',tweet[:tweet_link], target: :_blank %>   
    </blockquote>
  <% end %>
  <%= javascript_include_tag '//platform.twitter.com/widgets.js', charset: 'utf-8', async: 'async' %>
```
学習記録＃2

#今日やったこと

- 手慣らしタイピング：四葉・逢坂・十「LOVE&GAME」
- progate：GitⅠ
- Git環境構築

#####読んでよかったもの
[【300時間でやりきる！】Webエンジニアになるまでに学習すべきこと全部まとめました-基礎編](https://startgeeks.jp/programming-articles/programming-learning/web-engineer-learning-all-base)

#####課題点
- Bracketsをデフォルトエディタに設定しようとするとエラーが出る
- 理解度ばっちりとは言えない

##progate：GitⅠ
1周目。とりあえず一通り触ったけどまだまだ。実際に開発して使っていかないとわからないかもしれないな～と感じる。

##Git環境構築
インストールからアカウント取得などprogateのチュートリアルに従って構築。無事にhtmlファイルを一つアップロードすることができた。
[macOS]zshでgitのブランチ名を表示させる

<p>Mojaveまでは、手動でCommand Line Toolsをインストールしたら設置されるスクリプトを使ってbashでgitのブランチ名を表示させていたが、Catalinaからは設置されないようになったようだ。また、Catalinaからはzshがデフォルト・シェルになったということで、zshでgitのブランチ名を表示させる方法を調べた。</p>

<p>ホームディレクトリ配下に.zshというディレクトリを作って、そこにgit-completion.zshとgit-prompt.shをダウンロードして配置する。</p>

<pre><code>% cd
% mkdir .zsh
% curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh -o ~/.zsh/git-completion.zsh
% curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -o ~/.zsh/git-prompt.sh
</code></pre>

<p>.zshrcに以下のコードを追加する。</p>

<pre><code># Git
 
fpath=(~/.zsh $fpath)
 
if [ -f ${HOME}/.zsh/git-completion.zsh ]; then
        zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.zsh
fi
 
if [ -f ${HOME}/.zsh/git-prompt.sh ]; then
        source ${HOME}/.zsh/git-prompt.sh
fi
 
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto
 
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
</code></pre>

<p>これで、zshのプロンプトにgitのブランチ名が表示されるようになる。</p>

【関連情報】
<a href="https://cocoa-kanto.connpass.com/">Cocoa.swift</a><br />
<a href="https://www.facebook.com/groups/cocoa.kanto/">Cocoa勉強会 関東</a><br />
<a href="http://www.bitz.co.jp/weblog/">Cocoa練習帳</a><br />
次の電車/バスの時間をSiriにおしえてもらう


# こんなの つくりました
![Siriに次の電車／バスの時間をおしえてもらう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239549/799de54e-91f5-9139-0e98-3ee55794d98b.png)
![Siriに次の電車／バスの時間をおしえてもらう (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239549/a52f0ab8-4328-88ca-9de3-2032d7c6d740.png)



つくったものは こちらに公開しています：　

- 阪急バス用
https://www.icloud.com/shortcuts/2c8453ed75194582bdb7d5b7185bd3ba

- 阪急電車用
https://www.icloud.com/shortcuts/e63bbafcf8954e3dab84023301890542

（別バージョン）次の電車までの時間が3分以下なら音楽を再生する
https://www.icloud.com/shortcuts/da6d9ce025c44486b04bfcd2beb87588



## 登録のしかた
iPhone or iPadから上のリンクにアクセスして、
画面の下の「信頼されていないショートカットを追加」をタップすると使用可能です。
（「信頼されていない」とありますが、画面にはショートカットの内容が表示されますので、内容を確認できて安心かと思います）
その後、質問の画面に移動しますので、駅名などの質問にいくつか答えて設定してください。

## 話しかけて使う方法
https://support.apple.com/ja-jp/HT209055

## 話しかけずに使う方法（ウィジェットのボタンをタップ）
https://support.apple.com/ja-jp/guide/shortcuts/apda11a05448/ios


# ポイント

- カスタマイズできる
他の人がつくったショートカットをベースに、自分好みに編集することが出来ます。
編集はiPhone or iPadの"ショートカット"アプリ内で行います。（パソコン不要）
読み上げの話す速度から、他の機能の追加までいろいろできます。
（iPhoneのデフォルト機能（Wi-Fiの有効化/無効化などなど）や、他のアプリの動作（一部ですが）など）
"if文"なども使えるので、アイデア次第でいろいろできそう。


# しくみ
何分後かを調べる方法としては、
阪急バス/阪急電車のホームページにアクセスして、「何分後」に関わる部分を抜き出しています。


# iOSの"ショートカット"について
過去の記事で熱く語りましたので、ご参考に。
https://qiita.com/ikechan/items/b43d9f9a8932427a8ca2
（「自宅までの所要時間読み上げ」の"ショートカット"もあり）

# おわりに
とくにバスの方は、自分自身も頻繁に使っています。雨の日に遅れるケースが多いですし。
阪急バスのホームページもとても見やすいので、スマホを操作できるときはそちらで十分なのですが。
電車については、スマホアプリの「Yahoo!乗換案内」がとても便利です。
"ウィジェット"として表示できるので、アプリ起動不要です。
というわけで、スマホを持ったり見たりしたくないとき向けというニッチな感じですが、
自分は割と気に入って使っています。

最近追加された"オートメーション"機能を使えば、特定の場所に来た時点で、自動で読み上げできるかと思って非常にワクワクしたのですが、
やはり自動読み上げはできないようで、画面にサジェストされたボタンを押す必要があるようでした。。。
【JavaScript】二進法を使って複数の曜日を単一のレコードで保存する

#例
バイトのシフトテーブル

|id  |name  |number  |
|---|---|---|
|1  |平日  |62  |
|2  |休日  |65  |
|3  |月水金  |42  |

#コード（jQuery)

<p class="codepen" data-height="265" data-theme-id="0" data-default-tab="html,result" data-user="ikeou3" data-slug-hash="zYYEJoM" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="zYYEJoM">
  <span>See the Pen <a href="https://codepen.io/ikeou3/pen/zYYEJoM">
  zYYEJoM</a> by ikeou (<a href="https://codepen.io/ikeou3">@ikeou3</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

#やっていること
###月・水・金（例のid:3）をチェックした場合
①各チェックボックスのvalueを取得し合計を算出
　月曜：2 ＋ 水曜：8 ＋ 金曜：32 ＝ 42
②合計値をDBに登録（今回は割愛）
③DBからデータを取得（今回は割愛）
④取得してきたデータを二進法表記に変更
　42 → 101010
⑤二進法表記を7桁に修正
　101010 → 0101010
⑥各桁の値を取得
⑦取得してきた値が「１」の桁をピックアップ
　0101010
　2,4,6桁目
⑧十進法に戻す（コードでは曜日の配列と突合）
　2桁目が1 → 0000010 → 2 → 月曜
　4桁目が1 → 0001000 → 8 → 水曜
　6桁目が1 → 0100000 → 32 → 金曜

#参考
|  |十進法  |二進法  |
|---|---|---|
|日曜日  |1  |0000001  |
|月曜日  |2  |0000010  |
|火曜日  |4  |0000100  |
|水曜日  |8  |0001000  |
|木曜日  |16  |0010000  |
|金曜日  |32  |0100000  |
|土曜日  |64  |1000000  |