OmniAICreator/Qiita-1.07M huggingface dataset:
rspecでメソッドが呼ばれた/呼ばれてない事の検証

rspec 3.7  

allow receiveで監視対象をしっかり指定出来ていなかったり、地味にハマったので基本的な形を忘れないように。。。  

```rb

describe 'Authenticate' do
  context 'twitter user' do
    let!(:user) { TwitterUser.new }
    before do
      allow(FacebookLoginService).to receive(:login)
      allow(TwitterLoginService).to receive(:login)
      AuthenticateService.execute(user)
    end
    it 'twitter login called once' do
      expect(TwitterLoginService).to have_received(:login).once # 1回呼ばれること
    end
    it 'facebook login is not called' do
      expect(FacebookLoginService).not_to have_received(:login) # 呼ばれないこと 
    end
  end
end

```

参考  
- https://relishapp.com/rspec/rspec-mocks/docs/setting-constraints/receive-counts
- https://relishapp.com/rspec/rspec-mocks/docs/basics/spies
growpartがコケる件

EBSを拡張して反映しようとしたらgrowpartが謎のエラーを吐き、拡張ができませんでした。

```console
$ sudo growpart /dev/xvda 1
/usr/bin/growpart: 175: /usr/bin/growpart: arithmetic expression: expecting primary: "シリンダ*ヘッド*63"
$ sudo resize2fs /dev/xvda1
resize2fs 1.42.9 (4-Feb-2014)
The filesystem is already 2094474 blocks long.  Nothing to do!
```

どうやらシェルのLANGの問題との事で、

```console
$ locale
```

で

```sh
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=ja_JP.UTF-8
```

となっていたので

```console
$ sudo su - 
# export LC_ALL="en_US.UTF-8"
```

で変更して、再度

```console
# growpart /dev/xvda 1
CHANGED: partition=1 start=16065 old: size=16755795 end=16771860 new: size=37720620,end=37736685
# resize2fs /dev/xvda1
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/xvda1 is now 4715077 blocks long.
```

でOKでした。

### 参考サイト
[growpartがこけるときの対応](https://hacknote.jp/archives/7575/)
これがベストだと思ったBashの表示(プロンプト)設定

# 設定方法

bashrc を編集
`vi ~/.bashrc`

下記を追記

```
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[32m\]\u\[\033[00m\]:\[\033[34m\]\w\[\033[36m\]$(__git_ps1)\[\033[00m\] $ '
```

設定の反映
`source ~/.bashrc`


# 表示イメージ

<font color="ForestGreen">username</font>:<font color="DarkBlue">~/full/directory/path</font> <font color="DarkCyan">(branch-name)</font> $


# ベストな設定の探索

試すだけなら下記コマンドを実行して、最終的にbashrcに反映する
`export PS1=""`


# 設定の理由
- User名もいらないのですが、なんとなくあるとスペース感覚が落ち着くので
- 標準設定ではホスト名を表示していたが、特段クライアントマシンでは不要と考えたので
- 現在のブランチ表示が知りたかった
- 色味があると読みやすい
- 色味があると目を惹きやすい

---

役に立つ情報発信できてる実感があるので「いいね」とっても嬉しいです^^ありがとうございます
Githubのwindows95を起動してみた

## 参考

* https://github.com/felixrieseberg/windows95/releases
* Electron製
* Ubuntu 18.04にて動作確認。とても常用にはできないことがわかった。

## 実行方法


```sh
# インストール
dpkg -i windows95-linux_1.3.0_amd64.deb

# 起動
windows95
```

真ん中のをクリックするとデスクトップが表示される。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e6a7ad46-dd6c-abf7-6b40-51832b7d06e1.png)

急にデスクトップが表示される。
これは通常起動してもここまでたどり着かないのでは？という問題のためstate saveからのloadなのだと思います。

上のメニューからRestartしても起動1分待っても変わらなかったので放置しました。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c13447d2-890e-c4e2-8117-e1ce36e19969.png)

![0.png](https://qiita-image-store.s3.amazonaws.com/0/25728/27ba8731-fc6b-b7fc-2467-9e33ccb10968.png)

コマンドプロンプトの表示がおかしい。
(enとかusとかで言語切り替え必要ってわけでもなさそうだが・・・)
c:\Fun\Games\ 以下に rogueやtetrisがあるみたいですが、表示の乱れのため何も出来ない。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e3ca58ed-e997-a3a3-f679-fef042fae6ff.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/25728/f100e300-75da-6a1d-bcd2-135fe5dfa9b7.png)


## おかしい場合の対処

~/.config/windows95/
を削除すると、初期状態になる。


## DISKイメージの実態

* /usr/lib/windows95/resources/app.asar.unpacked/src/images/windows95.img
    * 231MB

## インターネット・アーカイブのwindows95

* https://archive.org/details/windows_95_vdi
    * https://archive.org/search.php?query=creator%3A%22Microsoft%22&page=5

creatorが Microsoft なので、MicrosoftがUPしているのか・・・？
(問題があるものは申告ベースで個別で削除されるものっぽい)
SQLで特定の文字を含むor含まないレコードの取り出し

# 特定文字のLIKE検索

一応メモ
LIKE検索は正規表現使えばいろいろできそうですね。

でも正規表現使ってるので処理速度が遅くなりそう…
他にもっといい方法もあるのでしょうか？

参考記事
https://qiita.com/cncyng/items/b7f53f1b6da227dfdbd9

## SQLで特定の文字を含むレコードの取り出し

```sql
SELECT * FROM table WHERE column LIKE '%含む%';
```

## SQLで特定の文字を含まないレコードの取り出し


```sql
SELECT * FROM table WHERE column NOT LIKE '%含まない%';
```

## 複数指定したければ

```sql
SELECT * FROM table WHERE column LIKE '%含む%' AND column2 LIKE '%これも%';
```
PHPプロジェクトをレンタルサーバーにデプロイする方法


私は、さくらのレンタルサーバーで試しましたが、他のレンタルサーバーでもssh接続できればこの手順でできると思います。

## git 環境を構築し、ファイルをアップロードする

git環境の構築はコチラに書いています。
https://qiita.com/junpeko5/items/087704082df9912cb4fd

## ローカルのDBをエクスポートする

phpmyadminなどのDBクライアントより、データベースをsqlファイルでエクスポートしておきます。

## リモートのDBにインポートする
リモート側のデータベースを新規作成して、ローカルよりエクスポートしたsqlファイルをインポートします。

この時、設定したデータベース名、ユーザー名、パスワード、ホスト名は必要になるので、メモしておきましょう。

## dotenvで環境が異なっても動作するように設定する

先ほどメモした、DB情報を.envファイルに書き込みます。
.envの導入はコチラに書いています。
https://qiita.com/junpeko5/items/6754efcd014ae86a5aed
AWS IoTへの展開

AWS IoTへの展開にあたって、AWSのクラウド以外の情報を整理して見る。

AWS IOT の簡単な使い方
https://qiita.com/ekzemplaro/items/9b1293428c69cd2025cd

AWS IoT を まずは試してみる
https://qiita.com/uchidaaaaaa/items/1d80ce0c59e69337831c

AWS IoTの利用手順
https://qiita.com/uenohara/items/ba83d70c7bfebf71205b

##CLI

AWS IOT を AWS CLI で設定
https://qiita.com/ekzemplaro/items/a95df050833204c266fb

[AWS CLI] AWS IoTの作成
https://qiita.com/web_se/items/e2de72d1276522ab7e77



#MQTT

AWS IoTとは
https://qiita.com/uenohara/items/1336e0538375c73a1d0b


AWS IoT 調査 (途中)
https://qiita.com/propella/items/da6b10f82c84be7e6996

AWS IoT
https://qiita.com/kunitaya/items/3e8381f27bfd95e71603

## python
micropythonでAWS IoTにデータ転送
https://qiita.com/ken5owata/items/ac18b0d14e58e0eae124

## Raspberry PI
[AWS×IoT] AWS IoT エンタープライズボタンを使ってラズパイにMQTTでメッセージをPublishする
https://qiita.com/is_ryo/items/a4a5a1f8a838301d80df

## Arduino
AWS IoT for Arduino SDKについて
https://qiita.com/saicologic/items/ef2a382e77ecb02e2048


#AWS IoT デバイス SDK
GPD Pocket2 に Ubuntu 18.10 を入れてみた

# TL;DR

- 素の Ubuntu 18.10 をインストールしただけで、実用的なレベルで動作してくれる。

# GPD Pocket2 について

