OmniAICreator/Qiita-1.07M huggingface dataset:
jsonファイルの読み込みまとめ

最近，JSON形式のファイルを使い始めたので，そのまとめです．

# Python3による読み込み
Python3での読み込み方法として，**「jsonを使った読み込み」**をとりあげます．
その他，pandasなどでも読み込めるのでそれは他を参照して下さい．
この方法には，`json.load`と`json.loads`が存在します．
`json.load`  : JSONファイルを辞書として読み込むときに使います．
`json.loads` : JSON形式で書かれた文字列を読み込みます．
今回は，**外部ファイルからの読み込み**なので `json.load`を使います．

### json.loadによる読み込み
JSONファイルを辞書として読み込むには，これを使います．
以下，具体的な書き方です．

```json_load.py
import json
with open('test.json') as f:
    data = json.load(f)
```
とこうするだけ．簡単ですね．
しかし，**windowsユーザーは注意**．windowsのデフォルトでの読み込みで次のエラーが発生します．
`UnicodeDecodeError: 'cp932' codec can't decode byte 0x86`
そのため，ちゃんと文字コードを指定しましょう．

```json_load.py
import json
with open('test.json', encoding='utf-8') as f:
    data = json.load(f)
```

#JavaScriptでの読み込み
JavaScriptでの読み込み方法としてjQueryでの読み込みを取り上げます．

```test.js 
$.getJSON("test.json", function (data) {
    //読み込んだdataに対する処理
});
```
Ubuntu18.04 LTSのインストールからNVIDIA GPU Driverのインストールまで