[GPD Pocket2: 7.0' UMPC-Laptop 'WIN 10 OS'](https://www.indiegogo.com/projects/gpd-pocket2-7-0-umpc-laptop-win-10-os#/)
という Ultra Mobile PC ですね。

GPD Pocket の初代から大きく変わった点として CPU が Intel Atom x7-Z8750 (Cherry Trail) → Intel Core m3-7y30 (Kaby Lake) になった。これにより性能劇的アップはもちろん、Linux Kernel に patch あてたりすることなく標準の driver で実用的に動くようになり、Linux インストールのハードルが下がって嬉しい。

# 動く / 動かない

Ubuntu 18.10 をインストールして動作確認してみた。

## 動作確認済み

- video
    - 1200x1920
    - ローテーション
    - 輝度変更 (キーボードからの変更も可)
- タッチスクリーン
    - マルチタッチ
- WiFi
    - 2.4GHz / 5GHz
- Bluetooth
    - HID (Keyboard / Mouse)
    - A2DP
    - HSP/HFP
- USB Type-A
- USB Type-C
    - 本体充電
    - USB Type-C Hub を繋いでの充電
    - Hub 通してのデータ送受信
    - Hub 通しての HDMI出力
- Sound
    - 音量調整
    - 本体Speaker出力
    - Headphone出力 (使用すると本体 Speaker はちゃんと mute になる)
    - 本体MIC入力
    - USB-DAC ([Mojo｜Chord Electronics](https://www.aiuto-jp.co.jp/products/product_1735.php) で確認)
- microSD
- バッテリー管理
- Suspend / Resume

## 未検証

- Hibernation

# 細かい設定

## HiDPI

さすがに 7inch で 1920x1200 をそのまま使うのは厳しいので scale 変更しますよ。

```~/.xprofile
xrandr --output eDP-1 --scale 0.75x0.75
```

DPI を変更する方法は色々とあるのだけど、x.org + GNOME3 だと現状では整数倍の scale しか選べないという謎仕様になっているため、 `xrandr` で強引に変更。

`0.75` の値が scale の倍率となるため、これを色々と変更すると他の解像度になる。

|scale|解像度|
|:--|---|
|1.0|1920x1200|
|0.8|1536x 960|
|0.75|1440x 900|
|0.666667|1280x 800|

`.xprofile` で設定すると GDM や自分以外のユーザーでは反映されないので最善策ではないと思うけど、とりあえずこれでうまくいったので様子見。

## GDM

GDM でもローテーションしたい場合はこんな設定で。

```/var/lib/gdm3/.config/monitors.xml
<monitors version="2">
  <configuration>
    <logicalmonitor>
      <x>0</x>
      <y>0</y>
      <scale>1</scale>
      <primary>yes</primary>
      <transform>
        <rotation>right</rotation>
        <flipped>no</flipped>
      </transform>
      <monitor>
        <monitorspec>
          <connector>eDP-1</connector>
          <vendor>unknown</vendor>
          <product>unknown</product>
          <serial>unknown</serial>
        </monitorspec>
        <mode>
          <width>1200</width>
          <height>1920</height>
          <rate>60.021636962890625</rate>
        </mode>
      </monitor>
    </logicalmonitor>
  </configuration>
</monitors>
```

ファイル中の `scale` の値を 1 → 2 に変更すると、GDM の解像度が `960x600` になってちょっと見やすくなります。

## console

起動時の console 画面のローテーションもしたいとき。

```/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="fbcon=rotate:1"
```

この設定で splash画面ではなく console でローテーションも正しくなります。

# 不具合

## GRUB2

起動時に GRUB2 のメニューが表示されない不具合がある模様。自分の環境でも再現したのだけど理由は不明。

自動起動の秒数設定を短めにして回避しています。


# Ubuntu MATE

まさかの公式が対応 → [Ubuntu MATE for the GPD Pocket and GPD Pocket 2 \| Ubuntu MATE](https://ubuntu-mate.org/gpd-pocket/)

"MATE よりも GNOME3 を使いたい!!" という方は、素の Ubuntu を入れるのが良いと思います。


# See Also

- [stockmind/gpd\-pocket\-ubuntu\-respin: Collection of scripts and tweaks to adapt Ubuntu and Linux Mint ISO images to let them run smooth on GPD Pocket](https://github.com/stockmind/gpd-pocket-ubuntu-respin)
GitLabでmarkdownをプレビューする方法

# 概略

* GitLab で readme.md などの markdown ファイルがどんなふうに表示されるか、コミット前に確認する方法について調べたことを記述します。

# 背景
* 元々は VS Code のプレビュー機能を使用していたのですが、VS Code 上のプレビューで見えていたテーブルが GitLab では表現されない問題が発生しました。そこで 確実に GitLab でテーブルを見られることを確認したいと思ったのが動機です。
* 以前は、[GitHub Preview](http://github-preview.herokuapp.com/) を使用していたのですが、table が表示されないので、GitLabのプレビューに切り替えました。

# 環境

* Server：GitLab Community Edition 10.7.3

# 確認手順

- **2018/11/12 追記**  
下記手順を使わずとも、GitLab のWikiを使えばファイル作成時にプレビューできそうです。

1. GitLab で新規ファイルを作成する
![mkdown_prev.png](https://qiita-image-store.s3.amazonaws.com/0/41649/4350f7cf-6091-faf0-73e1-41e8375f4fa4.png)

2. ファイル名を入力して、空の状態でコミットする
![mkdown_prev02.png](https://qiita-image-store.s3.amazonaws.com/0/41649/abaa840a-d1ba-b8ab-11be-5c6416ff7d62.png)

3. [Edit]をクリックする
![mkdown_prev03.png](https://qiita-image-store.s3.amazonaws.com/0/41649/16198adb-351d-01be-4cab-7e19e01b34b9.png)

4. 編集して、[Preview]をクリックする  
![mkdown_prev04.png](https://qiita-image-store.s3.amazonaws.com/0/41649/5daf2163-cab8-ad57-e332-b8c286cd3eb1.png)

5. 内容を確認して、問題なければコミットする
![mkdown_prev05.png](https://qiita-image-store.s3.amazonaws.com/0/41649/a41f6170-df53-70db-8b81-2aed315e1d96.png)
PHP dotenv を素のPHPプロジェクトに導入する

## PHP dotenvの導入方法です

https://github.com/vlucas/phpdotenv

## なぜdotenvを利用するのか？

開発環境と本番環境でDB設定などの値が変わっても、環境設定のファイルを.envファイルに記述することで簡単に管理することができます。

##　composerのインストール

composerを利用します。
ローカルとリモート両方でインストールが必要です。
ダウンロードはコチラ。
https://getcomposer.org/download/


## プロジェクトのドキュメントルートに.envファイルを作成します。

```
touch .env
```

### .envファイルの書き方の例

```
DB_HOST="localhost"
DB_USER="root"
DB_PASS="root"
DB_NAME="cms"
```

## .envをロードする

アプリケーション側で、.envを読み込みます。

.envファイルのパスを引数に入れましょう。

### 例（.envが同階層にある場合）
```
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
```

### 例（.envが1つ上の階層にある場合）
```
$dotenv = new Dotenv\Dotenv(__DIR__ . '/..');
$dotenv->load(__DIR__ . '/..');
```

## getenvメソッドで定義した値を取得する

```
＄host = getenv('DB_HOST');
echo $host;        # lobalhost
```

## 注意点
.envファイルは環境ごとに異なるため、git管理の対象からは外しましょう。

### 補足
sshでローカルからサーバーにアップロードする場合の例です。

```
scp -r /Repository/.env hoge-user@hoge-user.sakura.ne.jp:/home/hoge-user/www/.env
```
Azure: immutable storageとGCP: Cloud Storage Bucket Lockをさわってみた

Azure: [immutable storage](https://azure.microsoft.com/ja-jp/blog/immutable-storage-for-azure-storage-blobs-now-generally-available/)とGCP: [Cloud Storage Bucket Lock](https://cloud.google.com/blog/products/storage-data-transfer/protecting-cloud-storage-with-worm-key-management-and-more-updates)をさわってみました。


# 機能概要

## Azure: immutable storage

- 時間ベースのリテンションポリシー
    - 指定した期間、書き込み・削除を禁止。期間終了後は書き込み禁止・削除可能。
    - 日単位で指定可能
- 訴訟ホールドポリシー
    - 訴訟ホールドがクリアされるまで書き込み・削除を禁止。
- 時間ベースのリテンションポリシーと訴訟ホールドポリシーは同時に指定可能

|時間ベースのリテンションポリシー|訴訟ホールドポリシー| |書き込み可否|削除可否|
|---|---|---|---|---|
|有効|有効| |×|×|
|期限切れ|有効| |×|×|
|設定無し|有効| |×|×|
|有効|設定無し| |×|×|
|期限切れ|設定無し| |×|◯|
|設定無し|設定無し| |◯|◯|

## GCP: Cloud Storage Bucket Lock

- retention policy
    - 指定した期間、書き込み・削除を禁止。
    - 秒・日・月・年単位で指定可能
- Retention policy locks
    - ポリシー自体のロックが可能。デフォルトはアンロック状態。

# Azure: immutable storageの設定例

## 時間ベースのリテンションポリシーの例
<img width="989" alt="azure1-timebased.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/6e29fe84-e9d6-efaf-f003-59d822156926.png">
## 訴訟ホールドポリシーの例
<img width="986" alt="azure1-legal.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/83028a40-c269-3d49-8533-203702b2f18f.png">
## 時間ベースのリテンションポリシーと訴訟ホールドポリシーを同時に指定した例
<img width="985" alt="azure1-both.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/2c6bce0c-31b4-ca48-5db6-4151d9b1e8c5.png">

# GCP: Cloud Storage Bucket Lockの例

## retention policyを設定
<img width="1070" alt="gcp1.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/a403d4c5-a790-7d44-8d6a-817e7bcdb0d5.png">
## オブジェクト単位でRetention expiration dateが表示される
<img width="1355" alt="gcp2.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/434bce5f-b060-d29a-04db-92bab2dc9d92.png">
## Retention expiration date以前に削除しようとするとエラーになる
<img width="731" alt="gcp3.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/3f4882f9-3cbf-d1b4-f519-8111942f1a2b.png">

# 雑感

- 金融系とかコンプライアンスが厳しいところ向けの機能でしょうか。
- AWSもRe:Invent ~~あたりで追従するのかな~~で追従してました。
    - https://aws.amazon.com/about-aws/whats-new/2018/11/s3-object-lock/
【Unity】UGUIでuiの上にカーソルが重なったらメッセージを出す

#更新
2018/11/1 続きの記事を書きました
[【Unity】UGUIでuiの上にカーソルが重なったらメッセージを出す その2](https://qiita.com/daria_sieben/items/be2ac7acfef77d69767c)



#概要
よくアイコンの上にマウスカーソルを重ねるとポップアップでメッセージが表示されるみたいなことをやりたくて試しにuguiを使って作ってみました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">uguiでuiの上にマウスが乗ったらメッセージを出すみたいなことがやりたくて朝からやってやっとできた <a href="https://t.co/NaDMQ5e4gi">pic.twitter.com/NaDMQ5e4gi</a></p>&mdash; ダリア (@daria_nicht) <a href="https://twitter.com/daria_nicht/status/1056354481334497280?ref_src=twsrc%5Etfw">2018年10月28日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


○使うもの

・IPointerEnterHandler
uGUIで作成したuiの上にマウスカーソルが重なったときに呼ばれるイベントOnPointerEnterを呼ばれるようにするインターフェース。
一度重なったら2回目は呼ばれず、再び同じuiでこのイベントを呼ぶためには一度uiから離れるか他のuiに重なる必要がある。

・IPointerExitHandler
上のイベントと逆で一度重なったuiから離れたり他のuiに重なったときに呼ばれるイベントOnPointerExitを呼ばれるようにするインターフェース。



#サンプルコード

```c#

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class HelpBox : MonoBehaviour , IPointerEnterHandler, IPointerExitHandler
{
	[SerializeField] private string _helpMessage;

	[SerializeField] private Text _text;
	private const Vector2 POPUP_OFFSET = new Vector3(0, 10);
	public void OnPointerEnter(PointerEventData eventData)
	{
		_text.transform.position = eventData.position + POPUP_OFFSET;
		_text.text = _helpMessage;
		_text.transform.gameObject.SetActive(true);

	}

	public void OnPointerExit(PointerEventData eventData)
	{
		_text.transform.parent.gameObject.SetActive(false);
	}
}
```

#詳細

上記2つのインターフェースを継承したコンポーネントを作成し、uiが重なったらserializeFieldで設定したテキストを表示し、uiから離れたらテキストを非表示にするようにしました。
このコンポーネントをメッセージを表示したいゲームオブジェクト(動画の部分で言うとImageとButton)追加するだけで呼ばれます。
気をつけないといけないのは、serializeFieldで設定したTextのRaycast Targetを外さないとポップアップで表示された時にカーソルが重なるためOnPointerExitが呼ばれて、OnPointerExitが呼ばれるとポップアップが非表示になるためすぐにOnPointerEnterが呼ばれてまたポップアップが表示され…というループを繰り返してしまいます。
![2018-10-29_00h56_25.png](https://qiita-image-store.s3.amazonaws.com/0/59907/056b4fd1-58bf-5f11-9844-4619b96bf95f.png)



#問題点

現状これでポップアップの表示はできましたが、汎用的に使っていくと考えるとこのコンポーネントには以下の問題があります
・つけるオブジェクトすべてに同じポップアップで使うTextを設定しないといけない
・ポップアップを表示したくないゲームオブジェクトのUiのRaycastTargetのチェックを外さないといけない

なので、こういう事ができたらいいのかなと思っています。
・Rayがあたったゲームオブジェクトが特定のインターフェース(コンポーネント)を持ってたらポップアップを表示する
・ポップアップ管理クラスがポップアップ用のTextを保持しておいて、Rayが当たった座標だけもらってそこに表示するようにする。

ざっと調べた感じEventSystem周りの構造を理解すれば実現可能…？
【Python】listを保存する【備忘】

# 自分用です。
間違ってたら教えてください><

# こまったこと
listをcsvに出力したかった。
pandasのぬるま湯に浸かってしまったので、pythonの入出力のやり方を忘れてしまった。頑張れ俺の脳細胞。

# やったこと
```
import pandas as pd

lst = ['tomato', 'norainu', 'keisatus']
data = pd.DataFrame(lst)
data.to_csv('../res/data.csv',index=False, header=False)
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139767/c47212ce-cd10-39c1-c09f-bb8e7439822a.png)

# ええんか
ええんか
【Python】np.arrayの中のNaNを削除する【備忘】

# 自分用です。
間違ってたらごめんなさい。

# こまったこと
np.arrayの中にNaNがあってとても嫌だった。

# やってしまったこと
for文で一々NaNなのか判定してしまった。

# こうするとよさそう
```
import numpy as np

arr = np.array([0, 1, 2, np.nan, 3])
print(arr[~np.isnan(arr)])
# array([0., 1., 2., 3.])
```

# すごい
ずっと見ていられる
【Python】リストをアンパックする(複数の変数に展開する)【備忘】

# 自分用の記事です。
間違ってたらごめんなさい。

# こんなことをしてしまった
```
lst = [0, 1, 2]
a, b, c = lst[0], lst[1], lst[2]
```
すごく非効率

# こうすればよかった
```
a, b, c = lst
print(a)
print(b)
print(c)
# 0
# 1
# 2
```

以上。
PhpStormでLaravelの不要なキャッシュファイルを検索から除外する

デフォルトでは、Laravelで余計なキャッシュファイルまで検索にひっかかります。PhpStormにて、除外するカテゴリを指定すれば検索にでてこなくなります。
<img width="654" alt="スクリーンショット 2018-10-29 10.02.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/72150/89b8a40d-b4dd-8d98-2aac-e1a475be0464.png">
raspberry Piで最初にすること

# はじめに
半年に一回くらい触ろうとして毎回調べながらやっているので時間もかかるしナレッジも溜まらないので意を決してまとめることに。
自分のためのメモなので。

# 前提条件
raspberry Pi 3 
NOOBsでraspbianのインストールが終わっている

# 基本的な設定（インストール時に設定できるので設定したならばlocale以外は問題ない）

```
sudo raspi-config
```

`* Network Option->hostname
                ->Wifi->　SSIDとそれに対応したパスワードを選択`

`* change user password
同じパスワードを2回打つとパスワードを変更できる。`


`* locale -> ja_UTF-8に変更`

`* advanced->expand filesystem
ストレージの領域を解放する。やっといたほうがよさそう。`
# 諸アップデート作業（脳死でする）
```
sudo su　
apt-get update　
apt-get upgrade
apt-get dist-upgrade
```
あるいは

```
sudo su ; apt-get update ; apt-get upgrade -y ; apt-get dist-upgrade -y
```
と一行で実行しても良い。


# 他のPCからアクセスするためにSSHサーバをオンにする

```
sudo touch /boot/ssh
``` 

# 日本語フォントをインストールする

```
sudo apt-get install fonts-takao ibus-mozc
```
アイデアの宝庫

#目次
[１．課題について](#１課題について)
[２．アプリの特徴について](#２アプリの特徴について)
[３．ターゲット・ペルソナ](#３ターゲットペルソナ)
[４．制作行程について](#４制作工程について)
[５．感想](#５感想)



#１．課題について
　私は独創的な発想力というものにとても憧れを抱いています。
　よくテレビのバラエティ番組などで芸能人がアイデアの詰まったリフォームや料理をしているのをよく拝見します。時間があるときに私も真似しています。
　私は人の数だけアイデアが存在すると考えています。テレビによって芸能人のアイデアが広く伝えられているように、一般人の間でもアイデアを共有することができたらとても充実した生活をおくることができるとおもいます。
#２．アプリの特徴について
　このアプリを利用している人たちが製作したアイデアの詰まったものを製作方法も含めてジャンルを問わず投稿し共有できるようにしました。また気になった投稿には☆にチェックを入れることで、自分の気になったものをひとつのページにまとめられるようにしました。このアプリを使うことで、使用者の生活や部屋などをより充実したものにし、また他の人のアイデアを見ることで新たなアイデアが誕生するかもしれません。
#３．ターゲット・ペルソナ
　ターゲットは、一人暮らしをはじめる人や、今の部屋にいまいち納得のいっていない人といった部屋レイアウトに悩んでいる人です。

#４．制作工程について
　まずスマートフォンでもprottをダウンロードし、スマートフォンから画像を送りました。画像を下地にして作成することで、真っ白から始めるよりも構成が整っているため進めやすいです。![キータ１１.png](https://qiita-image-store.s3.amazonaws.com/0/300865/026e2192-275c-09ad-a22a-3c004fdb3112.png)
　↑　ちなみにパソコンでprottを開いて、＋のところをおして「ワイヤーフレームを描く」を押すと無地の状態から始められます。![キータ２.png](https://qiita-image-store.s3.amazonaws.com/0/300865/7efaed29-26cf-c0c9-20f7-f52a7daf9aa0.png)
　↑　私は画像を下地にしたので、このような画面になりました。![キータ１.png](https://qiita-image-store.s3.amazonaws.com/0/300865/6f2e95e0-0447-c7ba-5c61-18715fe72794.png)
　↑　次に図形の配置をしました。左の図形をドラッグすることで配置することができます。「web」や「iphonx」のところをクリックするともっとたくさんでてきます。左上の丸く囲ってあるところをクリックするとさらにたくさん種類がでてきます。「text」など文字をいれられたりするものもありますが基本はただの飾りなので自由に配置しました。![キータ３.png](https://qiita-image-store.s3.amazonaws.com/0/300865/c8b8e152-01b0-91f8-83c3-8ab37fe9568b.png)
　↑　「スクリーンの設定」をクリックするとでてくる所の右上の「縦幅」の数値をいじるともっと下へ領域を伸ばすことができます。![キータ４.png](https://qiita-image-store.s3.amazonaws.com/0/300865/90700ce2-49c7-8adf-b586-6d854546f62e.png)
　↑　次に画像の配置を行いました。「画像」の横にある＋をクリックすると、パソコンに保存されている画像を使うことができます。開いた画像は下にストックされるのでいつでもたくさん使うことができます。配置は図形を配置したときと同じ要領でできます。
![キータ５.png](https://qiita-image-store.s3.amazonaws.com/0/300865/69353dde-0e80-e778-edc1-c91067b04013.png)
　↑　作成が完了したら保存をし戻ります。いくつかページを作っておくことでアプリの完成度も上がります。![キータ７.png](https://qiita-image-store.s3.amazonaws.com/0/300865/6cf298c3-f5c2-ecb4-b6d5-6af718c948ed.png)
　↑　次にクリックを設定しました。右の黒い領域内でドラッグをするとオレンジ色の領域が現れます。![キータ８.png](https://qiita-image-store.s3.amazonaws.com/0/300865/6539abee-6d24-ded5-cd54-fa71b87db374.png)
　↑　その後、他のページをクリックすることでページをつなぐことができます。実際に今作っているものをアプリとして運用したとき、オレンジ色の領域の部分をクリックすることで、指定されたページへ飛ぶことができるということです。![キータ９.png](https://qiita-image-store.s3.amazonaws.com/0/300865/3e0230c6-a8e7-c0ee-9b0c-62a3f96e7817.png)
![キータ１０.png](https://qiita-image-store.s3.amazonaws.com/0/300865/8e0a80e0-fbc3-d771-806a-ca194fb7d250.png)
　↑　画面の上の方にある「遷移図」をクリックすると、このように先ほど設定したページとページをつながりをわかりやすくまとめられることができます。

できた作品は[こちらから][link-4]
[link-4]:https://prottapp.com/p/793e0b
他の作品は[こちらから][link-5]
[link-5]:https://qiita.com/shigeru-suzuki/items/409137c96ee739509487
#５．感　想
　 初めはやり方がよくわからず探り探りでしたが、操作方法もとくに特殊な操作が求められるようなことはなくすぐにコツがつかめました。私ができたらいいなと思ったことが想像していた以上に簡単にできてとても嬉しかったです。実際に本格的なアプリを作るとなれば、それ相応の技術や知識が必要になりますが、このようにあらかじめprottで作成をしてしまうことでアプリ製作も効率よく進められると思います。私は今回の実習を通して本当にこのアプリを作りたいと思えるほどアプリ制作に興味がわきました。

静岡県立島田商業高校　こちら[クリック][link-1]
[link-1]:http://www.edu.pref.shizuoka.jp/shimada-ch/home.nsf/IndexFormView?OpenView
prottサイト　こちら[クリック][link-2]
[link-2]:https://prottapp.com/ja/
SQLAlchemyをMySQLで主キーをUUIDにするならSQLAlchemy-Utilsが便利

## 概要

UUIDを主キーとして利用したい場合に、MySQLの場合、SQLAlchemy-Utilsってモジュールを利用するのが手っ取り早いかったのでメモ。


## 実装例

```python:一部抜粋
from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy import Column

from sqlalchemy_utils import UUIDType

import uuid

Base = declarative_base()


class Hoge(Base):

  __tablename__ = 'hoges'
  
  id = Column(UUIDType(binary=False), primary_key=True, default=uuid.uuid4)

```

```txt:requirements.txt
sqlalchemy
sqlalchemy_utils
```


## 参考

SQLAlchemy-Utils
https://sqlalchemy-utils.readthedocs.io/en/latest/index.html


SQLAlchemy-Utils UUIDT
https://sqlalchemy-utils.readthedocs.io/en/latest/data_types.html#module-sqlalchemy_utils.types.uuid
エンジニア・技術情報界隈の SEO記事にありがちな誤解 ( あなたの検索エンジン対策、大丈夫ですか？ )

Qiitaなどで、SEOに対する誤解を目にする機会が多い気がするので、記事を書いてみた。

# 誤解

## 誤解. meta タグが重要

- SEOに強くなるわけではない
  - ユーザーには優しくなる
- Googleはそもそも meta keyword を見てなかったりする

## 誤解. h1タグなどの見出しが重要

- SEOの基本だけど、だからといって検索順位がぐっと上がるわけではない
  - 文書の構成を正しく検索エンジンに伝えられるようになるだけ。
  - もしこれで上位表示されるなら、全てのサイトが対策した時に順位はどうなるの？

## 誤解. キーワードをたくさん使うとSEOに強くなる

- たぶん15年以上ぐらい前の知識
  - ものすごく古い検索エンジンの初期段階では、単純なキーワードスパムが有効だったときもあるらしい。
  - たとえば「Ruby」って100個書いた記事より200個書いた記事が強いなら、それに勝つには300個書けば良いの？

## 誤解. 内部リンクを充実させるとSEOに効果がある

- 内部施策はほとんどSEOの強さには関係ない (特に、同一ドメインでリンクを張り合う場合)
  - 記事同士でリンクを張り合いまくっても、Googleにインデックスさえされないサイトもある
  - サイトの「構造」が検索エンジンに伝わりやすいような、適切な「

# 真実


## 真実. SEOのパワーはほとんどが外部要因

- ドメインパワーとか、外部リンクとか、Google検索でのクリック数とか、その他諸々の複雑なアルゴリズムが統合されているので、SEOのプロでもないと本当の理由解析はできないと思われる。
  - 当たり前だが、ノウハウは巷には流れてこないのでは。少なくとも人がすぐ真似できるような方法ではないなず。
- サイト本体だけを見てもSEOの強さの理由は分からない。

## 真実. 攻めのSEOと守りのSEOがある

## 攻めのSEO

別名、悪のSEO。

- 上位表示する
  - 検索エンジンの歴史も長いので、一筋縄ではいかないし、SEO業者などが企業がかりで対策しているレベルと思われる

## 守りのSEO

別名、正義のSEO。

- Googleにインデックスされやすくする
- Google検索結果などでユーザーに優しい表示をして、クリックされやすくする、求めているユーザーに求めているものを届ける
- コンテンツを、検索エンジンが正当に評価しやすくする
- [SEO嫌いにお送りするSEO策。これでもうSEOについてしばらく考えなくて良いぜ！！ - Qiita](https://qiita.com/taiyop/items/050c6749fb693dae8f82)

# 備考

- もしかしたら今のGoogleはさらに進んでいて、コンテンツ重視になり、内容解析とかしているかもしれない。「お前の言ってること古いよ！」とかあれば教えてください。









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ログイン時のCSRF対策は必要か

[CSRFで強制ログインさせるというアイデア - ぼくはまちちゃん！(Hatena)]

を読んでの噛み砕きです。

>「ログイン済みの人に何か操作させる」ってイメージが強くて、
対策する側もまた、「既にログイン済みの人を守る」ような考えが強いんだよね。
例えば、勝手に日記に投稿させないように対策する、みたいな。 

まさにイメージがこれだったので。

# 結論

>(結論) ログインのフォームもCSRF対策したほうがいいよ。 

* 被害が出るかはユーザーの気を付け方次第。
* 被害の大きさはサービスの性質・ユーザーのアウトプットの内容次第。


「閲覧専用」のようなサービスにはほぼ影響が無く、
体感、発生率・被害度は他の攻撃と比べてとても低そうではあるものの、
一律で言ってしまえばCSRF対策を施したほうがよい。

# 調べたことからの理解

## のまえの前置き

* ログインページ以外のログイン後ページにもCSRF対策をしていないのは問題外とします。
 * ログインさせるサイトも攻撃者が作ってしまえば知らない内に知らない操作をさせられて不正請求…とか考えられますか？やはり本題とは外れそうですけれど。　
* 合わせて他の脆弱性、詐欺との合わせ技も深く考えないこととします(知識不足)

***

* CSRF対策を施していないと、攻撃者のページを閲覧するだけで、そのページと関係がないサービスの、攻撃者が事前にログインできることを確認できているアカウントに知らないうちに強制ログインさせられます。
 * ログイン後のページにはCSRF対策が施されている前提なので、それ以上、攻撃者は利用者が意図しないリクエストでのログイン後操作を行うことはできません。
 * 強制ログインさせられるサイトが、利用者が普段使用しているサイトだった場合、自分のアカウントと間違えて強制ログインさせられたアカウントで手動で操作を行ってしまう可能性はあります。
 * フィッシング詐欺とは異なるため、ユーザーがフォームに入力するは必要なく、ページを閲覧するだけで攻撃者が持っている情報でログインが行われます。
* ログイン先が攻撃者が用意したアカウントであれ、漏洩した第三者のアカウントであれ、他者のアカウントにログインする(させられる)ことは不正アクセス禁止法にふれる可能性がありそう。
  * ユーザーの入力によるログインかCSRFを利用したログインかを判別できる方法はある？攻撃者の旨味は？[^2]

[^2]: 「踏まされた」なら処罰はないと思いますが、それがわかるのか？という疑問。
    普通のCSRF攻撃なら踏まされた人=操作されるアカウントなのでややこしくない気がしますが。
    普通のCSRF攻撃で発生した第三者への危害で踏まされた人が処罰されないなら、やはり不正アクセスにはならない？

総じて、
「強制ログイン後に利用者が気づかないままそのサービスで個人情報が残るような利用をすることを期待する」
程度の比較的のんびりした定置網漁のような攻撃？

CSRF対策が施されていないようなマイナーなサイトでは利用者自体も少なく、ログインしたサイトで誤操作してもらえる可能性が低く、
メジャーなサイトではそもそもCSRF対策がされている可能性が高い。

なんてことが起きそう。
(2012年の記事ではメジャーどころもしていないという話なんですが)

攻撃者が任意の操作を行えずユーザーのうっかりに期待するということで、
たとえばQiitaならいいね・ストックはまだ良いとして、秘密の情報を限定共有投稿にしてしまうことは危険と言えます。

でもProgateなら起きそうなことと言えば勝手に学習率を進められてしまう。ぐらいでしょうか？

プライベートなことを扱わないWebサイトの場合は大きな被害はなさそうです。

**通常のCSRF攻撃と異なり、第三者のアカウントが使われる**
ということが特徴的かなと思いました。
ただし、これは参照記事では「攻撃者のダミーアカウント」としか書かれておらず1対1の関係で終始しており、
第三者のアカウントの話ははてブの不正アクセスから私が広げた話なので、ホンシツ的な話ではないかもしれません。

***

ユーザーとしての対策は「気をつける」なんですが、記事でもある通り、どちらかと言えばバックグランドでの連携で知らぬ間にアカウントが切り替わっていると気づくのは難しいのかなあと思います。

# ログアウトはどうなの？

勝手にログアウトさせられる以上の被害はない。
徳丸氏いわく、攻撃者への威嚇程度にはなればいいな？(もう8年前の話ですけれど)

[ログアウトの CSRF 対策は本当に必要なのか？ | Webセキュリティの小部屋](https://www.websec-room.com/2017/01/07/2727)

# どうしてもCSRF対策したくなかったら？

既ログイン中のログイン処理はアカウントを切り替えない処理を入れる？
→ログアウトからのログインという攻撃には無効→ログアウトにCSRF対策入れるならログインに渋る理由がわからない。
ので、あまりよくなさそう。

Twitterのようにユーザーごとに画面をカスタマイズできてユニーク感を出す→他サービスとの連携機能があればメイン画面を見ないこともあるので切り替わりに気づきにくい。

うーん、あまりいい案はなさそう。

# 参考

* [不正アクセス禁止法で逮捕されるケースと逮捕後の流れ｜刑事事件弁護士ナビ](https://keiji-pro.com/columns/110/)
* [不正アクセス行為の禁止等に関する法律](http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=411AC0000000128&openerCode=1#5)

* [高木浩光＠自宅の日記 - ハマチをちゃんとテリヤキにするのは難しい, CSRF脆弱性を突く攻撃行為を現行法で処罰できるか](http://takagi-hiromitsu.jp/diary/20080315.html)

***

* [同一オリジンポリシー - ウェブセキュリティ | MDN](https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy)

***

* [第2回　しーさーふって何ですか？：［はまちちゃんのセキュリティ講座］ここがキミの脆弱なところ…！｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/serial/01/hamachiya2/0002)

***

* [PDF 安全な ウェブサイトの 作り方 - IPA](https://www.ipa.go.jp/files/000017316.pdf)

ログインした利用者が罠にかかり悪意あるリクエストを行ってしまうことを「CSRF攻撃」というならば、今回の話題はそもそもCSRFとは言えない？ 「CSRFの脆弱性」とは言える？


[CSRFで強制ログインさせるというアイデア - ぼくはまちちゃん！(Hatena)]:http://d.hatena.ne.jp/Hamachiya2/20120522/csrf
JavaScriptのチャートライブラリのデモまとめ

# JavaScriptのチャートライブラリのデモまとめ

## 追記（2019/05/27

今、再びチャートをReactで扱いたくなって調べているのですが、D3系列はReactで扱うには[結構気を配らないといけないことが多そう](https://qiita.com/ganezasan/items/e1c51b3e936bb0011680)です。

[Mediumで見つけた2019年版Reactチャートライブラリ紹介的な記事](https://medium.com/dailyjs/data-visualization-libraries-for-react-developers-in-2019-a2b9c01262f8)によると、今は[Victory](https://formidable.com/open-source/victory/)とか、[react-vis](http://uber.github.io/react-vis/)とかがナウいみたいです。どっちもスターはすごい！


------------------------------------

チャート使いたくて、調べました。全てリンクは公式のデモページになっていますので、すぐに動作を確認できます。

結果を先に言うと、総合的には[c3.js](https://c3js.org/examples.html)、折れ線グラフなら[Chartist.js](http://gionkunz.github.io/chartist-js/examples.html#example-line-only-integer)、散布図なら[taucharts.js](https://api.taucharts.com/basic/)、geoなら[Google Charts](https://developers.google.com/chart/interactive/docs/gallery)かなと。

ライセンスやコードの書きやすさは全然深堀していない、また選定の基準はかなり主観によっているため、この記事は選定の際のリンク集として使うにとどめてください。ちなみにリンクはおすすめ順です。

また私自身は、今回は円グラフのみの使用だったため、シンプルな[こちら](https://c3js.org/samples/chart_pie.html)にしました。

## [c3.js](https://c3js.org/examples.html)
シンプルisベストといった感じ。特にこだわりがないのであれば、これを入れておけば間違いないはず。[react-c3js](https://github.com/bcbcarl/react-c3js)もあるので、至れり尽くせり。

## [Chartist.js](http://gionkunz.github.io/chartist-js/examples.html#example-line-only-integer)
折れ線グラフが随一の綺麗さ。というかそもそも、サイトがおしゃれで好き。[折れ線グラフのアニメーション](http://gionkunz.github.io/chartist-js/index.html#chart-css-animation-example)が、他にはない、見ていて楽しいものがある。折れ線必要な時は、使いたい。

## [taucharts.js](https://api.taucharts.com/basic/)
うるさすぎず、ホバーした時の感じが適度で美しい。特に[散布図(scatter plot)](https://api.taucharts.com/basic/scatterplot.html)が大変綺麗。[棒グラフ](https://api.taucharts.com/basic/bar.html)なども、必要最低限で整っている。円グラフが見つからなかったので今回は使わなかったが、散布図などが必要なときはぜひ使ってみたいと感じた。

## [d3.js](https://github.com/d3/d3/wiki/Gallery)
無料の中では量が一番多い。多すぎて、逆に選ぶのめんどくさそう笑
ただ、これをベースに作られた[c3.js](https://c3js.org/examples.html)はかなり使いやすかったので、自分でカスタマイズすればかなりの可能性を秘めているものと思われる。

## [Google Charts](https://developers.google.com/chart/interactive/docs/gallery)
グラフの種類として、必要十分なものが揃っている。とりあえずグラフ入れたくて、まぁそこまでこだわりがないならこれでいいかも。geoチャートはかなり使いやすそう。

## [Chart.js](http://www.chartjs.org/samples/latest/)
数はまぁまぁ。各要素にホバーした時に、その詳細をツールチップで表示するタイプ。

## [plotly.js](https://plot.ly/javascript/)
量は多い。ホバー時のアクションは他と比べると、快適性とかで少し劣るかなと。
geoチャートあり、ヒートマップなど少し変わったものもあり。
[Reactで使いやすそう](https://plot.ly/javascript/react/)なのは良い。

# 有料
## [canvasJS](https://canvasjs.com/javascript-charts/)
量が多い。天気予報チャートやピラミッドチャートなど、他にはないものも多い。[React](https://canvasjs.com/react-charts/)版もある。ホバー時も心地よく、大量に様々なグラフ使いたい、かつ[金を払える](https://canvasjs.com/license/)場合はこれを選びそう。

## [amcharts](https://www.amcharts.com/demos/)
量多し。geoチャートもある。[stockチャート](https://www.amcharts.com/demos/stock-comparing-external-data/)が結構いい感じ。[値段](https://www.amcharts.com/online-store/)も有料の中ではそこまで高くない？

## [Highcharts](https://www.highcharts.com/demo)
[Highstock](https://www.highcharts.com/stock/demo)や[Highmaps](https://www.highcharts.com/maps/demo)も含めると種類としては一番多いのではないかと。しかしめちゃお高く、それなら無料のを組み合わせて使ったほうが良いかなという気がした。
C#でIMEを切り替えてみる

##前置き
<details><summary>作るきっかけ：IME切替が面倒</summary><div>
私はGoogle日本語入力を使用していて、PCの言語設定は英語です、
なので、
２つIMEが存在しています（GoogleとMS-IME、日本語MS-IMEは削除できた）。
![2つのIME](https://qiita-image-store.s3.amazonaws.com/0/279132/6383d196-00ff-7acd-4473-e3dd9ac00806.jpeg)


デフォルト言語が英語になっているため、英語MS-IMEは消せない...

**サインインすると英語MS-IMEが優先される！！**

まあ、`Win+Space`で切り替えはできるから気にしてはいなかったのですが、
ついに面倒になった</div></details>
ということで備忘録として残しておきます。
（消したときに困る）

##使用言語等
- C#
- .NET Framework 4.6.1
- Windows Forms App

##コード
結論とはなってしまうのですが
私が作ったコードを載せておきます。


```c#:Form1.cs

using System;
using System.Windows.Forms;

namespace InputChanger
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        protected override void OnLoad(EventArgs e)
        {
            SendKeys.Send("+(%)");
            this.Close();
        }
    }
}
```

ちなみにUIはこのように
![UI](https://qiita-image-store.s3.amazonaws.com/0/279132/b387de40-431b-ba77-9431-c1e34f5b7ef1.jpeg)
変更したらウィンドウが閉じるため、UIは手を付けておりません

## 解説(...？)
```c#
using System;
using System.Windows.Forms;
```
必要なのはこれだけで、

```c#
SendKeys.Send("+(%)");
this.Close();
```

`SendKeys.Send("+(%)")`で`Shift + Alt`キーコマンドを送信、

`this.Close()`でウィンドウを閉じています。

## 使い方
`Ctrl + R` ： `shell:startup`を実行し、開いたフォルダにEXEファイルのショートカットを貼り付けてスタートアップに登録できます。

## 追記
スタートアップに登録すると、私の環境ではサインイン画面とログオン後のデスクトップの2回実行されているようで、元の戻ってしまう...
Windowsの仕様なのか？
作った意味はあまりなくなってしまった...

### 追記の追記
なぜか2回実行されていたのが1回になっていた。
謎は深まるばかり…

## ソースコード等
こちらで公開しています。
https://github.com/a01sa01to/IMEChange
Flask を uWSGI で動かす

## Flask のコード

```py:check01.py
# -*- coding: utf-8 -*-
#
#	check01.py
#
#						Oct/29/2018
# ------------------------------------------------------------------
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
	str_out = "<h2>Hello There!</h2>"
	str_out += "<blockquote>"
	str_out += "こんにちは。<p />"
	str_out += "</blockquote>"
	str_out += "Oct/29/2018<p />"
	str_out += "AM 08:26<p />"
	return str_out

if __name__ == "__main__":
	app.run(host='0.0.0.0')
# ------------------------------------------------------------------
```

## これを Flask で動かすには

```bash
python check01.py
```

ブラウザーで http://localhost:5000 にアクセスすると
![flask_oct29.png](https://qiita-image-store.s3.amazonaws.com/0/179446/143ad865-68bb-331f-6839-95dd2251b5ce.png)

## uwsgi で動かすには

```bash
uwsgi --plugin http,python --http :9090 --wsgi-file check01.py --callable app
```

Ubuntu の場合

```bash
uwsgi --plugin http,python3 --http :9090 --wsgi-file check01.py --callable app
```

ブラウザーで http://localhost:9090 にアクセスすると
![uwsgi_oct29.png](https://qiita-image-store.s3.amazonaws.com/0/179446/744cedc6-65d3-6d31-7562-803d44b88659.png)
php-master-changes 2018-10-28

今日は ext/xml の xml_set_external_entity_ref_handler() の修正、ドキュメントの更新があった！

# 2018-10-28
## cmb69: Fix [#71592](https://bugs.php.net/bug.php?id=71592): External entity processing never fails
- https://github.com/php/php-src/commit/829b0df77b20392115d75fb82c56ad94edc1e423
- [7.3~]
- ext/xml で、[libexpat](https://github.com/libexpat/libexpat) でなく libxml2 を使う場合の挙動を libexpat のものに合わせた
- [xml_set_external_entity_ref_handler()](http://php.net/manual/ja/function.xml-set-external-entity-ref-handler.php) のコールバックが false になる値を返す際、パースを中断して  [xml_get_error_code()](http://php.net/manual/ja/function.xml-get-error-code.php) が XML_ERROR_EXTERNAL_ENTITY_HANDLING を返す、というのが libexpat での挙動

## cmb69: [ci skip] Update UPGRADING
- https://github.com/php/php-src/commit/eca3b9629f262c7a8a62cbdffc4f137c8ddde464
- [7.3~]
- [以前マージされた](https://github.com/php/php-src/pull/3317) ext/openssl の修正について UPGRADING へ追記
- min_proto_version と max_proto_version への対応について
【予告】IT未経験が「独学プログラマー」を読んでSEとして就職できるか，の挑戦をはじめます

こんにちは，タイトルのとおりなんですが，そういう勝手連載をQiitaではじめてみます。
### きっかけ
妻の友人（30代，1歳息子の子育てかあさん）が，出産前から契約社員的な感じで働いてたんやけど，将来的な生活も考えて，もう少し稼げる仕事に就きたいと言ってたのを聞いたこと。で，本人はプログラミングに興味があり，すでに独学でちょっとずつ勉強はじめていると聞いたので，お手伝いをすることにしました。
### 『独学プログラマー』
何読んでるの？と聞いたら，[『独学プログラマー』](https://amzn.to/2SwBrLI)だと言ったので，ぼくも買って読んでみた。AmazonのWebプログラミングカテゴリーでは2018-10-29現在1位。なるほど，確かにひととおりのことが書いてあるし，情報系の大学1年生が読むようなテキストに比べるととっつきやすい。仕事にどう結び付けるか，という話も書いてある。さらによい本を探している時間があったらまず始めたほうがよいので，これをふたりで読み進めることに。

で，ついでに，勉強したことをまとめるというのもよい訓練になると思うし，何よりやったことがモノとして残るのは嬉しいので，Qiitaに書いてみることにしました。markdownの練習にもなる。

### メンターとして，フリーランスSEとして，研究者として
ぼくは週の半分はフリーランスSEとして働きながら，大学で研究員もやっているという，たぶん日本では数人しかいないであろう変なポジションにいる。元々，大学に入ったのも「SE現場の課題を研究で解決したい」という動機だったので，SE教育とは何か，プログラミングはどの程度書けないとダメなのか，そのほか何が必要なのか，といったあたりを考えたいです。詳しくはまた次回にでも。

とりあえずスタート。
Logic Appsでの日付フォーマットの確認

#概要
Logic Appsで「現在日時」をメール本文に書く方法を試行錯誤したので、
その備忘録。

#結論
日本のタイムゾーンで現在日時を書く場合

```
　convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy/MM/dd HH:mm:ss')
```

※convertFromUtc関数の第3引数（書式指定）は、あくまで例です。


#試行錯誤の軌跡
やりたいことは、現在日時をよくあるフォーマット（2018/10/29 08:10:05）で出したいだけ。

##formatDateTime関数を試す
最初、converFromUtc関数の存在を知らず（汗）、
formatDateTime関数でいろいろ変換できるものと思ってました。

###書式指定無しの場合

```
formatDateTime(utcNow())
```

変換結果
　2018-10-28T22:30:05.2504592Z


###書式指定を入れてみた①

[ISO8601](https://ja.wikipedia.org/wiki/ISO_8601)形式で書いてみる

```
formatDateTime(utcNow(),'YYYY-MM-DDThh:mm:ss+09:00')
```

変換結果
　YYYY-10-DDT10:30:05+09:00
　年と日が変換されていない・・・。
　

　そしてタイムゾーンの指定を勘違いしていたことに気づく。
　あくまで書式指定なので、日本のタイムゾーンでの時刻に
　変換してくれるわけではない（当たり前だけど）。


###書式指定を入れてみた②
ちゃんとドキュメントを確認することに。
　[formatDateTime](https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#formatDateTime)
　[標準の日時書式指定文字列](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/standard-date-and-time-format-strings)
　[カスタム日時書式指定文字列](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings)

```
formatDateTime(utcNow(),'yyyy/MM/dd HH:MM:ss')
```

変換結果
　2018/10/28 22:30:05
　変換はされたけど、タイムゾーンが・・・。
　

###convertFromUtc関数を試す
[convertFromUtc](https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#convertFromUtc)
[TimeZoneの指定文字列](https://docs.microsoft.com/ja-jp/previous-versions/windows/embedded/gg154758(v=winembedded.80))

convertFromUtc関数の第2引数は、タイムゾーンを表す文字列を指定するとのこと。

```
　convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy/MM/dd HH:mm:ss')
```

変換結果
　2018/10/28 08:10:05

ということで、無事変換できました。
記事を書くと成長する話。

#記事を書けばレベルアップ☝☝☝

###初心者がQiitaに投稿するメリット

ここから、**Qiita**に記事を投稿する**利点**についてお話します。

##1.強い人からの添削文が返ってくる。

これは強力です。
例えば、**とあるプログラミング言語**を記事の中で書いたとします。

```cpp:とあるソースコード.kakuchoshi:
#取込 出力
開始
{
 出力 < "Hello, World!";
}
```

ここで、**強い人から返事がきます。**

>**"出力"**は古い関数です。
>新しい関数**"出力2"**を使うと良いでしょう。

**強い人からのコメント**によって、
より良い書き方があることがわかりました。

このように**強い人**に助けられることがあります。

例えば、C++だと**"qsort関数"**よりも**"sort関数"**のほうが速い場合が多いですよね。
このように**"より知識が身に付くのです"**

##2.曖昧な知識が明確になる

記事は曖昧な知識では書けません。
つまり、記事を書くには**曖昧な知識を無くす**必要があります。

**執筆途中に何度もその情報が合っているか調べます。**

それにより、今まで曖昧だった知識が明確になります。

##3.歴史に刻まれる

あなたが書いた記事は**このサイト**が無くならない限り、
基本的に**残るはずです。**

1年後、昔の自分が書いた記事を見てください。
**なんだこのぐちゃぐちゃしたコードは！？**

って思うかもしれません。

記事を書くことによって、自分がどれだけ
成長したのかわかりやすくなります。

#フィナーレ

**みんなで記事を書いていこう！**
開発で使えそうなGo製CLI/CUIツールまとめ

こんにちわ

普段Githubを見ていて、これは開発に使えそうだなと思うツールをまとめたページになります。
これはいいぞというものがあればコメントをいただければ追記します。

新しいモノを見つけたら定期的にここに追記していきます。

# API
- **[wuzz](https://github.com/asciimoo/wuzz)**
CLI版APIクライアント。
履歴検索、レスポンスをファイルに保存できるなど、curlの変わりになりそう。

- **[httplab](https://github.com/gchaincl/httplab)**
モックAPIサーバー。
外部サービス結合テスト時などに結構使えるんじゃないかと。

# JSON
- **[jid](https://github.com/simeji/jid)**
JSONのViewer。
フィルターリング機能があるので、便利そう。

- **[jv](https://github.com/maxzender/jv)**
JSONのViewer。
折りたたむこともできるようなので、単純に見るだけならこちらでも良いかも。

- **[jsonui](https://github.com/gulyasm/jsonui)**
JSONのViewer。
構造をツールで見れるので、直感的に使いやすそう。

# エディタ
- **[hecate](https://github.com/evanmiller/hecate)**  
バイナリエディタ。

# Docker
- **[dry](https://github.com/moncho/dry)**
DockerとDocker Swarmの管理ツール。
結構使い勝手良いかと。

- **[docui](https://github.com/skanehira/docui)**
ぼく製Docker管理ツール。
コンテナの作成などできたりする。
abc101

C

```
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<list>
using namespace std;
using ll = long long;
const int INF = 1e8;
int N;
vector<int>c;
int main() {
	int N, K;
	int A[110000];
	cin >> N >> K;
	for (int i = 0; i < N; ++i) {
		cin >> A[i];
	}
	cout << (N - 1 + K - 2) / (K - 1) << endl;
	return 0;
}
```
普通に考えて[N-1]/[K-1]になるからどう示すか？
数列の左端を１番目とし、矢印の左端を数列のa番目、右端をb番目に置くことを(a,b)と書くことにします。現在、３番目に１があり、(2,4)(1,3)(4,6)(6,8)と矢印を置いていくことで、題意をみたすことができました。ここで１番目に１を置いた時のことを考えましょう。この時、(1,3)(2,4)(4,6)(6,8)という上記の操作の順番を並び替えただけで、数列の全ての要素を１に変えることができました。この実験により、ある特定の並びでの最小回数がG回の時、他の並びでもG回で全ての要素が１に入れ替えることができると言えそうです。（もっと厳密な証明方法があると思いますが、これである程度納得出来るかと思います。）このことを認めて議論を進めます。
ある並びでの最小回数G回で、他の並びでも全ての要素が１に出来るからといって、それが最小回数であるということは示されていません。このことを簡単な背理法で示します。
任意のNとKについて題意をみたす最小回数が並び方によって異なると仮定します。
全ての並び方の中に、最も小さい最小回数を持つ並び方は必ずあります。この並びをAとして、その回数をa回とします。また、違う並び方で最小回数がAより大きい並び方も必ず存在します。この並びをBとし、この時の最小回数をb回とします。よって
a < b
が成り立ちます。しかし、ある並びにおいて成り立った最小回数で、他の並びでも全ての数列の要素を１に出来ると認めています。つまり、数列Aでの最小回数a回で、数列Bも全ての要素を１に出来ます。なので、
a=b
が成り立ちます。
しかし、これは前述のa<bに矛盾します。よって最初の仮定は間違っており、任意のNとKについて最小回数は並び方によって変わらないことが示されました。
ネットに落ちてた解説？
iOS In-App Purchase01・製品をApp Store Connectに登録

###まえがき
この記事が誰かの助けになれば嬉しいですが、私の間違いや認識違いなどありましたらそっと指摘してもらえると嬉しいです。
In-App Purchaseの実装に大変苦労したため、これさえ読めば大丈夫！みたいな記事にしたいが、手順が多いので複数記事に分ける。

###In-App Purchase実装の前にやっておいた方がいい事。
[App Store Connect ヘルプ](https://help.apple.com/app-store-connect/#/devb57be10e7)のApp 内課金に関する項目に目を通しておく。
・In-App Purchaseの実装に何が必要でどんな流れなのか、ざっくりでも把握しておくとやりやすいと思います。

###大まかなIn-App Purchase実装手順
大きく分けて

- 提供する製品をApp Store Connectに登録　←　この記事の内容
- App Store Connectの契約／税金／口座情報の設定を完了させる
- アプリ側、処理の実装
- テスト

---

###まず製品登録手順
購入していただく製品を準備します。
App Store Connectの対象アプリの機能を選択。
App 内課金＋を押してApp 内課金を追加。
<img width="1438" alt="スクリーンショット_2018-10-20_15_23_44.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/255984/a2f94486-72b5-c563-7b84-eef69a3e407f.jpeg">

どの課金体系にするか選択して作成
<img width="1435" alt="スクリーンショット_2018-10-20_15_29_50.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/255984/32403d0a-b726-f1e0-9645-a58e98f8c02e.jpeg">

App 内課金の詳細を設定していきます。
<img width="1439" alt="スクリーンショット_2018-10-20_15_32_17.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/255984/e1757492-f194-2629-b601-ffb28de362a6.jpeg">
<img width="1439" alt="スクリーンショット_2018-10-20_15_40_34.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/255984/17c4ced3-3f71-1ec2-df54-aa29a6c6d248.jpeg">
<img width="1440" alt="スクリーンショット_2018-10-20_15_42_20.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/255984/03585a9d-1946-4122-6215-c5c54865e42b.jpeg">

- 参照名は製品の内容がわかる様な名前がいいかと思います。
- 製品IDは私が参考にした記事ではバンドルID　＋　参照名でした。
- 配信可能のチェックボックスにチェックするのを忘れない様に。
- 価格は任意ですね。
- ローカリゼーションの表示名と説明はお客さんが製品を購入された時にアラートで表示されるので、ちゃんとしておきましょう。
- 審査に関する情報は怒られない様に登録しました。ここ、なんなんでしょう。

<img width="804" alt="スクリーンショット_2018-10-20_15_50_29.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/255984/3070e71f-9ba4-c94c-e4fe-04636fd33cc6.jpeg">
不備がなければステータスが送信準備完了になるはずです。
これで、製品の登録は完了です。
次回は、App Store Connectの契約／税金／口座情報の設定を完了させる。　を書きます。
ReactNavigationのDrawerNavigatorから直接メソッドを実行する方法


結論から言うと「直接メソッドは実行できない」ようです。

contentComponentを利用してItem項目にButtonなどを差し込み、そのonPress()等で対応するか、おとなしく一度Component（画面）を経由するしかないようです（今回は前者の対応です）。

やりたいことはDrawerにLogoutを仕込み、そのままLogoutしたいだけなのですが。。。

以下、Drawerの定義を抜粋したコード。
ButtonだとStyleが限定されるのでTextで対応しました。また、既存のメニューと似せるためには強引にstyleで合わせる必要があります。
なので、sytleに関する記述はかなりHack的になり環境依存です。もっとまともな方法があれば教えてほしい。。。

>Viewだと改行がはいるのでTextで囲ったり、Textだとmarginが効かないのでViewで囲ったりと・・・。私が不慣れなだけですが。

```js
.....
//drawer
export const Drawer = createDrawerNavigator(
  {
    Stacks: {
      screen: Stack,
      navigationOptions: {
        drawerIcon: <Icon name="check" size={24} />
      }
    },
    Tabs: {
      screen: Tab,
      navigationOptions: {
        drawerIcon: <Icon name="check" size={24} />
      }
    },
    Single1: {
      screen: createStackNavigator({
        Single1: { screen: Single1 }
      }),
      navigationOptions: {
        drawerIcon: <Icon name="check" size={24} />
      }
    },
    Single2: {
      screen: Single2,
      navigationOptions: {
        drawerIcon: <Icon name="check" size={24} />
      }
    },
  },
  {
    contentComponent: (props) => (
      <View style={{ flex: 1, marginTop: 40 }}>
        <SafeAreaView forceInset={{ top: 'always', horizontal: 'never' }}>
          <DrawerItems {...props} />
          {/* <Button
            title="Logout"
            onPress={()=>alert('hoge')}
          /> */}
          <Text>
            <View style={{ paddingTop:10, width: 60, height: 47, alignItems: 'center'}}>
              <Icon name="check" size={24} color={'#666'} />
            </View>
            <View style={{ width: 80, height: 47, justifyContent:'center'}}>
              <Text
                style={{ marginLeft: 12, fontWeight: '700', color: '#111'}}
                onPress={() => props.navigation.navigate('Single1')}
              >Logout
              </Text>
            </View>
          </Text>
        </SafeAreaView>
      </View>
    ),
  }
);
.....
```

## 結果

一番下の[Logout]は偽装したものです。。。push時の動作とか違うけど、まあ、Logoutなら押したっきり移動するのでなんとか許容できる範囲かな・・・。

<img width="528" alt="スクリーンショット 2018-10-29 6.38.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/55188/6a387087-eec4-6ec2-bb8d-a894c6b779f1.png">

## 参考

* https://stackoverflow.com/questions/48111041/logout-using-react-native-drawernavigator
Unityで"Failed to Import package with error: Couldn’t decompress package"

理由は分からないままだけど、解決できたので投稿しておきます。

Mac側で作成したUnityのプロジェクトをWindows側で使用する必要があったので、
以下のサイト通りに
http://rikoubou.hatenablog.com/entry/2016/02/02/213905

Mac上で全てExportして、Windows上でImportしてみた。
すると、

"Failed to Import package with error: Couldn’t decompress package"

というエラーだけが帰ってきた。

なので、以下のサイト通りに参考に対処してみた。
http://blog.k-kansei.com/?p=367
https://answers.unity.com/questions/1381518/cant-decompress-package-unity-20171f3.html
https://www.youtube.com/watch?v=hZtzYagkbiA

が、今回、上記だけでは解決ならず…

しかし、
Mac側でExportする際、以下の画像のように一番下に"include dependencies"という項目がある。
![スクリーンショット 2018-10-29 6.00.18.png](https://qiita-image-store.s3.amazonaws.com/0/301417/41ffcebe-1984-0122-bdad-43fc9abc749a.png)

ここのチェックを外してExportしたら、Windows側で無事にImportすることが出来た。
スピル時代のExcel VBA

# ReDimで初期化

ReDimを使った簡単な関数を定義します。

```vb
(A1) =A()

Function A(Optional S = "")
    ReDim S(1 To 10, 1 To 10)
    A = S
End Function
```
結果は、スピル可能の場合10x10の要素が0で初期化された配列が表示される筈です。
しかし、期待は要素が空の10x10の配列でした。
ReDim S(1 To 10, 1 To 10) As String　とすると、欲しい結果は得られるのですが、
S(2,2) = 1 とすると、どう見てもStringに変換されています。
配列の要素は、Variantとして振舞って欲しかったのです。


# 本当はこうあって欲しい。

[Excel のスピルをRangeで編集](https://qiita.com/matumoto_onga/items/85cb42170a5216e39c83)では、配列の初期化に、苦労しています。
初期化が0でなければ、こう書きたかったのです。配列が指定されていないと0で始まるのも気に入りません。
Rangeと配列の相互乗り入れをするならば、添え字が1から始まるようにすべきです。
あと、Splitを使うと強制的に添え字0始まりです。

```vb
Function TINIT(R, Optional T = "", Optional M = 0, Optional N = 0, Optional S = "")
    If T = "" Then
        S = R
    Else
        M = IFZS(M, R.Rows.Count)
        Dim TA: TA = Split(TRIM_(T), ",")
        N = UBound(TA) - LBound(TA) + 1
        ReDim S(1 To M, 1 To N)
    
        Dim J: For J = 1 To N
            S(1, J) = TA(J - 1)
        Next J
    End If    
    TINIT = S
End Function
```

ではでは
[Lightning Network] 開放すべきポート一覧

lapps を開発してると、たびたびポートを開ける必要が出てくる。必要に応じてサーバの設定画面に行くのは面倒くさい。最初に設定するときに一括して開けておいたほうがいい。というわけで、今の時点で開けておいたほうがいいポート一覧を以下に列挙する（まだ少ないけど……）。

| ポート番号 | 説明             |
|------------|------------------|
| 8332       | bitcoin mainnet |
| 18332       | bitcoin testnet |
| 9115       | [nanotip](https://github.com/ElementsProject/nanotip) |
| 6000       | [ifpaytt](https://github.com/ElementsProject/ifpaytt)          |
| 9735       | [lightningd](https://github.com/ElementsProject/lightning)       |
| 9112       | [lightning-charge](https://github.com/ElementsProject/lightning-charge) |

逐次追加していく。
[Lightning Network] 自分のノードをQRコード化する

知ってるかどうかだけの情報だが、結構探さないと見つからなかったので……

ライトニングネットワークのウォレットには、QRコードで接続先のノード情報を取得できる機能がついていることが多い。このQRコードを自分のノードで作りたい場合、実際に使われているQRコードにどんなテキストが書かれているか知る必要がある。このQRコードを見つけるのに時間がかかったというわけだ。

[Y'alls](https://www.yalls.org/)で適当なプロジェクトを開くとノード情報のQRコードが見つかった。スキャンすると以下のようになっている。

```
02a68237add204623021d09b0334c4992c132eb3c9dcfcb8f3cf8a57386775538e@testnet-lnd.yalls.org:9735
```

`<ノードID>@<IP or ドメイン名>:<ポート番号>`でいけるようだ。このテキストをQRコード化すればいい。早速自分のノード情報をQRコード化してみた。

こちらが mainnet ↓
![QR_Code1541742814.png](https://qiita-image-store.s3.amazonaws.com/0/150956/5b16cfc6-d57c-4566-becf-0bcd1e729dbd.png)

こちらは testnet ↓
![cln_test.png](https://qiita-image-store.s3.amazonaws.com/0/150956/e07b12d3-e7c9-c079-4d94-0e6f74f5e00d.png)

元テキストも載せておく。みんな繋いでね。

```
# mainnet
02009947c197575f5a948e1e4343c41dc2e6122a9bd644629afb919f30e1115ff8@cln.green:9735

# testnet
031201e62297a420a3878d0d8b7c4206553d354097da1a9e7c34158303d9223569@testnet.cln.green:9735
```
統計関係の入門書メモ

## 背景
インターンでデータ分析をするにあたり、統計関係の知識が必要になった。
一通り「確率・統計」という講義で学んだはずだが、色々忘れていると思うので復習も兼ねて一から勉強しようと思う。というか、講義では確率しかやらなかった記憶が。。。

あまり独学は得意な方ではないため、何から手をつけていいか分からなかったので、良さげな入門書を解説しているサイトで見つけた本をまとめようと思う。



## 統計学の入門書

統計の入門書。考え方の基礎や概念の習得に使う。

### [マンガでわかる統計学](http://amzn.asia/d/agDZvAP) (著者:高橋 信, オーム社)

マンガ形式で統計の基礎を解説した本。
マンガ形式であるため、初学者の入り口として結構色々なところで評価されている。
しかし、マンガであるがゆえに分量に制限がかかり、踏み込んだ内容まで説明しきれていないという評価も。

「こういう流れでこんなことをやるんだ」という、統計の感じを掴むという意味ではとても良さそう。ただ、深い意味を勉強するには不向きか。数式から解説した本も一緒に揃える必要がありそう。

### [完全独習 統計学入門](http://amzn.asia/d/cTpDtE4)(著者:小島 寛之, ダイヤモンド社)

中学数学で統計学の基礎を学ぶことができる本。
僕自身あまり数学が得意な方ではないため、かなり気になっている。

また、同じく小島さんが書いている[完全独習 ベイズ統計学入門](http://amzn.asia/d/eY0Cio1)も、高評価を受けている。

## 実際に統計を活用するときに参考になりそうな本

実務で使うために統計を勉強しているが、どんなデータをどの切り口でどう分析し、どう結論付けるかは、かなり経験で培われている部分じゃないかと感じている。
そのため、実例を交えた本で統計の活用法を習得できるんじゃないかと期待。

### [それ根拠あるの？と言わせない データ・統計分析ができる本](http://amzn.asia/d/6tSSEop)(著者:柏木 吉基, 日本実業出版社)

著者が日産自動車に勤めているらしく、この本は「実務でデータや統計分析を使う」ことに焦点を当てて書かれているらしい。

「実務でデータや統計分析を使う」という一文が凄くそれっぽい(求めてることにマッチしてる感じがある)から気になる。

### [真実を見抜く力](http://amzn.asia/d/bBI49CJ)(著者:トーマス・H・ダベンポート, 日経BP社)

タイトルだけでは普通のビジネス書っぽい(漠然としたタイトル、少なくとも統計っぽくはない)が、ビジネスにおいてデータ分析を活用するために細かい段階に分割して、それぞれの段階で考えるべきこと、有効な手段、実例が解説されているらしい。
各段階で何をどうすればいいのか具体的にイメージしやすそう。

有効な手法(とそのアウトプット)がイメージできれば、かなり実務で役立ちそう。


## ベイズ統計学の入門書

最近アツいらしいベイズ統計学。
どこかで「ベイズと従来の統計学は考え方が異なっている」みたいな文章を見たがあ、まだまだ統計学とベイズ統計学の住み分けを理解していないので、その習得に使う。
もちろん実務で使えるレベルまで習得したい。

### [完全独習 ベイズ統計学入門](http://amzn.asia/d/eY0Cio1)(著者:小島 寛之, ダイヤモンド社)

小島さんの統計学入門のベイズVer。
足し算、掛け算でベイズの基礎を学ぶ事ができるらしく。入門書としてはかなり良さそう。

### [道具としてのベイズ統計](http://amzn.asia/d/1B72z3B)(著者:涌井 良幸, 日本実業出版社)

上の完全独習ベイズ統計学入門では、文章で分かりやすくしているのに対し、この本では簡単な数式の計算で理解を促している、らしい。
入りは数式よりも文章の方が個人的には好みなので、上の本を読んでから、こういう数式で解説したものを読んだ方が理解しそう。



## 感想
小島さんの書籍が色々なところでオススメされていたのが印象的。


ベイズ統計学については「ベイズ？何それ」状態なので、どんな前提知識が必要なのかすらもよく分かっていない。
なので、平行して勉強できそうならして、できなさそうなら統計学を集中的にする感じにしようかなと考えている。

Qiitaにも勉強の軌跡を残しつつ、しっかり知識として定着させよう(決意)。

## 参考資料
[書籍20選〜効率よく目的別に統計分析を学ぶ〜](http://bdm.change-jp.com/?p=1612)

[ベイズ初学者に贈る　本当にこれだけ！おすすめ本7選](http://bookshare.main.jp/2017/06/10/%E3%83%99%E3%82%A4%E3%82%BA%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E8%B4%88%E3%82%8B%E3%80%80%E6%9C%AC%E5%BD%93%E3%81%AB%E3%81%93%E3%82%8C%E3%81%A0%E3%81%91%EF%BC%81%E3%81%8A%E3%81%99%E3%81%99%E3%82%81/)

[ベイズ統計学入門・初学者にオススメの書籍と僕の勉強軌跡](http://gakuseibiz.com/?p=2417)
FacebookとTwitterの公式シェアボタンをSPAで表示する方法

こういうやつです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/52847/29d901ea-e28f-e051-d7c2-ee225cbbdafb.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/52847/bf650133-4c48-7bb7-f53e-b5c274cbeb65.png)


一般的なWebページでの導入方法はこちらです。

Facebook
https://developers.facebook.com/docs/plugins/share-button/?locale=ja_JP

Twitter
https://developer.twitter.com/en/docs/twitter-for-websites/tweet-button/overview.html


① bodyタグの末尾にSDKのコードを挿入して → ②ボタン本体のタグを埋め込む
という流れですが、SPAの場合このやり方をするだけでは動きません。


### 解決方法

ボタンを読み込みたい画面で、

Facebookの場合

```
FB.XFBML.parse();
```

Twitterの場合

```
twttr.widgets.load();
```

のメソッドを呼び出せばOKです。
タイミングはVueやReactを利用しているなら、コンポーネントライフサイクルを使うとよいでしょう。
（Vueなら`mounted()`, Reactなら`componentDidMount()`）