# はじめに
[前記事](https://qiita.com/riv/items/71c2fe4bdaeec3023812)にて、Ubuntu16.04 LTSとGPU Driverのインストールをまとめました。
今回は、Ubuntu18.04 LTSで同様のインストールを試したので、内容が重複する所はありますが、一からまとめておこうと思います。

なお、基本的にGPUの停止以外は16.04 LTSのときと相違はないです。
また、GRUBの編集部分は16.04 LTSのときから改善？したので、多少違いがあります。


# Ubuntu18.04 LTSのライブUSB作成
Ubuntuのインストール方法として、今回はライブメディアの中でもUSBを使用します。
まずは、Ubuntuをインストールするために必要なライブUSBを作成します。
（今回は、Windows環境にてライブUSBを作成していきます。）

## 準備するもの
・USBメモリ：Ubuntuのisoイメージのサイズよりも大きいサイズであればOK
・Ubuntuのisoイメージ
・Windows 7 以上
・Rufus

## isoイメージのダウンロード
まずは、インストールしたいUbuntuのisoイメージをダウンロードします。今回はUbuntu18.04 LTSを対象とするため、[公式サイト](https://www.ubuntulinux.jp/News/ubuntu1804-ja-remix)よりisoイメージをダウンロードします。

## USBメモリのフォーマット
USBをフォーマットしておきます。

## RufusでライブUSBの作成
ライブUSBの作成には、[Rufus](https://rufus.ie/ja_JP.html)を使用します。
ダウンロードしてきたファイルを実行し、下記のように設定します。
・Device：ライブUSBとして使用するUSB
・Bootの種類：ダウンロードしたisoイメージ
後はそのままでOKです。「スタート」を押して作成を開始します。

# Ubuntu18.04 LTSのインストール手順
今回はUEFIでインストールします。
## UEFIの設定画面への移行
既にUbuntuがインストールされており、新たに再インストールする場合は、下記のコマンドでUEFIの設定画面に移行できます。

```
sudo systemctl reboot --firmware-setup
```

UEFI:USBの読み込みを最優先に設定し、ライブUSBを挿した状態で再起動すると、Ubuntu Installが選択できるGRUB画面が起動します。

## デフォルトGPU Driverの無効化とUbuntuのインストール
しかし、GPUを搭載した状態でインストールを開始しようとすると、下記のような標示が出て進まなくなります。

```
Ignoring BGRT: failed to map image header memory
```

これはどうやら、デフォルトのGPU Driverが悪さをしているようです。
そこで、GRUB画面で「Ubuntu Install」にカーソルを合わせて「e」を押すと、起動コマンドの編集画面に移行します。
この画面で、「pci」の部分を以下のように変更して「F10」キーを押し、再起動します。

```
pci=nomsi quiet splash nomodese
```

すると、先ほどの表示は出ずにそのままインストール画面に移行するはずです。
後は、指示に従ってインストールすればOKです。

# NVIDIA GPU Driverのインストール
Ubuntuのインストールが完了したら、次はNVIDIA GPU Driverのインストールします。

まずは更新をしておきます。

```
sudo apt-get update
sudo apt-get upgrade
```

次に、先ほど編集したGRUBを改めて編集しておきます。

```
sudo vi /etc/default/grub
```

下記のような行があると思いますが、

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
```

これを、以下のように修正します。

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi nomodeset"
GRUB_CMDLINE_LINUX="pci=noaer"
```

再起動します。

```
sudo reboot
```

## NVIDIA Driverのインストール手順
それでは、実際にNVIDIA Driverをインストールします。

Ubuntu16.04 LTSではCUIモードで実行しましたが、
今回は普通にGUIでインストールしました。
（画面の解像度上も問題がなかったためです。）

まず、PPAリポジトリにグラフィックスドライバ関連を追加します。

```
sudo add-apt-repository ppa:graphics-drivers/ppa
```

更新します。

```
sudo apt update
```

下記のコマンドでグラフィックボードの詳細を確認します。

```
ubuntu-drivers devices
```

recommendされたnvidia-driverをインストールします。
（自分の場合は415でした。）

```
sudo apt-get install nvidia-415
```

再起動をします。

```
sudo reboot
```

再起動後、Ubuntu画面の解像度が最適化されていれば、恐らくNVIDIA GPUが上手く反映されているということになります。
NVIDIA Driverのテストとして、下記のコマンドで確認しましょう。

```
nvidia-smi
```

以上で、Ubuntu16.04 LTSとNVIDIA GPU Driverのインストールは終了です。
お疲れ様でした。
（なお、この後CUDAをインストールすると、GPU Driverが上書きされてしまうようです。
よって、一度GPU Driverを削除するか、GPU Driverを入れる前にCUDAをインストールするとよいでしょう。）
ajax axiosでファイル保存

ボタン押下から(ファイル選択ダイアログ)が開きます。
ファイル選択ボタン押下で、自動的に指定画像ディレクトリにファイルが書き込まれます。
自動的に書き込む際に、ajaxとlaravelを使用します。

```html
<button type="button" class="btn btn-sm btn-primary mr-2" @click="mdInpAux_img">画像アップロード</button>

<form class="d-none" action="{{ route('upload') }}" method="post" enctype="multipart/form-data" id="imgUploadForm">
  @csrf
	<input type="file" class="btn btn-sm btn-primary" ref="img_inp" name="upload_img" @change="upload">
</form>
```

```js
//vuejs.methods
mdInpAux_img: function() {
  this.$refs.img_inp.value = null;
  ↑多分、これで画像選択ダイアログキャンセル時にinput:fileのchangeイベントが発生しないようになっていると思います。
  this.$refs.img_inp.click();
},
upload: function(e) {
  var formData = new FormData();
  formData.append("image", this.$refs.img_inp.files[0]);
  axios.post('/upload', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
  .then(function(response) {
    console.log(response);
  })
  .catch(function(error) {
     console.log(error);
  });
}
```

```php
//routes.web.php
Route::post('/upload', 'ImagesController@upload')->name('upload');
```
laravelでのファイルアップロード方法について、参考にさせて頂きました。
ありがとうございます。
[参考記事](https://tanaken.me/web/716)

```php
//ImagesController
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;

class ImagesController extends Controller {
  public function upload(Request $request) {
    $name = $request->image->getClientOriginalName();//ファイル名を取得します。
    $request->image->storeAs('images', $name);//storeメソッドだとファイル名がハッシュ化されるため、storeAsを使用。

    return response()->json([
      'result' => 'success',
    ]);
  }
}
```
【rails5】取得した値を昇順や降順にソートする方法

###取得した値を昇順や降順にソートする方法

```
モデル名.order(条件)
```

```
id昇順 
User.order(:id)
もしくは
User.order('id ASC')
※デフォルトは昇順(asc)になっているので通常は書かなくてよい
```

```
id降順　User.order('id DESC")
新しい日付順　User.order('day DESC')
作成日順　Tweet.order('created_at DESC')
```
Laravel Fakerで複合主キーのあるデータをseeding

キーの組み合わせをuniqueにする必要がある。
ポイントは2つのModelのキーのcollectionをcrossJoin()で繋げてるとこ。

```php

use Faker\Generator as Faker;

$factory->define(Model::class, function (Faker $faker) {
    $idsA = ModelA::all()->pluck('id');
    $idsB = ModelB::all()->pluck('id');
    $matrix = $idsA->crossJoin($idsB);
    $keypair = $faker->unique()->randomElement($matrix);
    return [
        'aid' => $keypair[0],
        'bid' => $keypair[1],
    ];
});
```
Ubuntu16.04 LTSのインストールからNVIDIA GPU Driverのインストールまで

# はじめに
GPU（GTX1080Ti）を搭載したDesktop PCの初期設定を行いました。
まずは、Ubuntu16.04 LTSのインストールから、搭載したGPUを使用するためのGPU Driverのインストールまで実施したので、メモ程度ですが手順をまとめておこうと思います。

# Ubuntu16.04 LTSのライブUSB作成
Ubuntuのインストール方法として、今回はライブメディアの中でもUSBを使用します。
そこでまずは、Ubuntuをインストールするために必要なライブUSBを作成します。
なお今回は、Windows環境にてライブUSBを作成していきます。

## 準備するもの
・USBメモリ：Ubuntuのisoイメージのサイズよりも大きいサイズであればOK
・Ubuntuのisoイメージ
・Windows 7 以上
・Rufus

## isoイメージのダウンロード
まずは、インストールしたいUbuntuのisoイメージをダウンロードしてくる必要があります。今回はUbuntu16.04 LTSを対象とするため、[公式サイト](https://www.ubuntulinux.jp/News/ubuntu1604-ja-remix)よりisoイメージをダウンロードします。

## USBメモリのフォーマット
念のためにUSBをフォーマットしておきます。

## RufusでライブUSBの作成
ライブUSBの作成には、[Rufus](https://rufus.ie/ja_JP.html)を使用します。
ダウンロードしてきたファイルを実行し、下記のように設定します。
・Device：ライブUSBとして使用するUSB
・Bootの種類：ダウンロードしたisoイメージ
後はそのままでOKです。「スタート」を押して作成を開始します。

# Ubuntu16.04 LTSのインストール
今回はUEFIでインストールします。
## UEFIの設定画面への移行
既にUbuntuがインストールされており、新たに再インストールする場合は、下記のコマンドでUEFIの設定画面に移行できます。

```
sudo systemctl reboot --firmware-setup
```

UEFI:USBの読み込みを最優先に設定し、ライブUSBを挿した状態で再起動すると、Ubuntu Installが選択できるGRUB画面が起動します。

## デフォルトGPU Driverの無効化とUbuntuのインストール
しかし、GPUを搭載した状態でインストールを開始しようとすると、下記のような標示が出て進まなくなります。

```
Ignoring BGRT: failed to map image header memory
```

これはどうやら、デフォルトのGPU Driverが悪さをしているようです。
そこで、GRUB画面で「Ubuntu Install」にカーソルを合わせて「e」を押すと、起動コマンドの編集画面に移行します。
この画面で、「quiet splash」を「nomodeset」に変更し、「F10」を押して再起動します。
すると、先ほどの表示は出ずにそのままインストール画面に移行するはずです。
（ちなみに画面の解像度は最適化されていないような状態になりますが、恐らくデフォルトのGPU Driverを無効化したためだと思われます。）
後は、指示に従ってインストールすればOKです。

# NVIDIA GPU Driverのインストール
NVIDIA GPU Driverのインストールに関しては、下記の記事を参考にさせていただきました。
[UbuntuにNVIDUAドライバを入れる手順](https://qiita.com/Reizouko/items/c5826dbcc113321fbbcd)

Ubuntuのインストールに成功したら、まずは更新をしておきます。

```
sudo apt-get update
sudo apt-get upgrade
```

次に、先ほど編集したGRUBを改めて編集しておきます。

```
sudo vi /etc/default/grub
```

下記のような行があると思いますが、

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
```

これを、以下のように修正します。

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi nomodeset"
GRUB_CMDLINE_LINUX="pci=noaer"
```

再起動します。

```
sudo reboot
```

## NVIDIA Driverのインストール
それでは、実際にNVIDIA Driverをインストールします。

最初に、Ctrl+Alt+F1を押してCUIモードに移行します。
そして、下記のコマンドを入力し、GUIを停止させておきます。
（CUI環境でやらないとフリーズするらしいです。）

```
sudo service lightdm stop
```

続いて、PPAリポジトリにグラフィックスドライバ関連を追加します。

```
sudo add-apt-repository ppa:graphics-drivers/ppa
```

更新します。

```
sudo apt update
```

下記のコマンドでグラフィックボードの詳細を確認します。

```
ubuntu-drivers devices
```

recommendされたnvidia-driverをインストールします。
（自分の場合は415でした。）

```
sudo apt-get install nvidia-415
```

最後に、停止したGUIを開始させておきます。

```
sudo service lightdm restart
```

そして、再起動をします。

```
sudo reboot
```

再起動後、Ubuntu画面の解像度が最適化されていれば、恐らくNVIDIA GPUが上手く反映されているということになります。
NVIDIA Driverのテストとして、下記のコマンドで確認しましょう。

```
nvidia-smi
```

以上で、Ubuntu16.04 LTSとNVIDIA GPU Driverのインストールは終了です。
お疲れ様でした。
（メモ程度なので、できれば随時更新していこうと思っています。）
基本的なElasticsearchの検索クエリ

Elasticsearchのクエリ力がなさすぎて、
毎回調べてしまう基本的な検索クエリのメモです。

随時更新していきます。

## 範囲（hogeが10以上）

```
{
  "query": {
    "range": {
      "hoge": {"gte": 10}
    }
  }
}
```

## 削除クエリ

```
POST /my-index/_delete_by_query
{
  "query": {
    ...
  }
}
```

# 検索クエリ以外

## シャードの状態確認
```
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason
```

## Disk Sizeの確認
```
GET _nodes/stats
```
結果のdataのfree_in_bytes

```
        "data" : [
          {
            "path" : "/var/lib/elasticsearch/127.0.0.1-node/nodes/0",
            "mount" : "/ (/dev/sda1)",
            "type" : "ext4",
            "total_in_bytes" : 84482068480,
            "free_in_bytes" : 18353790976,
            "available_in_bytes" : 14794018816
          }
        ],
```

## Snapshot
```
PUT _snapshot/my_gcs_repository/backup-20190523
{
  "indices": ["uga-v1"],
  "ignore_unavailable": true,
  "include_global_state": false
}
```

## Restore
```
POST _snapshot/my_gcs_repository/backup-20190523/_restore?pretty
{
  "indices": "uga-v1",
  "ignore_unavailable": true,
  "include_global_state": false,
  "include_aliases": false,
  "rename_pattern": "uga-v1", 
  "rename_replacement": "uga-v1-1" 
}
```
Redisのバックアップファイル場所をチェックする

## はじめに
バックアップは以下のコマンドで取った。

```
redis-cli bgsave
```

## 保管場所チェック
```
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/var/db/redis"
```

この場合、`/usr/local/var/db/redis`が保管場所。
Raspberry Pi B+の再インストール

# 手順
①Raspberry Pi B+の電源投入
②Rapberry Piロゴ画面表示時に「Shift」キー押下
③通常のインストールと同様（「Raspbian」をチェックし、「Install」をクリック）

# 背景
以下の3.5inch LCDディスプレイの解像度をいじっていたところ、
KernelPanicで起動できなくなってしまった。

https://www.amazon.co.jp/gp/product/B075K56C12/ref=ppx_od_b_detailpages00?ie=UTF8&psc=1

WinPCでSDカード内を参照したところ、
上記でいじっていた「config.txt」があったので、エディタで修正し、再起動したが、
KernelPanicは、復旧しなかった。

そこで、再インストールを試行した。


# 今後の予定
①バックアップファイルの作成
再インストールには時間を要するため、
バックアップを作成しておいた方が良い。

[2018/12/29追記]以下で実施済み。
https://qiita.com/TTakeshi/items/8b079154131da68fd9a4

②Raspberry Pi SDカードのディレクトリ構成
SDカード内に「config.txt」を確認したが、このファイルが不明。
php-master-changes 2018-12-28

今日は ext/phar の不要な分岐条件削除、ハッシュテーブルのフラグ操作時の実装詳細隠蔽マクロの導入と HASH_FLAG_INITIALIZED の HASH_FLAG_UNINITIALIZED への逆転、ext/fileinfo のバグ修正、デバッグビルド以外で zend_string_destroy() の _efree() 呼び出への置き換え、return 高速化の修正があった！

# 2018-12-28
## dstogov: Removed useless check
- https://github.com/php/php-src/commit/c2179309f49d019ac1dd24d92cc9e0ea2c26d5e1
- ext/phar で、不要な分岐条件を削除

## dstogov: Use HT_IS_INITIALIZED() and HT_INVALIDATE() macros instead of hackish HT_FLAGS assumtions.
- https://github.com/php/php-src/commit/675a8a64c3bdf5426113e33d88b477be3f9a0f39
- ハッシュテーブルの初期化チェック / 状態操作に HT_FLAGS で直接フラグの操作比較をするのではなく、専用のマクロを用意
- 目的は高速化なのかな

## dstogov: Added missing invalidations.
- https://github.com/php/php-src/commit/c706adaaabb3537579ed727ded4c16b258f9453b
- ext/phar で、ハッシュテーブルの無効化が欠けていた部分を追加

## dstogov: Revert HASH_FLAG_INITIALIZED into HASH_FLAG_UNINITIALIZED.
- https://github.com/php/php-src/commit/76d8f3923e93ea0f11d11b3184811d1206242ae3
- ハッシュテーブルのフラグ HASH_FLAG_INITIALIZED を HASH_FLAG_UNINITIALIZED に逆転させた
- ↑のマクロもこのへんの実装詳細を隠蔽するために導入した感じか

## weltling: Fixed bug [#77346](https://bugs.php.net/bug.php?id=77346) webm files incorrectly detected as application/octet-stream
- https://github.com/php/php-src/commit/d874d4a15c2e17a753d580691906c95e9153b823
- [7.3~]
- ext/fileinfo で、webm のファイルが application/octet-stream として検出されてしまう問題の修正
- [libmagic 5.33 取り込み時](https://github.com/php/php-src/commit/e2182a1ba7cdd3c915cf29cd8367a6e02a0c10c8)に入った問題らしい

## dstogov: Eliminate zend_string_destroy() wrapper in release build
- https://github.com/php/php-src/commit/617c90bcb9b3f1b783d49915416477e50010ebd1
- デバッグビルド以外では zend_string_destroy() が単に _efree() へ展開されるよう修正

## dstogov: Micro optimization
- https://github.com/php/php-src/commit/b8d6aac5ada998fd69c4387f784216babde8edfb
- ZEND_RETURN のハンドラ内での局所最適化
- ZVAL_COPY_VALUE() と ZVAL_COPY() で二回コピーが発生するケースがあるのを避けたかった奴かな？
- 頻度高い実行パスでの命令列の並びも変わる気がするけれど、そっちの影響分からず（毎度のごとくコメントがほすぃ……）
Railsのhas_secure_passwordとは

Railsの「**has_secure_passwordメソッド**」について解説する。

使い方としては、以下のようにモデルに定義する。

```user.rb
class User < ApplicationRecord
  .
  .
  .
  has_secure_password
end
```

上記のようにモデルにこのメソッドを追加すると、次のような機能が使えるようになる。

- **セキュアにハッシュ化したパスワード**を、データベース内のpassword_digestという属性に保存できるようになる。
- 2つのペアの仮想的な属性（**passwordとpassword_confirmation**）が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される 。
- **authenticateメソッド**が使えるようになる（**引数の文字列がパスワードと一致するとUserオブジェクトを、間違っているとfalseを返すメソッド**）。

ちなみに、この魔術的なhas_secure_password機能を使えるようにするには、1つだけ条件がある。それは、**モデル内にpassword_digestという属性が含まれている**こと。

参考：[Railsチュートリアル](https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-a_hashed_password)
IT法務ことはじめ

## 2020年4月施行の民法改正ポイント
- 契約成立時期を、発信主義から**到達主義**に変更
- 契約解除の要件変更。
「債務の履行がない（債務不履行）」「債務者に帰責事由」「債権者から債務者に履行督促」の３つの要件からなっていたが、２つめの要件が除外されることになった
- 契約不適合責任の導入
　従来からあった**瑕疵担保**の規定を削除し、新たに「引き渡された目的物が種類、品質または数量に関して契約の内容に適合しない」場合における買主の請求権を規定した。
　
## 契約

- 契約書とは企業間のビジネス上の合意を現したもの
- 契約書という文書にすることにより法的拘束力を得ることができる
- メールや議事録はあくまでも担当者間の合意であり、証拠にはなっても法的な力は弱い

## 契約書のポイント

- 自らに利益となる条項はなるべく包括性をもたせる
- 不利益となる条項はなるべく抽象的かつあいまいに
- ファーストプロポーザル（最初の提案）をとれるかが大事　※枠組みをリードできる
- 損害時の立証責任を相手方に渡すこと　※システムが停止した場合にいくらの損額がでたかをユーザー側に立証させる

## ３大スキームで考える契約ポイント
**スキーム条項**
- 誰がどこあで作業するか、どうやって情報交換するか
- 仕様変更にはどのように対応するのか、費用はどうするか
- 検品はどう行うか、支払いはどうするか
**リスクヘッジ条項**
- 検品で発見できなかった瑕疵があったらどうするか
- 開発先のスキル不足や状況が良くない場合
- 納品物が特許権等に抵触していないか
**Win-Win条項**
- 納品物を買い取る場合はどうするか
- バージョンアップはどうするか
- 保守はどうするか

## 知的財産権について
- 著作権や特許権などは知的財産権に属している
- 著作権が保護するのは著作物。　例）ソースコードやデータベース※データは思想性を帯びていない為、対象外。でもデータベースは別。
- 特許権が保護するのは発明。　例）ソースコードに実現されたアルゴリズムやコンセプトなど
- アルゴリズムやコンセプトの裏にある`技術ノウハウは営業秘密`に該当し、不正競争防止法で保護される。

## 著作権のポイント
- 保護が受けられるのは、完成時より。著作物は仕事として作成したものは法人に属する。　**無方式主義**
- 著作権を持つ人だけが複製をする権利がある **複製権**
- 著作物を勝手に改変してはいけない。**同一性保持権および公衆送信権**
- 私的利用とは「個人的に家庭内程度で・・」という意味
- 私的利用としての例外は「利用者による複製」のみはOK

## 保護の考え方
- ソースコードをコピーするなどのデッドコピーに対して有効なのが著作権
- プログラムの中に反映されているコンセプトを保護するのが特許権　※リバースエンジニアリング等に効く
- 侵害の事案のときは、まず著作権なのか特許権なのかによって対処が異なってくることがポイント

## 特許権のポイント
- 発明したのは誰か？
- 発明の本体である構成を創作したものが発明者になる。
- 着想自体が従来技術からして非予測である場合　：　**基本発明型**
- 着想自体は予測可能ではあるが構成が新規である場合　：　**改良発明型**

## 秘密保持契約について
- 通称NDAと呼ばれる秘密情報の開示にあたり外部に漏らさないことを約束してもらう契約
- 目的としては「秘密保持契約義務」「不正競争防止法をもとに損害賠償請求時に営業秘密の裏付けのため」
- 秘密情報とは何か／適切な管理が行われているかをきちんと定義することが大切

## 営業秘密とはなにか
- 秘密として管理されていること　例）秘密として認識／アクセスが制限されていること
- 事業活動に有用な情報であること　例）顧客名簿など
- 公然と知られていないこと

## 個人情報保護法について
- 個人情報の適正な取り扱い方法の基本を示すことで個人の権利権益を保護する法律
- 生存する個人に対して「氏名、生年月日、その他（音声動作データ等）」によって特定の個人を識別できるもの、もしくは個人識別番号が含まれるもの
- **個人識別番号**とは、身体的特徴のデジタル化したものや、個人ごとに割り当てられたもの（例　マイナンバー等）
- 要配慮個人情報（センシティブ）とは、人種／信条／病歴／犯罪歴などを指し、本人同意が必須。※オプトアウトも適用外
- 個人情報に対して匿名加工を行う場合は、本人確認は不要
- 個人データは、利用目的の範囲内で外部委託するのであれば、第三者提供には当たらない為、本人確認等は不要だが、監督責任はある

## 交渉時のコツ
- 立場で駆け引きしない
- 人と問題を切り離して考える
- 利害に焦点をあてること
- 幅広く複数の選択肢を考える
 
## その他参考リンク
情報システム・ソフトウェア取引トラブル事例集
http://www.meti.go.jp/policy/it_policy/softseibi/trouble%20cases.pdf

SaaS向けSLAガイドライン
https://home.jeita.or.jp/is/committee/solution/guideline/080131/080131SaaS_a.pdf
Alpaca API で株価データ取得

## Alpaca API

![2018-12-29_001.jpg](https://qiita-image-store.s3.amazonaws.com/0/14019/b19e746f-6b55-ae6d-329b-75416387a201.jpeg)

Alpaca API を使うと、real-time market を取得して、分析、オーダーも出すことが出来ます。（米国株のみ?）
が、実際にオーダー出来るのは、米国に住んでいる人だけ？っぽいです。

でも、データ分析はSDKを通して出来ますし、デモトレードは出来るみたいです。
とりあえずデータ取得をやってみました。


## 前準備

### install 

```
pip install pylivetrader
pip install alpaca-trade-api
``` 

### 登録

1. https://app.alpaca.markets/signup
2. ログインしたら、`Generate New Key` を押して、**Key ID**と**Secret Key**を取得しておく

![2018-12-28_14.jpg](https://qiita-image-store.s3.amazonaws.com/0/14019/72c2d169-e57d-7784-d9b3-c3a8b0e39888.jpeg)

## docs 

[Python Tutorial - Alpaca Documents](https://docs.alpaca.markets/getting-started/tutorials/python/)

## 最初のいっぽ

### API クライアント

`tradeapi.REST()` でAPIクライアント作ります。このクライアントを通じて、データを取得したりオーダーしたり出来ます。

```python
import logging
import time
import pytz
import pandas as pd

import alpaca_trade_api as tradeapi
NY = pytz.timezone('US/Eastern')

api = tradeapi.REST(
 key_id='ここを変えてね',
 secret_key='ここも変えてね', 
 base_url='https://paper-api.alpaca.markets',
)
``` 

### データアクセス

#### リアルタイムデータ

現在価格にアクセスする場合は、`get_barset()`を使うようです。ただ、マーケットが開いている時間に試してみたのですが、前日のクローズ時のデータを返してきました。本番アカウントでアクセス出来る人はもしかしたらリアルタイムデータを取得出来るのかもしれません。


```python
api.get_barset('SPY', 'day', limit=1)
``` 

> {'SPY': [Bar({   'c': 248.07,
      'h': 248.29,
      'l': 238.96,
      'o': 242.57,
      't': 1545886800,
      'v': 185975645})]}


#### ヒストリカルデータ

ドキュメントに書いてある内容ですが、ヒストリカルデータの取得方法です。

```python
def prices(symbols):
    
    now = pd.Timestamp.now(tz=NY)
    end_dt = now
    
    # NYの現在時刻が09：30を過ぎていたら
    if now.time() >= pd.Timestamp('09:30', tz=NY).time():
        # end_dt を同日の 23:59 にセット
        end_dt = now - pd.Timedelta(now.strftime('%H:%M:%S')) - pd.Timedelta('1 minute')
        
    return _get_prices(symbols, end_dt)

def _get_prices(symbols, end_dt, max_workers=5):

    start_dt = end_dt - pd.Timedelta('50 days')
    start = start_dt.strftime('%Y-%-m-%-d') # YYYY-mm-dd
    end = end_dt.strftime('%Y-%-m-%-d')

    def get_barset(symbols):
        '''
        AlpacaのDataAPIから価格データを辞書型で取得
        '''
        return api.get_barset(
            symbols,
            'day',
            limit = 50,
            start=start,
            end=end
        )

    # 一度に取得できる銘柄数は200まで
    barset = None
    idx = 0
    while idx <= len(symbols) - 1:
        if barset is None:
            barset = get_barset(symbols[idx:idx+200])
        else:
            barset.update(get_barset(symbols[idx:idx+200]))
        idx += 200

    # api.get_barsetで取得したデータをDataFrameへ変更
    return barset.df

prices(["AAPL","SPY"]).head()

```

![2018-12-29_002.jpg](https://qiita-image-store.s3.amazonaws.com/0/14019/63d02594-d023-86ee-9d84-4f78a08f627a.jpeg)

いいね:thumbsup:
@Qiitaの下書きは @Github Issue でしたら良いんじゃない？のススメ。 @yumainaura #爆速 #UI #UX

同じMarkDownで書ける。
爆速アップロード。
爆速アクセス。
神のUI。

Githubにアップした画像でもQiitaから参照させることは可能。
マナー違反orルール違反かどうかは分からないけど、もしだめなら外部リファラをGithubで弾いてるはず。
現状問題なしだけどGithubから怒られたら全裸で謝罪して.htaccess‥

プレビューに移行しやすい。爆速。神。
いちどポストしおわったあとに、また書き直したい！ってときにもう二度と煩わされたくないし。
ブログ的なリンク作成も超簡単。サジェスト最強。リンクはそっけないけれど…。 #16 
いやQiitaにIssue番号載せても意味がないか。あくまでこちらはGithub完結。

そのままGithubIssueにも残しておけば、サービス継続性高し。
あなたの記事が永遠にレポジトリに残るかもしれませんよ？
もうユーザー資産の消失に怯えることはありませんよ？

QiitaはソーシャルとしてGithubは遺産として利用してみる。
GihubにただIssueを書いただけではGoogle検索すら出来ないでしょうし。
自分の名前のレポジトリ作ってみませんか。例はyumainaura/yumainaura








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
@Github Issue の #Markdown で シャープで見出しを書きづらいのは日本語入力のせいだった @yumainaura

# 見出しが書きたいだけなのに‥

![image](https://user-images.githubusercontent.com/13635059/50532146-63beff80-0b58-11e9-9114-d9350e8b002b.png)

# なんどわずらわされるのだろう‥！永遠の無限地獄か‥？？？？

Escキーを押してもエスケープできない。シャープ、イゲタごと消える。
確定しても変。サジェストされてしまう。
英語入力だとシャープ入力からのスペース入力で「見出し」と認識されるっぽい。ここでちゃんとUIができてる。

# Githubのせいじゃなかった！ごめん！

# プログラマが日本語使うなよって話ですよね、日本人でごめん！！！

とりあえず、見出しを書く時は完全に英数字入力モードに切り替えるなり、いっきに本文を書いて、あとから見出しをつけていく方法にするとうまくいきそう。

それかScrapBox的に見出しのない世界にタイムワープ移行‥するか‥僕らの未来はどちらだ？







https://github.com/YumaInaura/YumaInaura/issues/17








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
@Github Issue がタイトルで神のサジェストをしてくれていることに気付いた件‥！ @yumainaura #UI #UX 

似たIssueを探してくれている？


![image](https://user-images.githubusercontent.com/13635059/50532100-a7fdd000-0b57-11e9-8185-248b0832164c.png)

これはやばい‥！！！！

StackOverflowの機能をUI最強にしたみたいな‥！！！

このGitHub的超絶最高機能が、世の中の全部のアプリケーションに入ればいいのに！！！！

こんな超絶機能さえ今まで知らなくて人生損していて死にたいレベル…死に体…☠☠☠

#再確認

やっぱりサジェストしてくれている‥！！！！！！


![image](https://user-images.githubusercontent.com/13635059/50532114-e5faf400-0b57-11e9-8a5e-e308140b7e76.png)

今まで少人数アジャイル開発が主でIssueも使っていなかったので、あまり。気にしていなかったけれど、これ最強じゃないか…。もっと色んな使いでがありそうだ。


https://github.com/YumaInaura/YumaInaura/issues/16








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
@Github @ScrapBox @Qiita / 🤖 #エンジニア #プログラマ #アウトプット #比較 respected @yuki24 by @yumainaura

今の所この三種類を利用

「どれが」じゃなく」

「どれたちを組み合わせて」使うか、料理にも似た、あれだ…

神の最強アプリケーションはまだ存在しないので、どうにかして並行利用が必要だと思っている

# Github

サービス継続性最高
「永遠に消えない場所」としてIssueをブログ的に活用する、ユーザー独自利用
IssueなどのWebUI最強すぎてやばい‥Githubに怒られたら全裸で謝罪して切腹‥

# Qiita

国内サービスで最大限にリーチできるので利用
GithubIssueで下書きした内容をちょっと手直ししたりしてMArkDownのまま使用
GithubIssueとの素晴らしい親和性！さすがどちらもMarkDown！さすがどちらもエンジニアサービス


# ScrapBox

スナップショット的に使う
Twitterより消えてほしくないもの、だけどGithubほどに永遠さを望まないもの
Qiitaのように拡散、リーチしなくても良いもの
爆速UI/UX最高！神のサービス！
エンジニア向けサービスではないので、コードは書かずちょっとした思いつきを書くなど
**失礼かもしれないがGoogleやMicrosoftに買収してほしいレベル**

# ところで

2018年OsakaRubyKaigiにLT登壇したとき、自分の前座のあとに発表されていた yukinishijima さんの「エンジニアはツール類を使い分けよう！ツールボックスにたくさんの道具を入れておこう！」という発表がすごく印象的で、ずっと今でも記憶に残っていて、エンジニアライフに大いなる影響をいまもたらしている感じ

http://regional.rubykaigi.org/osaka01/

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/9056547e-5900-73f8-1f64-9684f766f177.png)

https://github.com/yuki24

New York, NY
www.yukinishijima.net

yuki24

---

```ruby
p "ちなみに@yumainauraはスポンサー枠での登壇でしたので、スケジュールには載ってませんが、Web開発チームで頑張ったんですよ‥！Bigqueryの話。懐かしい思い出。"
```

Rubyの話‥

RubyはPerlとは違って

[yumainaura qiita - Google Search](https://www.google.com/search?q=yumainaura+qiita&oq=yumainaura+qiita&aqs=chrome..69i57j69i60l3j69i59l2.1970j0j7&sourceid=chrome&ie=UTF-8)









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Railsでのクラスメソッドとは

一般に、あるメソッドがオブジェクトのインスタンスを必要としていない場合は、クラスメソッドにするのが常道。

例えば以下では、digestメソッドとnew_tokenメソッドがクラスメソッドとして定義されている。

```app/models/user.rb
 class User < ApplicationRecord
  before_save { self.email = email.downcase }
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }

  # 渡された文字列のハッシュ値を返す
  def User.digest(string)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                                  BCrypt::Engine.cost
    BCrypt::Password.create(string, cost: cost)
  end

  # ランダムなトークンを返す
  def User.new_token
    SecureRandom.urlsafe_base64
  end
end
```

参考：[Railsチュートリアル](https://railstutorial.jp/chapters/advanced_login?version=5.1#cha-9_footnote-7)
まだMarkDownエディタで消耗してるの？GitHub Issueが秀逸すぎる件。ユーザー独自利用する？ @yumainaura #UI #UX

#Hey!

どこが秀逸なのか？実感で皆分かってるよね？
爆速アップロード
超軽いUI最強
Mac環境に優しい、Web開発者ご満悦

#What

だけど‥用途だけが違うんだよ！！！！

Issue的機能をもっと自由に使いたいんだよ
フォーラムでもないしWikiでもないし、プレビューとか単なる資料作成とかさ‥
MarkDowkエディタとしてさ‥

#Purpose

「元の目的」なんか考えるのをやめてしまえば楽になる
Githubごめん‥という気持ちとともに「これもエンジニアリングの大いなるissueである‥！」という定義を広げる気持ちで…

#Service

サービス設計的にいうと「ユーザーが定義を広げ始めるとき」は、サービス自体の限界を押し広げるときではあると思う
Gituhubにしてなお、こんなケースに出くわすとは、いや、Githubだからこそ‥かな

#Preview

ちなみにコード差分確認も結局Githubのプレビューが最高だよね？
PR作らずに差分だけ確認する方法もオススメ

#Others

ところで

見出しを書くのはちょっとつらい、issue番号からのサジェストになる

![image](https://user-images.githubusercontent.com/13635059/50531861-ef825d00-0b53-11e9-9e6d-a2aa0bd03ac9.png)

むしろこれ、リンクとして最高に使えるのでは？いまごろ気付いたけど
MarkDown入力を邪魔するやつ！ぐらいの意識しかなかった


---

https://github.com/YumaInaura/YumaInaura/issues/14

[yumainaura qiita - Google Search](https://www.google.com/search?q=yumainaura+qiita&oq=yumainaura+qiita&aqs=chrome..69i57j69i60l3j69i59l2.1970j0j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
まだREADMEをgit管理して消耗してるの？ Github web editor @yumainaura


更新多くない？ 管理されてる？

更新が面倒で管理やめてない？

それぐらいならWebEditorでしょ。

![image](https://user-images.githubusercontent.com/13635059/50531798-6b2fda00-0b53-11e9-92d7-317520049abb.png)

URL e.g

https://github.com/YumaInaura/YumaInaura/edit/master/README.md

ブランチ運用にはご注意を。

---


https://github.com/YumaInaura/YumaInaura/issues/13

[yumainaura qiita - Google Search](https://www.google.com/search?q=yumainaura+qiita&oq=yumainaura+qiita&aqs=chrome..69i57j69i60l3j69i59l2.1970j0j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
git commit, git mergeの時にvimのエラーが出る

gitを使う際、GUIとCUIどちらが良いかというのは色々とご意見があると思いますが、私はCUI派です。
そんな私がgitを使う時に出くわしたエラーの対処についてを今回記事にしました。
# エラー内容
vagrantで仮想環境を作成して開発しているのですが、git commitやgit mergeするといつもこんなエラーが出てました。
<font color="Silver">ぶっちゃけEnterキーを押せば無理矢理編集できたので2ヶ月くらい放置してた</font>

```
Error detected while processing /home/vagrant/.vimrc:
line   91:
E492: Not an editor command: NeoBundleFetch 'Shougo/neobundle.vim'
line   95:
E492: Not an editor command: NeoBundle 'itchyny/lightline.vim'
line   96:
E492: Not an editor command: NeoBundle 'bronson/vim-trailing-whitespace'
line   97:
E492: Not an editor command: NeoBundle 'Yggdroot/indentLine'
line   98:
E492: Not an editor command: NeoBundle 'scrooloose/nerdtree'
line   99:
E492: Not an editor command: NeoBundle 'ctrlpvim/ctrlp.vim'
line  100:
E492: Not an editor command: NeoBundle 'tacahiroy/ctrlp-funky'
line  109:
E492: Not an editor command: NeoBundleCheck
Press ENTER or type command to continue
```
初めは、.vimrcを色々とイジっているのでその影響かな、とか思ってましたが…

# 意外と解決方法が見つからない
はい、意外と解決方法が見つかりませんでした。
[このteratailの質問](https://teratail.com/questions/10250)とかを参考に.vimrcに記述している`set runtimepath+=~/.vim/bundle/neobundle.vim/`の部分を絶対パスにしたりしてもダメでした。

# 解決方法--gitのデフォルトエディタはvi
vimについて色々と調べても埒が明かなかったので、gitについて調べてみると、なんとgitのデフォルトエディタはvimではなく**vi**でした…
なので、以下のように設定した後は、上記のエラーは出てきませんでした。

```
$ git config --global core.editor "vim"
```
Qiitaの drafts/new を GoogleChrome でブクマ・エイリアス登録して爆速ポストできるようにする方法 @yumainaura

こんな感じ

https://qiita.com/drafts/new

![image](https://user-images.githubusercontent.com/13635059/50531734-77676780-0b52-11e9-8d08-d2d14262aaf8.png)

0.5秒でポスト開始可能！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/6c848f14-85ac-e9d7-6e1d-a161bbaa382f.png)


ところでアドレスバー検索でなんだっけ？思い出せない？打ち間違う？というときは

![image](https://user-images.githubusercontent.com/13635059/50531708-2b1c2780-0b52-11e9-9657-59560769e1f6.png)

手が間違うイコール
その方向に手が入力したがっているということなので
そいつをブクマして検索してやる

Chromeにたくさんのエイリアスを作っておく
重要なページであればあるほど爆速アクセスできるようにしておく



どのようなツールにも言える話
手が間違うなら、手のほうが正しい‥！
そちらに合わせる


https://github.com/YumaInaura/YumaInaura/issues/12

[yumainaura qiita - Google Search](https://www.google.com/search?q=yumainaura+qiita&oq=yumainaura+qiita&aqs=chrome..69i57j69i60l3j69i59l2.1970j0j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
エンジニアは迷わない。爆速のすすめ。アジャイル開発。

アジャイル開発のスタンドアップミーティングで実装相談。迷ったらどちらかに倒す。すごろくのダイスを振っても良い。なぜならどちらでも良いことで人間は迷うように出来ているから。ギリギリ最後まで最善を尽くして議論するけれど。

見積もりでポイントが割れたら大きな方に倒す。迷う時間がもったいない。どうせ相対見積もりだし倒す方向さえ決めておけばブレない。

絵文字を使う時も爆速。絵文字か顔文字か迷うのではなく、それぞれのIME環境で爆速で出てくる方を優先する。iPhoneなら絵文字は多少打ちやすい。Macじゃ地獄。SlackAppならIMEじゃなくてSlack記法。でもSlack+iPhoneならやっぱり打ちにくいのでiPhone的入力。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/6335313c-de5d-2a9d-bcea-cc29e4f33fe5.png)

アジャイル開発の定義を広げよう！

https://github.com/YumaInaura/YumaInaura/issues/11

[yumainauraアジャイル - Google Search](https://www.google.com/search?q=yumainaura%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB&oq=yumainaura%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB&aqs=chrome..69i57.1956j0j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Qiita – いいねが付かない数のトライアルをする‥！大量投稿‥！ごめん‥！@yumainaura

#要件

1日30記事ぐらい書きたい
Twitterじゃ嫌だQiitaがいい
誰にも賛同されないようなニッチな記事をたくさん書いていきたい
**でも他の人、サービスのノイズになりたくない**
最近ノイズになってるような気がしたので自粛する
単に気のせいかもしれない
タグを適切に設定する
ポエムならポエムで
ポエムでさえ登録数が多そうなので、勝手にトライアル、閲覧禁止的なタグを作るかもしれない
でも、これは有用かも？と思ったらあえてタグを外さない
いいねがつくスピードよりも爆速で大量投稿する
迷惑だったら全裸で謝罪‥

https://qiita.com/YumaInaura

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/04980a5c-10b8-89ea-a4a1-7839013d184d.png)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Make your Github Issue Blog service @yumainaura

# Sorry Github!

# Even if you feel anger with me thenbang forever.

# E.g

Just create issue and write about programming or tools

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/dad30152-da98-5fe4-b14f-6aefbf4b85d6.png)

# Why not Github Gist?

Because

Unable to upload image with mac shortcut copy and paste
Unable to preview
god..

 
# Why Github 

Because Github is forever i think
Other services maybe will die in the future
Google Docs or Medium or other services i do not best










<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Mac PC / Allow Apps < Check < Mac Password < Lock Icon 🔒 < Security Privacy < Settings  / e.g Rockets 

#Japanese

Macアプリを設定から許可する方法。

related [「Mac で絵文字を Slack 形式で補完入力できるアプリ "Rocket" がすごい！ emojiが見つからない対策。」を編集 - Qiita](https://qiita.com/drafts/ed62ffbd70a5355bb5aa/edit)


#Settings

Search Allow Apps

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a2acb6a0-8172-cefb-5d20-0987258d6180.png)

# Left Bottom 🔒 icon

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/ab5b8c6d-b30a-b395-427d-a51a2cf06207.png)

# Mac Password

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/8878fd01-7ba4-2f2f-5782-da72db3c6630.png)

# Enabled

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/e16ad341-615d-ef3d-f5ca-a55724de2d03.png)


# Check it

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/8b3dffa1-e4fc-93e1-f1a3-653c1e255549.png)

# OK!


![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/85320cd5-0cfa-cfe8-9ae2-5a68b7b2aa2f.png)


[「Mac で絵文字を Slack 形式で補完入力できるアプリ "Rocket" がすごい！ emojiが見つからない対策。」を編集 - Qiita](https://qiita.com/drafts/ed62ffbd70a5355bb5aa/edit)

[絵文字yumainaura - Google Search](https://www.google.com/search?q=%E7%B5%B5%E6%96%87%E5%AD%97yumainaura&oq=%E7%B5%B5%E6%96%87%E5%AD%97yumainaura&aqs=chrome..69i57.2038j0j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Raspberry Pi セットアップ メモ

# OSインストール
## OSダウンロード
https://www.raspberrypi.org/downloads/raspbian/

- Raspbian Stretch with desktop and recommended software
    - GUI フルインストール版
- Raspbian Stretch with desktop
    - GUIなし
- Raspbian Stretch Lite
    - GUIなし

今回は「Raspbian Stretch with desktop」をインストールする。


## OSインストール用のメディアの作成
### Windowsの場合は、SD Formatterを使用する。
https://www.sdcard.org/jp/downloads/formatter_4/eula_windows/index.html
![sdformatter.png](https://qiita-image-store.s3.amazonaws.com/0/28184/c024af79-e488-2a26-b646-cfc219589c3d.png)
### イメージの書き込み
https://www.balena.io/etcher/
![etcher.png](https://qiita-image-store.s3.amazonaws.com/0/28184/9ee03ab7-81e1-8b77-afa5-2e0a3fac0979.png)
1. イメージを選択
2. SDカードのドライブを選択
3. Flash!で書き込み

## OSインストール
作成したmicroSDカードを指して、LANケーブル、HDMIケーブル(モニタ)、キーボード、マウス、電源ケーブルを接続して起動します。
![R0001292.JPG](https://qiita-image-store.s3.amazonaws.com/0/28184/375f7620-ca78-e76d-bf8a-297168d94d9c.jpeg)

1. ディスクトップ画面が起動して『Welcome to Raspberry Pi』ダイアログが表示されたらNextを押す。
2. Set Countryでは、Country：Japan、Language：Japanese、Timezone：TokyoにしてNextを押す。
3. Change Passwordではパスワードの設定をしNextを押す。
4. 無線LANが使えるようであれば選択してNextを押す。使えなければSkip。
5. Update Softwareでは、ソフトウェアのアップデートをするのであればNextを押す。
6. Setup Completeとなるので、再起動！

# sshの設定

1. Raspberry Pi SoftwareConfiguration Toolを起動する。
 $sudo raspi-config
2. [5 Interfacing Options]を選択する
3. [P2 SSH]を選択する
4. 「Would you like the SSH server to be enabled?」と聞かれるのではいを選択する。
5. 「The SSH server is enabled」と確認されるので了解する。

$ssh pi@192.168.0.10
でパスワードを入力すると接続できる。

# 液晶ディスプレイの設定
『Quimat 3.5インチタッチスクリーン HDMIモニタTFT LCDディスプレイ Raspberry Pi 3 2 Model B Rpi B B+ A A+ 映画 アーケードゲーム オーディオ入力 RPi GPIOブレークアウト拡張ボード 保護ケースキット アクリル(透明) QC35C 』を買って繋げてみた。
https://www.amazon.co.jp/gp/product/B075K56C12

LCDへの出力はなんの設定変更もなしにできた。
タッチパネルドライバのインストール

$ git clone https://github.com/goodtft/LCD-show.git
$ chmod -R 755 LCD-show
$ cd LCD-show/
$ sudo ./MPI3508_480_320-show

再起動で解像度480x320で起動し、タッチパネルも使えるようになる。
ただ480x320だと画面の領域が狭すぎるので、設定から800x600辺りに変更するのがちょうどいいです。
laravel クエリビルダでリクエストがあるかどうかでjoinの条件を変更する

ORMまだ使っていなくてクエリビルダでほぼSQLを書いてます。
joinしてるとき条件によってjoinの中でwhere句を動的に追加したい場合の記述

```php
$articles = DB::table('user')
                ->join('article', function ($join) use ($request) {
                    $join->on('user.id', '=', 'article.hoge_id');

                    // リクエストでいいねがあるものだけとりたいといわれたとき
                    if ($request->has('good')) {
                        $join->where('article.good_flag', '=', 1);
                    }
                })->get();
```

ReadDouble
Laravel 5.6 データベース：クエリビルダ
上級のJOIN文
https://readouble.com/laravel/5.6/ja/queries.html#joins
InDesignからZIPを解凍するスクリプト

InDesignから、フォルダ選択でフォルダを選択すると、中にある *.zip を解凍するスクリプト。
Windows 10 と MacOS X High Sierra, Mojave で動作確認
（Mojaveだと最初動かす時にアラートが出るかも）

適当に何かに組み込んで使ってください。


```js
(function main() {
    var zipFolder = Folder.selectDialog('zipフォルダを選択');
    var zipFiles = zipFolder.getFiles();
    if (zipFiles.length) {
        for (var i = 0, len = zipFiles.length; i < len; i++) {
            var zipFile = zipFiles[i];
            if (/\.zip$/i.test(zipFile.name)) {
                var result = unzip(zipFile);
                var unzipFolder = result[0];
                for (var j = 0; j < 600; j++) {
                    if (unzipFolder.getFiles().length) break;
                    $.sleep(100);
                }
            }
        }
        alert('処理を終わりました。');
    }
}());

function unzip(zipFile) {
    var objFolder = Folder(zipFile.absoluteURI.replace(/\.zip$/i, ''));
    if (!objFolder.exists) objFolder.create();
    var zipFilePath = zipFile.fsName,
        objFolderPath = objFolder.fsName,
        scpt, lang;
    if ($.os.toLowerCase().indexOf('windows') >= 0) {
        scpt = [
            "dim objShell,objWshShell,objFolder,ZipFile",
            "Set objShell = CreateObject(\"shell.application\")",
            "Set ZipFile = objShell.NameSpace (\"" + zipFilePath + "\").items",
            "Set objFolder = objShell.NameSpace (\"" + objFolderPath + "\")",
            "objFolder.CopyHere ZipFile, &H14 + &H10",
            "returnValue = \"Copying " + zipFilePath + "\""
        ].join('\r\n');
        lang = 'VISUAL_BASIC';
    } else {
        scpt = 'do shell script "ditto -x -k -v \\"' + zipFilePath + '\\" \\"' + objFolderPath + '\\" 2>&1"';
        lang = 'APPLESCRIPT_LANGUAGE';
    }
    var result;
    try {
        result = app.doScript(scpt, ScriptLanguage[lang]);
    } catch (e) {
        result = 'Error: ' + e.message;
    }
    return [objFolder, result];
}
```
Atomでjbを書く際にシンタックスハイライトをあてたい

`jbuilder`の代わりに`jb`を使うことに。

- [GitHub - amatsuda/jb: A simple and fast JSON API template engine for Ruby on Rails](https://github.com/amatsuda/jb)

configに移動して、

<img width="588" alt="capture.png" src="https://qiita-image-store.s3.amazonaws.com/0/34733/2940f5c8-e6a5-8155-27c4-8484787ba81d.png">

`customFileTypes`を追加。

```
core:
  customFileTypes:
    'source.ruby': [
      'jb'
    ]
```

参考
- [Basic Customization](https://flight-manual.atom.io/using-atom/sections/basic-customization/#customizing-language-recognition)
fish 3.0がやってきた

とうとうこの時がやってきましたね。

**fish 3.0がリリースされました！！**
すごい。いいぞ。

fish 2.0がリリースされたのが2013年とからしいので、実に5年ぶりのメジャーアップグレードとなります。

# fishってなによ

the **f**riendly **i**nteractive **sh**ell です。
カスタマイズなしで高機能な補完が効くなど、とにかくユーザーに優しく便利なシェルです。

https://fishshell.com

# とりあえず試す

以下よりどうぞ。

GitHub:
https://github.com/fish-shell/fish-shell

Ubuntuであれば以下のコマンドでインストールできます。

```shell
sudo apt-add-repository ppa:fish-shell/release-3
sudo apt-get update
sudo apt-get install fish
```

# 注目の変更点など

## `wait`コマンドの追加

今まではバックグラウンドジョブを待つ`wait`コマンドが実装されておらず、
[fish-shellによる並行処理の方法](https://qiita.com/JorgeBucaran/items/9e41da125a9ed3182141)
のように面倒な方法を使う必要がありました。

fish 3.0ならばもうその必要はありません。
なぜならば、すでに我々が実装したからです。[^1]

## `&&`と`||`が使える

バージョン2.xでは

```shell
$ cmd1 && cmd2
```
のような書き方ができず、

```shell
$ cmd1; and cmd2
```
と書くことを強いられてきました。
これが嫌でfishを使うのをやめてしまった、という人も多いのではないでしょうか。

しかし、3.0ではとうとう両方の書き方に対応したようです。すばらしい。

## `math`コマンドの改善

fishには`math`コマンドが存在し、

```shell
$ math "2*3-1"
5
```
などとしてコマンドラインで計算を行うことができました。

元々`math`コマンドは`bc`コマンドのラッパーとして機能していましたが、3.0からはビルトインコマンドに変更になりました。
それに伴ってデフォルトで浮動小数点演算が有効になり、従来では

```shell
$ math "3.14/2"
1
```
となってしまっていたところを

```shell
$ math "3.14/2"
1.57
```
のように、自然な形で演算してくれるようになりました。個人的には結構嬉しい。

## キーバインドの設定

従来は`config.fish`に`bind`コマンドを用いてキーバインドを記述する際は`fish_user_key_bindings`関数内で`bind`を呼ばなければならないという制限がありましたが、この制限は撤廃され、`config.fish`に直接`bind`を記述して良いことになりました。

従来通り`fish_user_key_binding`は実行されるため、設定の変更は必要ありません。

# おわりに

他にも多くの変更点があるので、気になる人はchangelogを覗いてみると良いと思います。
https://github.com/fish-shell/fish-shell/blob/master/CHANGELOG.md

総じて、かなりイケてるシェルに仕上がっているという印象です。

fishを既に使っている人は3.0にアップグレード、使ってない人は今すぐ乗り換えると吉です。

お魚美味しい。

[^1]: 弊大学には素晴らしい実験（演習？）があってですね、fishにwaitコマンドを実装したりしました。事の顛末については http://fish2017.hatenablog.com を見てください。
Google SpreadSheetをShift-JSでcsv出力する。


#コード
```GAS:shiftjs.gs
function csv_Shift-JS(){
  var csvstr = ""//これに追記していく。
  var date = SpreadsheetApp.getActiveSheet().getDataRange().getValues();//アクティブシートのデータがある部分を一括取得
  for(var i = 0; i<date.length; i++){
    csvstr += date[i]+"\n";//最終行まで繰り返し
  }
//入れ物を作って、Gdriveへ出力
  var blob = Utilities.newBlob("", "text/csv", "Shift-JS.csv").setDataFromString(csvstr, "Shift_JIS");
  DriveApp.createFile(blob);
 }
```


#趣旨
年賀状を作ろうと住所録をCSV出力し、某ソフトへ取り込もうとしたところ、Shift-JSで寄こせとのこと:expressionless:

Google spreadSheetのデフォルトのcsv出力では、Windowsで文字化けしてしまうので、手っ取り早く、Shift-JSでGdriveへ出力します。


複数シートがある場合は、３行目を以下に書き換えて、お目当のシート名にしてくださいな。

```
  var date = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート名").getDataRange().getValues();
```

#課題
・本当はidriveへGASから直接アップロードしたい。
・本当はContact-XMLで出力したい。
KokenをDockerで起動してみる

# Kokenとは？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/00cd524f-d1ef-1bf0-0733-0ffaa9c7080d.png)


## [Koken](http://koken.me)
オープンソースの写真管理Webアプリケーション。
Lightroomの統合機能や各種プラグイン機能(一部有料)もあり、結構管理機能が充実している。
URLにアクセスすると、ブログポストのような感じで表示できる。

Lightroomや、MacのPhoto昨日とか使っているし、Google Photoも使っているが、自前のNAS上などで展開するうえでいいやつないかな？と探したのがきっかけ。

# Docker Hubから落としてくる

```
docker pull koken/koken-lemp
```

# Docker Runでイメージから起動

```
docker run -d --name koken -p 8080:8080 koken/koken-lemp
```

* Docker Hubに挙がっているイメージを利用する場合、デフォルトポート(8080:8080)で接続しないとLoop Back Connection Errorとなってサムネイルとかでなくなるので注意。

# Docker Logsで一応Log確認

```
docker logs koken
```

*ok: down: koken: 0s, normally up*と出てれば問題なし。


# 使用

http://localhost:8080/ にアクセス。

## Admin情報の登録

![c1448480-3613-41f3-b7bc-ce0ad659dfd1.png](https://qiita-image-store.s3.amazonaws.com/0/51857/b5f2a173-9541-594b-df24-7c0812e0cc40.png)



## ログイン

名前とメールアドレスの登録を行って、ログイン画面に行くのでログイン。

![8ae8b66d-4396-4730-babe-08c57de6fb0a.png](https://qiita-image-store.s3.amazonaws.com/0/51857/8bd14d56-e597-699c-6cfb-cd76ff1057cc.png)


## 項目を追加する

### ドラッグ＆ドロップ

![fb448625-8ec9-4621-9b7b-b7df4b7eb6bb.png](https://qiita-image-store.s3.amazonaws.com/0/51857/630aa03e-11ea-f584-b599-eb624d0c3fbe.png)

### Import Contentで追加

![vivaldi_2018-12-29_15-00-34.png](https://qiita-image-store.s3.amazonaws.com/0/51857/7d7fe908-3d60-37c7-b0a0-7e137be8d8e2.png)

* 指定エリアへのドラッグ＆ドロップ
* ファイル選択ダイアログからの選択
* リンク先からのインポート
* Vimeoからの動画のインポート
* Instagramからのインポート


# 携帯で見てみる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/a24ea068-2e4e-3070-acaa-5f1ebbcffa26.png)


こんな感じで、直接写真の公開等が行える。
自分で写真サイト運営するのに向いてる。
ラズパイでYOLOを動かしてみた

最近、何らかのマイコンボード上で、CNNのモデルを動かすというのが自分のテーマでありまして、
最近確認したのが
１） Google Vision KitのVision bonnet上で、ジャンケンの手の形を判定させた
２） Caffeのクラウド環境（AWS p2.xlarge)でSqueezeNetのモデルを転移学習させたものをRaspberry Pi上動かす（確認中）
3) SONY Spresenseのメインボード上で、Hello Worldを動かした
4) FPGAボードのPYNQ-Z1やUltra96の使い方を勉強中
　（是非、いずれかで、高速に転移学習モデルを動作させたい！）

という自己学習なのでゆっくりですが、しかし、確実に単なるTensorflowやKerasをローカルで
動作させるというレベルから一歩踏み出している感じがする、今日この頃です。

そんな中で、年末の連休に突入した本日、今日こそはちゃんと寝ようと思ったのだが、やはり1時くらいから
PCの前でAIの勉強に励んでいる自分がいる。w
そしてふらっと迷い込んだのが、YOLOによる物体検知。

AIの勉強をしていると、数式やモデルの構造、専用ボードの知識の探求ということが多く、中々目に見えて画像処理をしているという感覚を得るのに時間がかかるものだが、今回、[こちらの記事](http://yagitsawa.github.io/2018/04/07/darknet-with-nnpack/)を参考にやってみたところ、１時間もかからずに、ラズパイ上でYOLO v2による静止画写真の中の物体を認識出来たので、覚え書きしておきます。

ほとんど、この記事の手順通りでOKなのだが、最後だけ、cfg/yolo.cfg を以下のように cfg/yolov2.cfgにしないと、無いよってエラーになるのでそれだけ注意です。

```
 ./darknet detector test cfg/coco.data cfg/yolov2.cfg yolov2.weights data/kite.jpg
```
railsでユーザー全員にメールを送る。

#初めに

ユーザー全員にメールを送る方法を書いていきます。


#下準備

まずはアプリの設定から

```
rails new sample_mail
rails g model user name:string email:string
rails db:migrate
rails g controller mails index send_mail
```

としてroutes.rbに

```
get 'mails/index'
get 'mails/send_mail'
```

でOK

gemfileに

```
gem 'faker'
```

として

でもデータをつくっていく

```
rails c
100.times { User.create(name: Faker::Name.first_name, email: Faker::Internet.email }
```

これでユーザが100人つくれました。


#メールを送る

まずは

```
rails g mailer SampleMailer
```

とする。

そうすると必要なファイルが作成される。


mailers/sample_mailer.rbにユーザにメールを送る処理を書いていく


```ruby:sample_mailer.rb

def send_mail(user)
  @user = user
  mail(subject: '確認メール',to: user.email, from: "test@example.com")
end 

def self.send_mail_users
  @users = User.all
  @users.each do |user|
    SampleMailer.send_mail(user).deliver_now
  end 
end 

```

send_mailメソッドは普通に一つのユーザーにメールを送るもので

```
SampleMailer.send_mail(user).deliver_now
```

でuserにメールを送ることができます。

なのでself.send_mail_usersで@users = User.allをしてそこからループで@users全員にメールを送っています。


次に

views/sample_mailerのなかに送るメールの内容を書いていきます。

send_mail.html.erb,send_mail.text.erbを作ります。

ファイル名はメールを送るメソッドの名前と同じではいけないです。

適当に中身をかいたら完了です。


最後にメールに関する設定をconfig/environment/development.rbに書いていきます。

とりあえずは

```
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: "127.0.0.1", port: 1025}
```

と書いておきます。


あとは実行してあげればメールを送れるので

views/mails/index.html.erbに

```
<%= link_to "送信", mails_send_mail_path %>
```

としてあげて

controllers/mails_controller.rbに

```ruby 

def index 
end 

def send_mail
  SampleMailer.send_mail_users
  redirect_to mails_index_path
end 

```

と書いてあげればOK

indexにアクセスして送信を押せば全員にメールを送れます。

#確認

ちゃんとメールが送られているか確認したいので


```
gem install mailcatcher
```

として

コンソールで

```
mailcatcher
```

と打ってからメールを送信します。

そのあと

127.0.0.1:1080にアクセスしたら送ったメールを確認できます。


おわり:sunny:
[C言語]関数と配列周りでハマりそうなポインタの仕様

# C言語、ポインタと配列周りでハマりそうな仕様
```c
#include <stdio.h>

void funcA(int x){
 // スコープ外で値代入
 x = 10;
}

void funcB(int* x){
 // 間接参照で値を代入
 x[0] = 30;
}

// funcC(int* x){
// 関数の引数に配列を指定すると↑のように勝手にint*型宣言される
void funcC(int x[3]){
 // なのでパッと見スコープ外に見えるが、間接参照されている
 x[0] = 50;
}

int main(void){
 int a = 5;
 funcA(a); // 値渡し
 printf("funcA(): a=%d\n", a); // 変数aの値は5のまま

 int b[3];
 b[0] = 20;
 funcB(&b[0]); // ポインタ渡し(配列は先頭ポインタを渡す)
 printf("funcB(): b[0]=%d\n", b[0]); // 配列b[0]の値は20から30に変わる

 int c[3];
 c[0] = 40;
 // 下記のように&と[]を省略すると、勝手に配列の先頭ポインタを渡している扱いになる
 funcC(c); // ポインタ渡しになる ※「funcC(&c[0])」 と同等
 printf("funcC(): c[0]=%d\n", *c); // 配列c[0]の値は40から50に変わる

 printf("---------\n");
 printf("funcA(): a=%d, funcB(): b[0]=%d, funcC(): c[0]=%d", a, b[0], *c);
 // b[0]と*bは同じ意味
 // b[整数]と*(b+整数)は同じ意味

 return 0;
}
```

## 結果
```
funcA(): a=5
funcB(): b[0]=30
funcC(): c[0]=50
---------
funcA(): a=5, funcB(): b[0]=30, funcC(): c[0]=50
```
swift4 UISwitch OFFの時の色変更

実行環境：Xcode10.1
使用言語：Swift4.2

```swift:sumple.swift
        /// 色をカスタマイズ1
        switch1.onTintColor = UIColor.blue    /// ONの場合の背景色
        switch1.tintColor = UIColor.darkGray    /// OFFの場合の縁取りの色
        switch1.backgroundColor = UIColor.lightGray    /// OFFの場合の背景色
        /// 背景色はview全体にかかるので角丸にして同じようにする
        switch1.layer.cornerRadius =  switch1.frame.size.height / 2

        /// 色をカスタマイズ２
        swich2.onTintColor = UIColor.white
        swich2.tintColor = UIColor.darkGray
        swich2.backgroundColor = UIColor.red
        swich2.layer.cornerRadius =  swich2.frame.size.height / 2
```

上の値を設定して実行するとこんな感じ

![Simulator Screen Shot - iPhone XS Max - 2018-12-27 at 12.09.35.png](https://qiita-image-store.s3.amazonaws.com/0/226381/05b15dcd-6af9-731d-2e5b-aeac24a94928.png)


色をカスタマイズ２の方は微妙に背景色がはみ出ているので、使用する色によっては使えない...
ON時が濃い色、OFF時が薄い色ならこれでいいかも
どうしても気になる人はいい感じにマスクするなりしてあげてください。
簡単にもっと綺麗にできないものか...