OmniAICreator/Qiita-1.07M huggingface dataset:
Python + Django でVue.jsを使ってみる

Vue.jsをDjangoで使ったときのメモ

###1.主な環境

| カテゴリ       | バージョンなど       |
|:-----------------|------------------:|
| os               |windows 10 home 64bit | 
| python           |            3.6.5 |
| django             |              2.0.7|

###2.アプリケーション

vuetestとします。

####(1)ファイル構成

```
vuetest
│  admin.py
│  apps.py
│  models.py
│  tests.py
│  urls.py
│  views.py
│  __init__.py
│  
├─migrations
・・・
│          
├─templates
│  └─vuetest
│          index.html
```

####(2)urls.py

```urls.py
from django.urls import path
from . import views

app_name = 'vuetest'
urlpatterns = [
    # 書籍
    path('', views.index, name='index'),   # 一覧
]

```

####(3)views.py

```
from django.shortcuts import render

# Create your views here.
def index(request):
    return render(request, 'vuetest/index.html',{'form_name': 'index'})
```

####(4)index.html（失敗例）

```index.html
{% extends 'commons/base.html' %}

{% load static %}

{% block links %}
  <script src="{% static 'js/vue.min.js' %}"></script>

{% endblock %}

{% block headertitle %}
Vue.js（これは失敗する例です。）
{% endblock %}

{% block content %}
</head>
<body>
  <div id="app">
    <p>{{ message }}</p>
    <br/>
  </div>
</body>

<script>

window.onload = function() {
  new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue.js!',
      info: null
    },
  })
};
</script>
{% endblock %}

```

これで表示されるかな・・・と思ったら、ブラウザには何も表示されない。理由は簡単で、{{ message }}で、vueの変数を表示しようとしているが、この{{ }}は、Django Templateの予約記号でもある。

これを回避するために、Vue.jsのパラメータに「delimiter」を指定して、vue.jsの変数の予約記号を変更することで回避する。

変更後のhtmlは、以下のとおり。delimiterで指定した変数の開始記号、終了記号をhtml内に記述することで変数を表示することができる。

####(4)index.html（変更後）

```index.html
{% extends 'commons/base.html' %}

{% load static %}

{% block links %}
  <script src="{% static 'js/vue.min.js' %}"></script>
{% endblock %}

{% block headertitle %}
Vue.js
{% endblock %}

{% block content %}
</head>
<body>
  <div id="app">
    <p>[|[ message ]|]</p>
    <br/>
  </div>
</body>

<script>
window.onload = function() {
  new Vue({
    el: '#app',
    delimiters: ['[|[', ']|]'],
    data: {
      message: 'Hello Vue.js!',
    },
  })
};
</script>
{% endblock %}
```

変更後に表示される画面

![image.png](https://qiita-image-store.s3.amazonaws.com/0/246741/0f1ac6c5-18dd-277d-0f36-a8086b8ce503.png)
【Unity】Warning CS0649が出る場合の対応(is never assigned to, and will always have its default value 0)


環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Unity 2018.2.15f1


以下のエラーになる場合

DestroyScript.cs(28,28):
<font color="DeepPink"> Warning CS0649</font>: Field 'DestroyScript.life' <font color="DeepPink">is never assigned to, and will always have its default value 0 </font>(CS0649) (Assembly-CSharp)


```
#pragma warning disable 0649
```
を追加すればOK

```c#:DestroyScript
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/*
 * Prefabsの「bullet」と「HitParticles」
 */
public class DestroyScript : MonoBehaviour {
#pragma warning disable 0649
    [SerializeField] float life;
	void Start () {
        // 球のゲームオブジェクトを破棄する
        Destroy(gameObject, life);
	}
}

```
pandas 自己流チートシート

#チートシート（翻訳含む）
英語）https://github.com/pandas-dev/pandas/blob/master/doc/cheatsheet/Pandas_Cheat_Sheet.pdf
日本語）https://qiita.com/s_katagiri/items/4cd7dee37aae7a1e1fc0

上記で大体わかるが、
データ加工など痒い所に手が届かない点があるので、自分なりに書く
（かぶっているところもあるが気にしない）

#詳細（随時更新予定）
```python

import numpy as np
import pandas as pd

df = pd.DataFrame(
    {"Age":[22,33,44],
     "Sex":["man","woman","man"],
     "Embarked":["S","C","Q"],
     "FamilyS" :[1,2,4],
     "Name":["TORO Mr. BU","A Miss. gao","ninnniku"]
    }
)

#Use CSV
df.to_csv("file_name")
df=pd.read_csv("file_name")

### treat data
#checknull
null_val = df.isnull().sum()
percent = 100 * df.isnull().sum()/len(df)
kesson_table = pd.concat([null_val, percent], axis=1)
kesson_table.columns= ['欠損','%']

print(df)
#fillnull
df["Age"] = df["Age"].fillna(df["Age"].median())

#data change
#1. replace
df["Embarked"] = df["Embarked"].replace([0,1,2],[-1,-2,-3])

#2. map
df['Embarked'] = df['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2, 'Unknown': 3} ).astype(int)

#3.apply
df["Embarked"] = df["Embarked"].apply(lambda x:0 if x == "S" else x)
df['Sex'] = df['Sex'].apply(lambda x: 1 if x == 'male' else 0)
def family(x):
    if x < 2:
        return 'Single'
    elif x == 2:
        return 'Couple'
    elif x <= 4:
        return 'InterM'
    else:
        return 'Large'
df['Embarked'] = df['Embarked'].apply(family)

#extract
df['Salutation'] = df.Name.str.extract(' ([A-Za-z]+).', expand=False)

#extract jyoken
df = df[df.Age > 0]

# convert row and columns
df.T

# unique
df["Age"].unique()

# group by
df.groupby(by="Age").sum().sort_values("Embarked")
df.groupby(by="Age").head(1)

#statics
df.corr()      #相関
df.describe()  #概要


```
mark_for_destructionで特定の子モデルを一括削除する

## 概要

`#mark_for_destruction` を使うと、親要素を保存するタイミングで特定の子モデルをまとめて削除できる。

検証環境は以下の通り。

- Ruby On Rails: 5.2.1
- Ruby: 2.5.1
- MySQL: Ver 14.14 Distrib 5.7.24


## 利用例

例として、`Deck`モデルと`Card`モデルが「Deck has many Cards」な関係にあるとする（カードデッキをイメージ）。
親モデル側（ここではDeck）に `autosave: true` を設定しておかないといけないので注意。


```ruby:deck.rb
class Deck
  has_many :cards, autosave: true
end
```
```ruby:card.rb
class Card
  belongs_to :deck
end
```

次に、1つのDeckに対して複数のCard（card1 ~ card3）を作成する。

```ruby
deck = Deck.create(name: 'my deck')
deck.cards.create(name: 'card1')
deck.cards.create(name: 'card2')
deck.cards.create(name: 'card3')
```

ここで、例として `card1` と `card3` を削除したいとしよう。

対象のCardに対して `#mark_for_destruction` を呼び出した上で、Deckを保存する。そうすると、`#mark_for_destruction` をつけたCardが全て削除される

```ruby
deck.cards.first.mark_for_destruction # card1
deck.cards.last.mark_for_destruction # card3
deck.save
#    (0.2ms)  BEGIN
#  Card Destroy (0.4ms)  DELETE FROM `cards` WHERE `cards`.`id` = 2
#  Card Destroy (0.5ms)  DELETE FROM `cards` WHERE `cards`.`id` = 4
#   (0.3ms)  COMMIT
# => true

deck.cards.count
# => 1
```

## 参考リンク

- https://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html
- https://til.hashrocket.com/posts/e8f1bcfa37-mark-for-destruction
グラフをPythonで描く(初心者向け)

# はじめに

この記事は、大学でグラフを描画せよ、という課題が出たために、その描画方法をまとめたものである。大学生が活用してくれればと思い投稿した。
PythonとAnacondaのダウンロードサイトへのリンクはこちら。
Pythonさえインストールできればグラフは描けるはず。
[Pythonのダウンロードページ](https://www.python.org)
[Anacondaのダウンロードページ](https://www.anaconda.com/)

#グラフの描画

##　ｘとｙの値の組を用いた折れ線グラフの描画

```graph1.py
puts #pyplotをインポート
import matplotlib.pyplot as plt

#xyの値を用意
x = [0, 1, 2, 4]
y = [0, 5, 9, -4]

#折れ線グラフの描画
#markerで点を表示
plt.plot(x, y, marker = "o")

#タイトル
plt.title("y-x")

#x軸のラベル
plt.xlabel("x")

#y軸のラベル
plt.ylabel("y")

#グリッド線の挿入
plt.grid(True)

#グラフを出力
plt.savefig("graph1.png")

#表示
plt.show()

```
とすると、
![graph1.png](https://qiita-image-store.s3.amazonaws.com/0/281231/19c6067f-d1cb-5dcc-37ec-3a46857590cb.png)

このように描画される。
##　sin,cosの描画
以下のようにすれば、曲線も描画できるが、実際はプロット数を増やしているだけで、折れ線グラフである。

```graph2.py
puts #pyplotをインポート
import matplotlib.pyplot as plt
#mathをインポート
import math

#xyの値を用意
X = range(0,360)
Y = [math.sin(math.radians(d)) for d in X]
Z = [math.cos(math.radians(d)) for d in X]

#sinx,cosxのグラフの描画
plt.plot(X,Y)
plt.plot(X,Z)

#タイトル
plt.title("y-x")

#x軸のラベル
plt.xlabel("x")

#y軸のラベル
plt.ylabel("y")

#グリッド線の挿入
plt.grid(True)

#グラフを出力
plt.savefig("graph2.png")

#表示
plt.show()
```

![graph2.png](https://qiita-image-store.s3.amazonaws.com/0/281231/7e022bcd-0b97-49f8-29f1-bfc3eed890e3.png)

##その他の機能
線の変更、色の変更、複数のグラフの挿入などもできる。

```graph3.py
puts #pyplotをインポート
import matplotlib.pyplot as plt
#mathをインポート
import math

#xyの値を用意
x = [0,100,200,300]
y = [0,0.5,-0.9,2]
z = [-1,1,-1,1]
X = range(0,360)
Y = [math.sin(math.radians(d))*2 for d in X]

#折れ線グラフの描画
plt.plot(x, y, marker = "v", linestyle = "--", color = "black", label = "y")
plt.plot(x, z, marker = "^", linestyle = "-.", color = "blue", label = "z")

#sinxのグラフの描画
plt.plot(X,Y,color = "green", label = "sin")

#タイトル
plt.title("y-x")

#x軸のラベル
plt.xlabel("x")

#y軸のラベル
plt.ylabel("y")

#グリッド線の挿入
plt.grid(True)

#凡例の挿入
plt.legend(loc = "upper left")

#グラフを出力
plt.savefig("graph3.png")

#表示
plt.show()
```

![graph3.png](https://qiita-image-store.s3.amazonaws.com/0/281231/6ee2e62b-fa3f-9fc2-7ce7-c60cbe3f2154.png)


- color は、グラフの色を指定できる。
- marker で、マーカーを付ける。形は多くの種類がある。
- グラフは複数挿入可能である。その場合はlabel と legend で凡例を追加するとよい。

#　最後に
この内容は、課題で出されたグラフを書ける程度で、複雑なことはしていないので、これ以降、グラフの出力を簡単化してもらえたら嬉しい。
修正すべき内容があれば連絡してもらえるとありがたい。
【Unity】Version3 敵をランダムに出現させショットガンで打つ（パーティクルあり）

敵をランダムに出現させショットガンで打つ（パーティクルあり)
（カメラワークもショットガンに追跡させた）

環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Unity 2018.2.15f1
実際に動かした動画はこちら↓↓
https://twitter.com/nonnonkapibara/status/1066693012036640769

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Version3 敵をランダムに出現させショットガンで打つ<br>（✨パーティクル✨あり）を勉強したよぉ。<br>（カメラワークもショットガンに追跡させた）<br>（●＾o＾●）ｖ<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/VR?src=hash&amp;ref_src=twsrc%5Etfw">#VR</a> <a href="https://t.co/uYIwlVgiY2">pic.twitter.com/uYIwlVgiY2</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1066693012036640769?ref_src=twsrc%5Etfw">2018年11月25日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


詳細は、「はてなブログ」に記載してます↓
[かぴばらさんの覚書ブログ nonkapibara](https://nonkapibara.hatenablog.com/entry/2018/11/25/231725)
Juliaインストール

### 
ちょっと苦戦したので備忘録
大体の場合、Julia.dmgをダウンロードしてきてテキトーにインストールしてから
テキトーにパスを通したりしてターミナルから動かすみたいだが、うまくいかなかった。
インストールはできたけどターミナルから起動できなくてハマった。

### 環境
mac OSX Mojave
python 3.6
Anaconda 使用

### インストール

```
conda install -c conda-forge julia
```
これで出来た。
ターミナルで下記で起動できる。

```
julia
```


### IJuliaインストール

ググルと大体下記の感じでパッケージをインストールする様子だがVer1以降は変わったのか下記だとできない。

```
julia> Pkg.add("IJulia")
```

下記だと出来た
Juliaを起動して　] を入力。

すると julia> が (v1.0) pkg> に変わる。

この状態で下記でインストール出来た。

``` 
(v1.0) pkg> add Julia
```

###

ドキュメント読んで勉強します。。。
https://julialang.org
[Serverless Framework]  serverless.ymlでデプロイステージごとに異なる変数を扱う

# はじめに
　2018年の夏ぐらいから、serverless frameworkによるプロダクト開発に取り組んでいます。元々エンジニア経験の少ない私にとって、インフラ整備などをあまり気にすることなく、プロダクトやコードの開発・改善に集中できるため、非常に効果的なフレームワークだと感じています。
　知識の整理を含めて、これまで取り組んできたことをQiitaに投稿していきます。また、独学がメインなので、Serverlessに関するコミュニティなどあったら、教えて頂けると幸いです。

# 構成
- serverless framework
- AWS
- Node.js v8.10（AWS lambdaなど。今回の記事には関係ありません）

# 内容
　本題ですが、タイトルにあるように、serverlessのデプロイステージごとにserverless.ymlで異なる変数を使いたい状況がありました。具体的に私のプロダクトでは、デプロイステージごとにアクセスするAWS S3バケットを変える必要がありました。

|デプロイステージ  |S3 バケット名  |
|---|---|
|本番 (prd) |xyz |
|開発 (dev) |xyz-dev|

　本番も開発環境もxyz-{ステージ名}という構成で良ければ、

```
xyz-${opt:stage}
```
とすることで対応できますが、本番環境はハイフンなしのバケット名をつける必要がありました。
（実際は、本番環境の開発を色々と進めてしまっていたので、開発環境を用意する時点でバケット名を変えるのが大変になってしまったのです。。）

そこで、以下のように、カスタム変数を使って、疑似的に条件分岐しているような形を実現しました。`stageName`配下のprdとdevがデプロイステージ名に対応して変数（この場合、"" or -dev)を切り替えます。この形式で開発やデプロイは問題なく進められています。

```serverless.ymlの抜粋
service: s3Action

provider:
  name: aws
  runtime: nodejs8.10

custom:
  stageName:
    prd: ""
    dev: -dev

functions:
  s3Action:
    handler: index.handler
    events: 
      - s3: 
        bucket: xyz${self:custom.stageName.${self:provider.stage}} # sls deploy --stage prdのときxyz / sls deploy --stage devのとき xyz-dev
        event: s3:ObjectCreated:* #上記バケットにオブジェクトが生成されたときにindex.handlerを実行
        
```

### 補足
- stageNameで用意していないステージにデプロイしようとすると、対応する変数名がないとエラーが発生します。
`ex) sls deploy --stage stg`

- serverless.yml内で条件分岐のような処理ができるか調べましたが、対応していないようでした。

## 参考
- [Conditional serverless.yml based on stage?](https://forum.serverless.com/t/conditional-serverless-yml-based-on-stage/1763)
Shaderでオブジェクトやテクスチャのスケールと縦横比を取得する

## はじめに
よく忘れるので備忘録です

## 環境
Unity 5.6.3p1
Unity 2017.4.15f1

## オブジェクトのスケール比
**スケールx**
float sX = 1/sqrt(pow(unity_WorldToObject[0].x, 2) + pow(unity_WorldToObject[0].y, 2) + pow(unity_WorldToObject[0].z, 2))

**スケールy**
float sY = 1/sqrt(pow(unity_WorldToObject[1].x, 2) + pow(unity_WorldToObject[1].y, 2) + pow(unity_WorldToObject[1].z, 2));

**スケールz**
float sZ = 1/sqrt(pow(unity_WorldToObject[2].x, 2) + pow(unity_WorldToObject[2].y, 2) + pow(unity_WorldToObject[2].z, 2));

**xとyの比**
X:Y = sX/sY : 1

使用用途によってはWorldToObjectの部分をObjectToWorldにしてもいいかもしれないです

## MainTexの縦横比

**縦の解像度**
float h = _MainTex_TexelSize.w;

**横の解像度**
float w = _MainTex_TexelSize.z;

**縦横比**
縦:横 = h/w : 1


\_MainTexと宣言されたプロパティが存在し, 
コード内で`float4 _MainTex_TexelSize;`と書いておく必要があります
プロパティ名が\_MainTex以外のテクスチャ(_Hoge)に対しても\_Hoge_TexelSizeと書くことで使えます

## 参考文献
[スケール成分](https://qiita.com/chikanobuitoh/items/8724cef0f3e5996bcad8)
[_MainTex_TexelSizeについて](https://docs.unity3d.com/Manual/SL-PropertiesInPrograms.html)
kintoneを支えるcybozu developer network2018

[kintone Advent Calendar 2018](https://qiita.com/advent-calendar/2018/kintone) の 1日目の記事。いよいよ始まりました^^

クラウド型業務システムのプラットフォームである [kintone（キントーン）](https://kintone.cybozu.co.jp/jp/) をもっと乗りこなすために、『[cybozu developer network](https://developer.cybozu.io/hc/ja)』 にあります。今年も cybozu developer network についてこちらで語ってみたいと思います。

# いつでもどこでもだれでも developer network

今年は、kintoneに加えて[Garoon](https://garoon.cybozu.co.jp/)のAPIが強化されたため、ガルキン連携の記事が多くお披露目されました。cybozu developer network はサイボウズ製品の技術コミュニティサイトなため、トップページで仲良く登場しています。

<img width="1192" alt="スクリーンショット 2018-11-24 15.04.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/100494/66a19afa-f35b-5511-744a-7928fe686af7.png">

# 学習できるコンテンツ、相談し合うコミュニティ

PVはkintone,Garoonを取り巻くエコシステムの発展とともに右肩上がりですね。UUも緩やかですが右肩上がりです。2018年11月以降にkintoneのスマートフォン対応APIもリリースされており、来年もエコシステムがさらに促進されるものと思います。

<img width="997" alt="スクリーンショット 2018-11-24 15.26.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/100494/05f363e4-36f0-947b-e638-0a2cb0556ae0.png">

# 増え続けるコミュニティメンバー

『cybozu developer network』は、2017年11月30日時点で 13,200 を超えるメンバー登録があります。オープンしてから 4年8ヶ月ほどですが多くの人に活用されています。


|                   | 2014 | 2015 | 2016 | 2017 | 2018 | 2018-2017 |
|:------------------|-----:|-----:|-----:|:----:|:----:|----------:|
| コミュニティメンバー数 |  1,400 | 3,150 | 6,350 | 9,450 | **13,200** |  +3,750|
| 開発者ライセンス数    |  540 | 1,500 | 3,350 | 5,100 | **6,900** | +1,800|
- [2017年の統計](https://qiita.com/ushiron/items/df8497e15e2bd46f8f2c#3)
- [2016年の統計](https://qiita.com/ushiron/items/c3e93887e4fc31c66691#2-1)
- [2015年の統計](https://qiita.com/ushiron/items/14903efcd75e8222f8bf#1)

kintone開発者ライセンス（無償）は特典サービスの目玉のひとつで、メンバーの方であれば誰でも申し込むことができます。**[開発者ライセンスの発行方法](https://cybozudev.zendesk.com/hc/ja/articles/200929540#step3)**

# 新しく追加、強化されたツール
#### [ESLint](https://developer.cybozu.io/hc/ja/articles/360000098886)
こちらを使うことで、JavaScriptの構文チェックをしながら開発できるので、一定のルールに則って品質のよいコーディングをチーム内で実現できますね。(2018年4月〜)

#### [kintone UI Component](https://developer.cybozu.io/hc/ja/articles/360000511023)
プラグイン開発、SIなどのkintoneカスタマイズですが、kintoneライクなUIで提供したいものです。そんな思いが集まったライブラリです。（2018年5月〜）

#### [kintone-node.js-sdk](https://developer.cybozu.io/hc/ja/articles/360000511243)
kintone REST APIをNode.jsで扱えるライブラリです。（2018年5月〜）
私はスマートスピーカーとの連携開発で使ってみました^^

#### [プラグイン開発支援ツール群](https://developer.cybozu.io/hc/ja/articles/360000975763)
 - **create-plugin** プラグインの雛形を作るツール
 - **plugin-packer** プラグインをzipファイルにパッケージングするツール
 - **plugin-uploader** プラグインzipファイルを環境にアップロードするツール
 - **webpack-plugin-kintone-plugin** webpackを利用したプラグイン開発をサポートするツール

# さいごに
昨年の[kintone Advent Calendar 2017](https://qiita.com/ushiron/items/df8497e15e2bd46f8f2c)で、developer networkの成長について語りましたが、今後も多くの方々とともに成長できたらなと思います。2019年はどのような「cybozu developer network」になっているか、楽しみです。
Hyper-Vの仮想ネットワークスイッチを「内部」にして、外部とNAT接続する。

## 概要
Hyper-Vの仮想ネットワークスイッチは「外部」「内部」「プライベート」を選択することが出来ます。

ゲストOSに「外部」スイッチに接続したネットワークアダプターを取り付けて、ホストOSと同じNW帯のIPを振れば外部との通信に何の問題も発生しないのですが、職場等ではIPアドレスが枯渇していたり、IPアドレスの払い出し手続きが面倒だったりします。

ここでは、ゲストOSのネットワークアダプターを仮想ネットワークスイッチにして、内部ネットワークから外部ネットワークへの接続をNAT・IPマスカレードとします。
ゲストOSは外部ネットワークとは異なるNW帯に所属することになり、外部NWからはホストOSと同じIPアドレスに見えます。

また、ここでは続けて外部ネットワークから内部ネットワークのゲストOSサービスに接続する手順も記します。
ポート変換を伴うNAPTによる接続となりますので、基本的にウェルノウンポートによるサービスへの接続が難しくなってきますが、それは許容します。

## 環境情報
- ホストOS: Windows10 バージョン1803

- 外部ネットワークセグメント：192.168.11.0/24

- 内部ネットワークセグメント：192.168.12.0/24

- ホストOS IP：192.168.11.9（設定する上では特に必要ありません。）

## 内部仮想ネットワークスイッチの作成

「Hyper-Vマネージャー」から該当サーバーを右クリックして「仮想スイッチマネージャ」を選択します。

「仮想スイッチの作成」>「どの種類の仮想スイッチを作成しますか」から「内部」を選択して「仮想スイッチの作成」ボタンをクリックします。

設定を以下として「OK」ボタンを押下します。

| 項目 | 設定値 | 備考 |
|:---|:---|:---|
| 名前 | nat | なんでもOK |
| メモ | (empty) | なんでもOK |
| 接続の種類 | 内部ネットワーク |  |
| VLANID<br>(管理オペレーティングシステムの仮想LAN IDを有効にする) | (nocheck) |  |

コントロールパネルの「ネットワーク接続」画面（ファイル名を指定して実行「ncpa.cpl」で開きます。）に「vEthernet(nat)」が作成されていることを確認します。

## 内部仮想ネットワークスイッチ「vEthernet(nat)」にIPアドレスを設定

「ネットワーク接続」画面で「vEthernet(nat)」を右クリックして「タブ：ネットワーク」>「インターネットプロトコルバージョン4(TCP/IPv4)」を選択して「プロパティ」ボタンを押下します。

「タブ：全般」で以下を設定して「OK」ボタンを押下します。

- 「次のIPアドレスを使う」を選択

| 項目 | 設定値 | 備考 |
|:---|:---|:---|
| IPアドレス | 192.168.12.1 |  |
| サブネットマスク | 255.255.255.0 |  |
| デフォルトゲートウェイ | (empty) |  |


- 「次のDNSサーバーのアドレスを使う」を選択するが、IPアドレスは空白とする。

## NAT(IPマスカレード)設定

PowerShellを管理者権限で起動してNAT(IPマスカレード)設定します。

```:PowerShell
PS C:\WINDOWS\system32> New-NetNat -Name natNetwork -InternalIPInterfaceAddressPrefix 192.168.12.0/24
```

New-NetNatコマンドでは内部ネットワークのみ指定します。私の環境では外部ネットワークは指定できませんでした。外部ネットワークについては自動で192.168.11.0/24が選択されるようで、特に問題はありません。

## 仮想マシンの設定

仮想マシンのネットワークアダプターを上記で作成した「nat」にします。

仮想マシンには「192.168.12.0/24」のIPを振ります。また、DNSは明示的に設定する必要があります。私の環境ではGoogleのパブリックDNS「8.8.8.8」としています。

## 静的NAT(NAPT)の設定

PowerShellを管理者権限で起動してNAT設定します。

```:PowerShell
PS C:\WINDOWS\system32> Add-NetNatStaticMapping -NatName natNetwork -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.12.11 -ExternalPort 3391 -InternalPort 3389　-Protocol TCP
```

Add-NetNatStaticMappingコマンドのオプション設定については以下の通りとなっています。

| オプション | 設定値 | 備考 |
|:---|:---|:---|
| NatName | natNetwork  | なんでもOK |
| ExternalIPAddress | 0.0.0.0 | 外部IPアドレスは全て(0.0.0.0)とします。私の環境では外部IPを指定することはできませんでした。 |
| InternalIPAddress | 192.168.12.11 | 任意の仮想マシンIPを指定します。 |
| ExternalPort | 3391 | 外部向けに任意のポートを指定します。 |
| InternalPort | 3389| 任意の内部ポートを指定します。<br>ここではリモートデスクトップのウェルノウンポートを指定しています。 |
VirtualBoxのCentOS7仮想マシンをHyper-Vに移行する。

## 概要
自宅PC向けにWindows10 Proのライセンスを手に入れたので、Hyper-Vに触れてみることにしました。

とりあえずVirtualBoxで作成していたCentOS7の仮想マシンをHyper-Vに移行してみたので、その作業記録を記します。

## 環境情報

- ホストOS: Windows10 バージョン1803

- VirtualBoxとそのゲストOSには以下URLで作成したものを使用しました。
 [【前提】CentOS検証環境初期設定](https://qiita.com/sankaku/items/073683cfe674cb73d5de)
 バージョンは以下の通りです。
 - VirtualBox：5.2.18
 - CentOS：7.5

## VDIファイルをVHDファイルに変換

VirtualBoxのコマンドでVirtualBoxで作成したCentOS7のvdiファイル「CentOS7.vdi」をvhd形式「vboxtest1.vhd」に変換します。

```:command
>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd CentOS7.vdi vboxtests1.vhd -format VHD
```

（参考）Hyper-Vマネージャで「VHD」ファイルを「VHDX」ファイルに変換することが可能です。
仮想マシン作成後に設定画面から対象の「ハードドライブ」を選択して「メディア」>「仮想ハードディスク」>「編集」ボタンを押下すると設定画面が開きます。
ここでは特に必要が無いので、「VHD」ファイルのままとしています。

## Hyper-Vで仮想マシンを作成

「Hyper-Vマネージャー」から該当サーバーを右クリックして「新規」>「仮想マシン」を選択します。

- 名前と場所の指定

| 項目 | 設定値 | 備考 |
|:---|:---|:---|
| 名前 | vboxtests1 | なんでもOK |

- 世代の指定
 - 第１世代

- 起動メモリ
 - （自由に設定してください。私はデフォルトの1024MBかつ動的メモリ使用としました。）

- ネットワークの構成

| 項目 | 設定値 | 備考 |
|:---|:---|:---|
| 接続 | nat | なんでもOK<br>（私は別途作成したnatを使用しました。[参考](https://qiita.com/sankaku/items/3bbb7eb21b8deed4f30d)）（※ちなみにCentOS6を変換する場合はレガシーネットワークを使用する必要がありました。） |

- 仮想ハードディスクの接続
 - 既存の仮想ハードディスクを使用する。

| 項目 | 設定値 | 備考 |
|:---|:---|:---|
| 場所 | (事前に作成した「vboxtest1.vhd」のフルパスを指定します。)|  |

「要約」画面を確認したら「完了」ボタンを押下します。

## CentOS7の初期RAMディスク再作成

上記で作成した仮想マシンをそのまま起動すると初期RAMディスクを正常に読めずに起動失敗します。
レスキューモードで起動して、dracutコマンドで初期RAMディスクを再作成します。
（※ちなみにCentOS6の変換の場合は初期RAMディスク再作成は不要でした。）

### レスキューモード起動

CentOS7起動時のカーネル選択画面でrescue「CentOS Linux (0-rescue-省略) 7 (Core)」を選択して起動します。

### 初期RAM再作成

「端末」を起動して以下コマンドを実行します。

```:commannd
$ su -
# cd /boot/
# dracut -force
# shutdown -r now
```

## 起動後

通常のカーネルを選択して起動します。

起動後は動作やログを確認しつつ不具合をつぶして行きます。とりあえず私はVirtualBoxで作成したネットワークアダプタに関する設定は全て削除してHyper-Vで追加したネットワークアダプタ用の設定を入れなおしました。
gem installでpermissionエラーになった時の対応方法

おもむろにgemをインストールした際に以下のようなエラーに遭遇しました。

```zsh
$ gem install foreman
Fetching: thor-0.19.4.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
```

エラーログをみると`You don't have write permissions`と書いてあります。

上記のようなエラーの原因ですが、結論からいうと、**システムのrubyを利用しているため、権限不足でgemのインストールができない可能性が高いです。**

ルート権限でシステムのRubyにインストールをしてもいいのですが、**開発環境ではrbenvでrubyを管理することをおすすめします。**

以下では、今回遭遇したエラーをrbenvでRubyを管理することで解決するまでの手順について説明をします。

## 現状確認

まずはgemやrubyがどのパスを指しているのか現状の確認をします。
以下の結果からわかるように`/usr/bin`というシステムのパスを指していることがわかります。

```zsh
$ which gem
/usr/bin/gem
```

```zsh
$ which ruby
/usr/bin/ruby
```

## rbenvでrubyを管理する
rbenvでrubyを管理するための手順について説明します。

まずはrbenvのインストールをします。

```zsh
$ brew update
$ brew install rbenv ruby-build
```

rbenvで管理されているrubyのバージョンを確認します。
以下のように、現在のrubyは`system`を利用していることがわかります。

```zsh
$ rbenv versions
* system (set by /Users/toshiharu.nishina/.rbenv/version)
```

rbenvの管理下にrubyをインストールします。
インストールできるrubyのバージョンは以下のコマンドで確認ができます。

```zsh
$ rbenv install -l
```

今回は最新のRuby安定版である2.5.3(2018年11月現在)をインストールします。

```zsh
$ rbenv install 2.5.3
```

インストール後もう一度以下のコマンドを叩いてみます。
先ほどインストールされた`2.5.3`というバージョンが新しく追加されていることがわかります。

```zsh
$ rbenv versions
* system (set by /Users/toshiharu.nishina/.rbenv/version)
  2.5.3
```

`2.5.3`をglobalで利用するように変更します。
なお、アプリごとにrubyのバージョンを変更したい場合は`rbenv local`コマンドを利用します。

```zsh
$ rbenv global 2.5.3
```

上記コマンドを実行後、rbenvで管理されたrubyに変更されます。

```zsh
$ rbenv versions
  system
* 2.5.3 (set by /Users/toshiharu.nishina/.rbenv/version)
```

rbenvにパスを通すため、シェルの設定ファイル(.bashrcや.zshrc)に以下を追加します。

```zsh
[[ -d ~/.rbenv  ]] && \
  export PATH=${HOME}/.rbenv/bin:${PATH} && \
  eval "$(rbenv init -)"
```

## 設定後確認

シェルを再起動後、もう一度gemとrubyのパスを確認してみます。
はじめはシステムのパスを指していましたが、以下のようにrbenvのパスを指していることがわかります。

```zsh
$ which ruby
/Users/toshiharu.nishina/.rbenv/shims/ruby
```

```zsh
$ which gem
/Users/toshiharu.nishina/.rbenv/shims/gem
```

rbenvでrubyを管理することで、もともとエラーになっていた`gem install foreman`を実行することができるようになりました。

## さいごに
今回紹介したrbenvについては<a href="https://nishinatoshiharu.com/manage-ruby-with-rbenv/" target="_blank">『複数のバージョン管理も楽々！rbenvを利用したruby管理方法チュートリアル』</a>で詳細解説をしていまのでぜひご覧になってください！

ツイッター([@nishina555](https://twitter.com/nishina555))でもプログラミングに関する情報発信をしているのでフォローしてもらえるとうれしいです！
matplotlibの表示styleを変更

#概要
plt.styleを指定すればOK。
<pre>
plt.style.use('classic')
</pre>
2018/11/30追記
別の方が書いているのを発見しました
https://qiita.com/eriksoon/items/b93030ba4dc686ecfbba

#前提
matplotlibを、何も考えずに表示すると、下図のようになります。
![before.jpg](https://qiita-image-store.s3.amazonaws.com/0/317462/00516ccc-1da5-00de-0ef1-4fb187473114.jpeg)

「左下が微妙」「縦軸横軸の線内側にできないの」とか色々言われます（体験済み）

#変更
下記コードを最初にいれます。
<pre>
plt.style.use('classic')
</pre>
そうすると、このようになります。
![fff.jpg](https://qiita-image-store.s3.amazonaws.com/0/317462/6a7bf47b-4f02-da0c-fb68-f12bae5675b3.jpeg)
これで問題は言われないはず！！

#様々なstyleがあります。
先ほどのclassic以外のものも多数あります。参考に公式があるので参照してください。
・grayscale
![1.png](https://qiita-image-store.s3.amazonaws.com/0/317462/949d9091-e893-a3dd-8c89-ff2563d62873.png)

・dark_background
![2.png](https://qiita-image-store.s3.amazonaws.com/0/317462/b43e5d42-9888-f09a-4116-44d95355b9fc.png)

#参考
https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html
SMALL SIX ROBOT とフォロの比較

エレキットのフォロ（MR-9107）とSMALL SIX ROBOTの比較です。

![IMG_8645.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/3fb57f0a-e4db-7d05-80d3-a0f6479a4d3c.jpeg)
![IMG_8646.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/74b336fa-9b57-01cb-f26c-abafce446efc.jpeg)
![IMG_8647.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/0056ea89-17ff-01e4-235e-6895ab2b8f6d.jpeg)
![IMG_8648.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/dc676b39-0b50-0047-6b15-a78ee41cd6d3.jpeg)
![IMG_8649.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/ca198208-bc27-b8a1-098d-ba3fae0d8a5e.jpeg)
![IMG_8650.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/e4f535d2-8600-ccdc-61b3-6aee4b3a57e7.jpeg)
![IMG_8651.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/0d49a89d-72ce-b05b-12ab-fa843e7130a3.jpeg)

別物です
が・・・SMALL SIX ROBOTがフォロをコピーしたのか?と言う感じですね。
本当に、似すぎです。

ただ、SMALL SIX ROBOTは1700円程度で購入可能です。
フォロを買うならばSMALL SIX ROBOTを2~3個買った方が幸せになれる気がしますｗ

私はBanggoodで購入しました。
MoFun DIY Stem 6-Legged Gesture Sensing Infrared Avoid Obstacle Walking Robot Toy
https://www.banggood.com/ja/MoFun-DIY-Stem-6-Legged-Gesture-Sensing-Infrared-Avoid-Obstacle-Walking-Robot-Toy-p-1364116.html?rmmds=myorder&cur_warehouse=CN
Dropbox と連携する LGTM ジェネレータを作ったよ

本体は [GitHub/lgtm-generator-from-dropbox](https://github.com/blue0513/LGTM-Generator-from-Dropbox) に置いてあります。
PR 待ってます！

## これは何 ？

[Dropbox](http://dropbox.com) 上にある画像に「LGTM」の文字を追加してくれるツールです

![gif](https://i.gyazo.com/58fbbbee8fcc98944aa66d084054b16b.gif)

### 特徴

+ Dropbox から画像をダウンロードする
+ ダウンロードした画像に「LGTM」の文字を追加する
+ その他オプション
  + 「LGTM」の文字色の変更
  + 「LGTM」の文字色の自動選定
  + 画像のリサイズ
  + GIF画像の生成
  + 画像を[Gyazo](https://gyazo.com)にアップロード


### 開発環境

+ OS: MacOS（Sierra）
+ Ruby: 2.5.1

## セットアップ

`settings.json.sample` を `settings.json` に変更

```shellscript
$ mv settings.json.sample settings.json
```

`settings.json` を編集

```shellscript
$ vi settings.json
```

+ `access_token`: Dropbox の `access_token` を指定
  + 注意: `access_token` は [Dropbox Developers page](https://www.dropbox.com/developers) にアクセスして新規にアプリを作成する必要あり
+ `target_directory`: LGTM 用の画像が置かれた Dropbox 上のディレクトリを指定
  + 注意: `/LGTM/images/` のように末尾は `/` である必要あり

### 依存 gem をインストール

```shellscript
$ bundle install
```

## 使い方

以下のコマンドを実行すると `output.jpg` が得られます

```shellscript
$ ruby lgtm-generator-from-dropbox.rb
```

![img](https://i.gyazo.com/861aecb17c6796e52b41fb611eb93dd7.jpg)

## オプション

### LGTM の文字色変更

`--color` オプションを使う（デフォルトは red ）

```sh
$ ruby lgtm-generator-from-dropbox.rb --color white
```

### LGTM の文字色の自動選定

`--auto-color` オプションを使う
元画像の平均色の反転色を採用しています

```sh
$ ruby lgtm-generator-from-dropbox.rb --auto-color
```

![img](https://i.gyazo.com/59f8ee0458bffc7a3eaf5a81e465658b.jpg)

### 画像のリサイズ

`--size` オプションを使う
注意: `--size` は `640x480` のように「数字x数字」の形式

```sh
$ ruby lgtm-generator-from-dropbox.rb --size 640x480
```

### GIF画像の生成

`--gif` オプションを使う

```sh
$ ruby lgtm-generator-from-dropbox.rb --gif
# output.gif が代わりに生成される
```
![gif](https://i.gyazo.com/0080ede04e15b7253eb30d31281d041b.gif)

### 画像を[Gyazo](https://gyazo.com)にアップロード

`settings.json` の `gyazo_access_token` を編集
注意: [Gyazo](https://gyazo.com/oauth/applications) にアクセスして新規にアプリを作成する必要あり

その後、`--upload` オプションを使う

```sh
$ ruby lgtm-generator-from-dropbox.rb --upload
# アップロード後、画像の URL が表示される
```
Pillowを使ったPythonでの画像処理をしてみた➀

## Pillowとは？
pythonの画像処理ライブラリです。画像の整形や加工などが行えます。


## Pillowのインストール
Pillowのインストールを行っていない場合、以下のコマンドでインストールを実行します。

~~~
$ pip install Pillow
~~~

## 実際に画像処理を行ってみた

### ・ライブラリの読み込み画像を表示させるところまで

~~~Python
from PIL import Image
image = Image.open('./data/pict/sampledata1.jpg')
image
~~~

![スクリーンショット 2018-11-25 20.02.18.png](https://qiita-image-store.s3.amazonaws.com/0/317125/a65cee77-edaa-78de-8814-3437aa363b3f.png)


JupyterNotebookで上記のコードを入れると、以下のように./data/pictに保存されている画像が表示されることを確認できます。


### ・フォーマット、サイズを確認する
入力

~~~Python
print(image.format)
print('--------------')
print(image.size)
~~~


出力

~~~Python
JPEG
--------------
(750, 500)
~~~

画像のフォーマットがJPEGでサイズが(750,500)となっていることが確認できました。


### ・画像のサイズを変更する


~~~Python
resized_image = image.resize((500,300))
resized_image
~~~


![スクリーンショット 2018-11-25 20.02.54.png](https://qiita-image-store.s3.amazonaws.com/0/317125/b60fe128-e6f0-f15b-ac09-dd421459516e.png)

画像のサイズが小さくなっていることを確認できました。

### ・画像を回転させる(45°)

~~~Python
image.rotate(45).show()
~~~

![スクリーンショット 2018-11-25 20.12.32.png](https://qiita-image-store.s3.amazonaws.com/0/317125/68006ba7-60f7-79f2-dbbf-d174917e5640.png)

45°回転していることが確認できました。

## ・画像を保存(ここではresize_imageを保存)

~~~~Python
resized_image.save("./data/pict/resized_image.jpg")
~~~~

保存したいディレクトリに画像名をつけて保存。
STM32 入門キット　

STM32は一般的なマイコンで、Nucleoは、扱いやすいようにブリスターに入ったマイコンボードです。
私が、入門キットとして100円ショップのプラ収納ボックスを使ったセットを考案してみました。

![IMG_8860.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/231d66d1-948c-d113-27c2-938e732a1275.jpeg)
。
USBケーブルのほかにブレッドボードしか入れていませんが、
カメラやジャンパーケーブル、スイッチやLEDをセットする事で入門講習のセットになります。

Arduinoやセンサー類を入れたバージョンはこんな感じです。
![IMG_8862.JPG](https://qiita-image-store.s3.amazonaws.com/0/285344/d1ceae45-e3dc-29e0-e42f-fb305ba10d4e.jpeg)

NucleoやArduinoボード自身が開発や、実験目的であり、こういった持ち運びようのケースがあると使いやすいですよね。
R.swiftでコンパイルエラー

さあプロジェクト立てるぞ〜まずは環境だとおもいPodfileにいつも通り書いてビルドしてみると、こんなエラーが

```
Cannot convert value of type '[AnyHashable : Any]?' to expected argument type '[UINib.OptionsKey : Any]?'
```

調べてみるとXcode 10で起きてるっぽいですね。R.Swiftは現時点でXcode 9までをサポートしてるみたいです。

解決策はエラーを起こしたファイル`NibResource+UIKit.swift`の該当箇所を[こんな感じ](https://github.com/mac-cain13/R.swift.Library/commit/38252b2c5a54b619b362127db6b2d22c43fe1f20)に修正してあげましょう。無事にビルドできました。

内容が内容なのでいずれ解消できるとは思いますが、備忘録として。
AWS 別名（エイリアス）と初期リージョン

## アカウントID の問題点

ログイン時の右上に 「ユーザーID @ アカウントID」 の形式で表示されますが、アカウントID は長い数字列なので、わかりづらい。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/30578/662a9443-79e8-9f9c-ff49-946e51b3af38.png)

- ログイン画面の「アカウント」欄に入力するアカウントIDが覚えられないので、ブックマーク頼り
- 複数の AWS アカウントを使っているときに、どこを使っているかがわかりにくい。


## 「別名（エイリアス）」を付けてわかりやすく

例えばアカウントID 「123456789012」に対して、「MyProject1」のように別名をつけます。
すると、「0123456789012」の代わりに「MyProject1」でログインできるようになります。

ユーザーID が hogehoge なら、
「hogehoge @ **123456789012**」だったのが、
「hogehoge @ **MyProject1**」
のように表示されます。

これで、どの AWS 環境を使っているかがわかりやすくなります。

## 別名の登録

- IAM サービスを表示して、左側の「ダッシュボード」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/30578/ccaf4e38-0375-77d8-ea85-961fe7037d3c.png)

- 右端にある「カスタマイズ」をクリックします。

表示される以下の画面で、自分にとってわかりやすい「別名（エイリアス）」を設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/30578/72ac0d2a-8b4b-95d5-1ec1-20814b37126a.png)

## 別名の削除

- 「別名」登録後に、再度「カスタマイズ」をクリックすると削除できます。

## Tips

- 「別名」登録後でも、元々のアカウントIDは引き続き利用できます。

## お勧めの ログインURL

アカウントID の「別名」が 「MyProject1」だとすると、ログインURLは以下になります。
https://MyProject1.signin.aws.amazon.com/console/

さらに、「?region=*region_name*」のようにリージョン指定パラメーターをつけておくことで、ログイン後のリージョンを指定できます。

東京リージョンであれば、以下のような形式になります。
https://MyProject1.signin.aws.amazon.com/console?region=ap-northeast-1

「あれっ？リソースが無い！？」
「ああ、東京リージョンになっていなかっただけか、、、」
という余計な心配をしないためにも、「別名」に加えて「リージョン指定」でブックマークを作っておくことをお勧めします。

##

## 参考

AWS アカウント ID とその別名
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html#CreateAccountAlias
SQLSTATE[HY000]: General error: 5 database is locked 【SQLite】というエラーの対処法・原因

laravelでDBいじってたら、エラー出て日本語情報少なかったので記載。


ロックされたデータベースをdatabase.sqliteとすると、これをアンロックするには手順は超簡単。
このデータベースを、作り直すだけ。


```
mv database.sqlite dummy_database.sqlite
```

ロックされているSQLite3のデータベースファイルを別名にする。

```
cp -p dummy_database.sqlite database.sqlite
```

元ファイルと同じファイル名にコピーして作成。


これでロックを解除できます。

いやー助かった。本当に疲れたーー


こちら下記のサイトに詳しい原因載ってますのでご覧ください。
エラー解決はできたけどあんまり理解出来なかった。


[参考サイト](http://fanblogs.jp/scripts/archive/61/0)

[参考サイト](https://www.antun.net/tips/api/sqlite.html)
Laravel5.7をサブディレクトリで動かす

# 概要
ローカルで作成したLaravelアプリを公開サーバーのサブディレクトリに設置して動かそうとしたところ、うまくいかずはまってしまいました。
ひとまず、動作するようになったため、設定内容を共有いたします。

# サーバー環境
* centos 6.9
* nginx 1.10
* laravel 5.7

nginxに設定しているドキュメントルートは
`/usr/share/nginx/html/`

laravelアプリ配置先は
`/usr/share/nginx/html/apps/kus/`

アプリのURLは
`https://www.mydomain.com/kus/`
となります。

# 設定内容
いろいろな方の設定例をつぎはぎして作成したため、ベストプラクティスにはなりえないかと思いますが、ご了承ください。
設定ファイル名が`kus.conf`となっていますが、kusはアプリの名前です。
下記設定ファイルはnginxの別設定ファイルからincludeされることを前提に記述されています。
nginx設定ファイルの`locationディレクティブ`が指定可能な箇所でincludeして下さい。

```nginx:kus.conf
location /kus {
    alias /usr/share/nginx/html/apps/kus/public;
    try_files $uri $uri/ @nested;

    location ~ \.php$ {
        include                  fastcgi_params;
        fastcgi_param            SCRIPT_FILENAME /usr/share/nginx/html/apps/kus/public/index.php;
        fastcgi_param            PATHINFO        $fastcgi_path_info;
        fastcgi_param            PATH_TRANSLATED /usr/share/nginx/html/apps/kus/public/$fastcgi_path_info;
        fastcgi_split_path_info  ^(.+?.php)(/.+)$;
        fastcgi_pass            127.0.0.1:9000;
        fastcgi_index index.php;

    }
}

location @nested {
    rewrite /kus/(.*)$ /kus/index.php?/$1 last;
}

```
TypeScriptにおけるClassとInterfaceの違い

自分のAngularプロジェクトのコードを書いているときにふと、
「classとinterfaceの違いってなんだろう」と思いました。
わかるような気もするけど、言葉でちゃんと説明できないな…と思ったので自分用に調べてまとめてみました。

参考にしたのはこちら：
[Classes vs Interfaces in TypeScript](https://toddmotto.com/classes-vs-interfaces-in-typescript)
[TypeScriptのstaticアクセス修飾子を使う時理解する4つの事](https://qiita.com/M-ISO/items/7120db767cd539f1c58a)

#Class
　TypeScriptでは、ES6で正式にJSに導入されたClassを型チェックとstaticプロパティを用いてより強力に使うことができるものです。つまり、Classはトランスパイル後のコードにもそのまま残りますClassはオブジェクトを生成する設計図のようなもので、クラスプロパティを初期化し、メソッドを定義することで実装されます。Classのインスタンスを生成すると、利用できるメソッド・決められたプロパティを持ったオブジェクトが手に入るというわけです。
　Classにはstaticメソッドやstaticプロパティをもたせることができます。staticメソッドのすごいところは、インスタンスを作ることなくメソッドを利用できるところです。また、staticプロパティは同じClassから生成されたインスタンス間で共有されます。Class名.プロパティ/メソッド名で呼び出します。staticメソッドやプロパティを付与することでSingleton的に、そうでないものをもたせることでファクトリー的に利用することができます。

#Interface
　InterfaceはClassと異なり、TSでのみ存在する仮想構造です。TSコンパイラーが型チェックのためだけに利用するので、コンパイル後には残らず、もちろん利用されることはありません。Interfaceはただただオブジェクトが持つべきプロパティの名前と型を約束するだけのものです。

#まとめ(感想)
  staticは使ったことがなかったので今回いろいろ調べてみて驚くことが多かったです。
個人的には、
- Interfaceはとりあえず開発者が「typeをあるInterfaceに設定したものは必ずある名前である型のプロパティを持っている」と安心して作業を進められるようにするために機械的に設定するもの
- クラスはインスタンスごとにイメージの想像がつくもの、持つ情報の集合体が１つの形をもつものでその形ごと受け渡しをしたい時に使うもの
といったような印象でした。
最終的に「イメージのつくもの」みたいな説明をしているのが「言葉で説明できる」というゴールを満たしているかは微妙なところですが、調べる前よりは自分の中でかなりクリアになったので今回は良しとしたいと思います。
Laravel5.5でGoogleCloudStorageにファイルをアップロードする

[『Laravel5.5をGoogle App Engineで動かす』](https://qiita.com/fullkawa/items/4d6b080385de5523835c)にてGoogle App Engine(スタンダード環境)にLaravel5.5アプリケーションをデプロイする方法を紹介しました。
今回は、前回要確認事項としていたLaravelのファイルストレージ機能を(もちろんGoogle CloudStorageで！)利用する方法を確立したので紹介したいと思います。"laravel5.5"のタグを付けていますが、多分 5.6, 5.7 でも動くはず。

## GaeSupportLaravelの導入・設定

まず前提として、[GaeSupportLaravel](https://github.com/a1comms/GaeSupportLaravel) を利用します。
ただし、利用するバージョンは"dev-php72-laravel55"です。詳細、基本的な設定等は[『Laravel5.5をGoogle App Engineで動かす』](https://qiita.com/fullkawa/items/4d6b080385de5523835c)をご覧ください。

### 環境変数

.envファイルに`FILESYSTEM_DRIVER=gae`を追加します。

### 設定ファイル

設定ファイル(config/filesystems.php)に以下の設定を追加します。

```php
'disks' => [
    // 中略
    'gae' => [
        'driver' => 'gae',
        'root' => 'gs://(YOUR_BUCKET_NAME)/storage/app/',
    ],
```

ソースコードのコメントを読む限り、rootの最後に"/"が必要っぽい。
もちろん、rootの値も環境変数で与えるのがより望ましいです。

```php
        'root' => env('GCS_STORAGE_URI'),
```

## 実装

### ビュー

```html
<input type="file" name="image"/>
```

もちろん、`<form>`への`enctype="multipart/form-data"`追加も必要です。

### コントローラ

```php
public function store(Request $request)
{
    // 省略
    $path = $request->file('image')->store('public');
    \Log::info("Image uploaded:{$path}"); // ここも必須ではない
    // 省略
}
```

ビュー、コントローラのサンプルは必要最小限の部分のみ。
storeだけでなく、updateにも同様のコードを追加することになるかと思います。

### おまけ(画像プレビュー)

画像ファイルのアップロードであれば、最低でもアップロード前のプレビューくらいは欲しいものです。
[『最速・最高のファイルアップロードに近づくための1歩#画像のプレビュー』](https://qiita.com/zaru/items/8c0ab5c70775644d4d41#%E7%94%BB%E5%83%8F%E3%81%AE%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC)が参考になったので紹介しておきます。
Herokuで"Run console" が実行できなくなってしまったときの対処法

# この記事の目的
1. Herokuで"Run console"を実行しようと試みた際に、下記エラーが出た場合の対処法を知る。

```
Cannot run more than 1 Free size dynos.
```
# 対処法
1. 現在動いているプロセスを確認するため、下記コマンドをローカルにて実行します。

```
$ heroku ps 
```
2.　コマンド実行後、下記のように稼働中の one-off processesが確認できた場合、
該当プロセスを止める必要があります。

```
$ heroku ps
Free dyno hours quota remaining this month: 978h 53m (97%)
Free dyno usage for this app: 20h 4m (2%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== run: one-off processes (1)
run.2767 (Free): up 2018/11/23 21:06:53 +0900 (~ 9m ago): bash

=== web (Free): node server.js (1)
web.1: up 2018/11/23 21:12:24 +0900 (~ 4m ago)

```

3. 下記コマンドで、プロセスIDを指定して該当プロセスを終了します。

```
$ heroku ps:stop run.2767(プロセスID)
```

# 参考
[こちら](https://qiita.com/color_box/items/b5faad18b1319dcca1a0)のページを参考にしました。
Pythonで競プロに挑む日誌 vol.21 ~計算量ってナンデスカ~

# 現在の目標
* 2018年内に茶色になる**←イマココ**
 * [ABC](
https://kenkoooo.com/atcoder/?user=&rivals=&kind=category) の A, B 問題を全部解く
* 2018年度内に緑色を取得する
 * [ABC](
https://kenkoooo.com/atcoder/?user=&rivals=&kind=category) の C 問題を全部解く
* (水色になったら, [APG4b](https://beta.atcoder.jp/contests/apg4b) で C++ にも手を出す)

# 今日のおはなし
### 結論
* O(f(x)) は, 「入力 x の増加に対して, 実行時間がどの程度増加するか表す指標」である.
* 一般的には, 「性能が良い ←O(1) < O(log n) < O(n) < O(n*log n) < O(n^2) < O(n^3) ＜O(k^n) <O(n!)→ 性能が悪い」とされている.
* 自分のコードを眺めてみて, O(n^3) とかになっていないか確認する習慣をつけましょう.

#### 解いた問題
[B - Sum AND Subarray ](https://beta.atcoder.jp/contests/dwacon5th-prelims/tasks/dwacon5th_prelims_b)

#### TLE 祭りになった解答
WA が出てなかったので計算はできてると思うのですが, ほとんど TLE になってしまいました.

```TLE.py
# coding: utf-8
import itertools

N, K = map(int, input().split())
N1 = N*(N+1)//2
lst_a = list(map(int, input().split()))

# beauty を網羅
def beauty(n, lst):
    lst_beauty = list([sum(lst[i:j]) for i in range(n) for j in range(i+1, n+1)])
    return lst_beauty
lst_beauty = beauty(N, lst_a)


# AND 演算すべき beauty の組み合わせをピックアップ
def pickup_beauty(k, lst):
    lst_c = list(itertools.combinations(lst, k))
    return lst_c
lst_pickup = pickup_beauty(K, lst_beauty)


# ピックアップした組合せのうち、最大の値を求める
def and_max(lst):
    val=0
    for p in lst:
        tmp = p[0]
        for i in p:
            tmp &= i
        if tmp > val:
            val = tmp
    return val
print(and_max(lst_pickup))

```

計算量が多くて TLE が発生したことはすぐにわかったのですが, どのように計算量の見当をつければよいかわかりませんでした.
教プロ界隈でよく出てくる, 「計算量O(f(x))」なるものを理解できていなかったので, Twitter で教えてもらったり, 調べてみました.

#### 計算量とは何ぞや
下記を一通り読めば, 計算量についておおまかに理解できると思います.

* [wikipedia:ランダウの記号](https://ja.wikipedia.org/wiki/ランダウの記号)
* [Qiita:[初心者向け] プログラムの計算量を求める方法](https://qiita.com/cotrpepe/items/1f4c38cc9d3e3a5f5e9c)
* [Qiita:計算量オーダーについて](https://qiita.com/asksaito/items/59e0d48408f1eab081b5)

どの解説にもありますが, 「入力サイズの増加に伴い, 処理がどのような関数に従って増えるかを表す指標」を使って計算量の見当をつけられるようです.

私は「計算量」という言葉を聴いたときに, 扱う対象が処理時間なのか処理回数なのか混乱しました. これらは本質的には同じ（回数増えれば時間も増える）なので, あまり気にしなくてよいと思います. 初心者はまず, 「入れ子構造の for 文が増えるほど, 指数関数的に処理に時間がかかる」というのがイメージしやすいかもしれません.

（合ってるか知らんけど, ）今回の解答で計算量を見繕うと, O(N * NlogN * N(N+1)/2) → O(N^4 logN) とかになって, だいぶアカンかったことがわかりました.

自分で定義した関数の各々で for 文を使うと直列つなぎみたいになって処理時間がどんどん増えてしまうんですね. 考え易いと思って処理を分割するのは良かったのですが, 裏目に出てしまったようです.
しかしながら, 計算量の見積もり方や, 制約条件の具体的な活用法も学べて, 勉強になりました.

# むすび

痛い目をみてひとつ賢くなれた.
爆速フレームワークlight-4jをDocker for Macで検証：フットプリント

# はじめに

[爆速フレームワークlight-4jをDocker for Macで検証：応答速度](https://qiita.com/h-r-k-matsumoto/items/69518993217da6505cfb)
の続きです。
各フレームワークで必要なリソース量を確認していきます。
CPUに関しては、200ms固定にします。

ここでは、
・前回検証した結果を得るために最低限のメモリ割り当て
・CPU:200msとした場合における各アプリケーションの起動時間
を確認します。
起動時間は、`kubectl get pod -w `において、READYまで完了となった時間を測定します。

# 検証
[前回](https://qiita.com/h-r-k-matsumoto/items/69518993217da6505cfb)と同様です。

# 結果

|フレームワーク|起動時間(s)|Memory.limits（MiB）|メモリ使用率(%)|
|:---------|--------:|-------:|---------:|
|light-4j  |21|100|70〜85|
|go-http   |5|15|40〜45|
|iris      |5|15|50〜55|
|helidon-se           |11|300|65〜70|
|spring-boot2-undertow|50|200|65〜75|
|spring-boot2-tomcat  |50|200|75〜80|

※メモリ使用率は、負荷をかけてる際の使用状況です。

- javaは起動が遅い。というかCPUの消費が激しい。
- golangだと圧倒的起動速度。
AnyPortraitの組み込みメモ

![90d964_c399fffc75914c9e91c8646aebbac002~mv2.png](https://qiita-image-store.s3.amazonaws.com/0/6047/1dcf6986-2eba-960b-6de3-155e9e2e2838.png)

v1.0.x 系から v1.1.3にアップデートした時の作業メモ。
C94まではマルチカメラで合成してたけど、Billportに対応したらしいので、C95からは2.5D的に3D空間へ統合。

### 3Dへの統合問題（ビルポート）

AnyPortraitの最近のバージョンで、Billportオプションがついたが、微妙に不十分で、カメラのrotateをいじると崩れる。

故にこんな感じで対象のAnyPortraiteオブジェクトの"親の"GameObjectに付与してやる必要あり。

    [SerializeField]
    Transform m_cameraTf;
    [SerializeField]
    Transform m_tf;
    Vector3 m_toword = Vector3.zero;

    void Update(){
        if(m_toword != -m_cameraTf.forward){
            m_toword = -m_cameraTf.forward;
            m_tf.forward = m_toword;
        }
    }

### 3Dへの統合問題（その他）

#### 配置管理

普段2D的な動かし方ばっかりやってて、3Dの場合の動かし方をど忘れしがち...

- [Unityでキャラクターを移動させる方法【3D編】](https://tama-lab.net/2017/05/unityでキャラクターを移動させる方法【3d編】/)

#### ライティング問題

- 読み込ませるシーン間でLighting設定を一致させておかないと超Warning出る。
- 通常時は、Layer分けて、Lightingの対象から外しておくのが吉

### バージョンアップ時の注意点

- 上記で意味深に "親の" と書いたが、最新バージョンでは、一段、GameObjectでネストしてやって、座標移動は親のTransformを対象にする必要あり。（常時リセットされる）

- FPSのバグが調整されたので、多分、前よりスローモーションに感じること多々あり。それみこして、Editor側で低速なモーションにしていた場合、調整の必要あり。

### 3Dシーンに統合した場合の丸影の落とし方

当たり前だが、2D側の丸影を残しておくと、違和感がすごい上に、細かくCollider調整してやらないと、不自然になっちゃうシーンが多々。

故に、Blob Shadow Projectorとか使っちゃうのが無難。

- 参考
    - [Unity の Blob Shadow Projector を使って丸影をつける。](https://loumo.jp/wp/archive/20130117091955/)
    - [【Unity】影の表現を軽量化するアイディア](http://tsubakit1.hateblo.jp/entry/2018/02/26/004901)
デコレータを条件分岐する

デコレータの処理内容を、環境変数などで条件分岐させたいことってあると思います。


## 結論

以下のようなデコレータを引数にとるデコレータをつくる

```python
def attach_decorator(condition, decorator):
    return decorator if condition else lambda x: x
```

条件がfalseの場合、元のデコレータの機能を無効化するように書いてますが、そこはユースケースに応じて適宜変更してください。

例:

```python
XRAY_CONDITION = ENV in ['dev', 'stg', 'prod']

@attach_decorator(XRAY_CONDITION, xray_recorder.capture('hoge'))
def hoge():
```



## 経緯

プロファイラーってデコレータで提供されることが多いと思うのですが、プロファイラーをデプロイ後だけ適応し、ローカル開発時には適応したくない、という状況になりました。分岐条件を引数にとるデコレータをつくることで、デコレータを環境ごとに書いたり消したりする必要がなくなり、常に書いておくことができます。

デコレータはデコレートする関数を引数にとる関数なので、条件を満たさない場合は、引数の関数をそのまま返す作りにしました。

```
>>> hoge = lambda x: x
>>> @hoge
... def huga(x):
...     print(x)
...
>>> huga('hogehoge')
hogehoge
```

## 参考


- [Pythonのデコレータについて](https://qiita.com/mtb_beta/items/d257519b018b8cd0cc2e)
MySQLの予約語に注意！

#MySQLの予約語に注意！

##1,はじめに
####最近大学の部活の活動でnodejs, MySQLでモバイルアプリ向けのAPIサーバーのバックエンドを担当したのですが、その中のデータベース書き換え処理の実装で個人的にはハマりポイントとなったMySQLの予約語をカラム名で使用するとエラーが吐かれることについて書きたいと思います。

##2,問題
####MySQLにも予約語というものがあり、予約語はその環境上で特別な扱いをされる言葉であり、私たちはこの予約語を利用することは基本的にできません。私は「key」という名前のカラムを作ってしまったのですが、それがエラーの原因でした。カラム名など予約語とぶるとつぎのようなエラーが出ます。

`ERROR 1064 (42000): You have an error in your SQL syntax ...`
####重要なのは、予約語とかぶる不正なカラム名でもテーブルを作成できてしまうが、そのテーブルにINSERTなどの操作をしようとするときにエラーが吐かれるということです。テーブル自体はできてしまっているため自分の作ったテーブルのカラム名が悪いなどとは思いもよりませんでした。以下に個人的に気を付けたほうが良いと思うMySQLの予約語を載せておきます。
- CODE
- KEY
- KEYS
- MATCH
- OPTION
- RELEASE


####MySQLの公式ドキュメントにも予約語の一覧があるので興味のある方はそちらを参照してみてください。

https://dev.mysql.com/doc/refman/8.0/en/keywords.html


##3,おわりに
####今回のような事態に陥らないために予約語になりそうな言葉の使用を避けたり、どうしても予約語になりそうな言葉を使いたいのであれば、２語以上からなるカラム名などでカラム名を登録することが大切だと感じました。
pacmanのコマンドとオプション

[マニュアル](https://man.kusakata.com/man/pacman.8.html)からよく使うコマンドのメモ

## 書式
```
pacman <operation> [options] [targets]
```

オペレーションとオプションは同時に指定できる。
例：`pacman -Ss qiita`

## -S, --sync
パッケージの同期を行う。
ターゲットを指定するとインストール。

例：`# pacman -S neovim`

### オプション

#### -c, --clean
インストールされていないパッケージと未使用の同期データベースをキャッシュから削除。

#### -s, --search <regexp>
名前と説明文からパッケージの検索。
キーワードを複数指定するとAND検索。

#### -u, --sysupgrade
パッケージをすべてアップグレードする。
下記の-yオプションと一緒に使うことが多い。

ターゲットを指定することもでき、`pacman -Su foo`とするとアップグレードが実行されてからfooのインストール・アップグレードが行われる。

#### -y, --refresh
リポジトリと同期。
`pacman -Syu`で同期してアップグレード。

## -R, --remove
パッケージを削除。
設定ファイルは .pacsave 拡張子の付いたファイルとして保存される。

### オプション

#### -n, --nosave
設定ファイルをバックアップしない。

#### -s, --recursive
指定したパッケージと依存パッケージが削除される。
依存パッケージは他のパッケージから必要とされておらず、非明示的にインストールされたものが対象になる。
このオプションを使うと、孤児パッケージが存在しないように保つことができる。

#### -u, --unneeded
他のパッケージによって必要とされていないターゲットを削除。
AWS Machine Learning 

**■Amazonではどんなサービスがあるのか？**

| サービス名      |      詳細|    
|:-----------------:|:------------------|
| Amazon Robotics| 倉庫の物流を自動化し改善する  |  
| Amazon Go| レジのないコンビニを機械学習の力で実現  | 
| Amazon PrimeAir| 無人でドローンで物を配達する|
| Amazon Echo | 音声型インタフェース|


**■AWSが提供する機械学習サービススタック**

| サービス名      |      詳細|      
|:-----------------:|:------------------|
| Services|既にAWSが学習済みの機械学習サービスをAPIで提供|
|Platform　|機械学習のマネージドサービスもしくはデータ分析のマネージドサービス|
|Frameworks&Infrastructure　|機械学習その物を一から構築|

![スクリーンショット 2018-11-20 20.44.37.png](https://qiita-image-store.s3.amazonaws.com/0/280929/1e45f25c-fab6-fd95-923e-f931d4316110.png)


**Services**

| サービス名      |      詳細|      
|:-----------------:|:------------------|
|Amazon Rekognition |静止画、動画の認識サービス|
|Amazon Polly　|テキストを音声に変えるサービス|
|[Amazon Translate](https://qiita.com/leomaro7/items/154b7c0545c4a60b04cd)|多言語翻訳サービス　|


**Platform**　
Amazon SageMaker:　開発者が、容易に機械学習モデルを構築・学習・活用
![スクリーンショット 2018-11-20 21.00.38.png](https://qiita-image-store.s3.amazonaws.com/0/280929/abfc49e9-95f2-ebd7-9e7e-820fedf20e15.png)

＊現在米国のみ
AWS DeepLens:より人間の脳に近い深層学習（ディープラーニング）の開発を加速するためのカメラデバイス
![スクリーンショット 2018-11-20 21.05.08.png](https://qiita-image-store.s3.amazonaws.com/0/280929/16f9cf7f-ca63-355c-25bf-325aae866ff1.png)


**Frameworks&Infrastructure　**
・NADIA Tesia V100 GPUs
・AWS Deep Learning AMI

**■機械学習の一歩**
自社が保有するデータアセットは、AWSの機械学習のサービスを活用することで、ビジネス上の新しい価値を生み出すかもしれません。まずは、営まれているビジネスからデータアセットの整理を！


**■機械学習における4つのプロセス**
問題定義→データ整備→モデリング→アプリ実装　を繰り返していく。

参考：[アマゾンの事例に学ぶ機械学習の活用とプロジェクト成功のポイント](https://www.youtube.com/watch?v=3olN9S7tN5o&feature=youtu.be)

**問題定義**
・課題認識→解決策の仮説→成果の明確化
機械学習で何かできないかではなく、あくまでビジネス課題の視点から導入を考える。
そして、機械学習を利用した方がいいのかという点で見極めていく。

**データ整備**
・データの確認→サンプル検証→データの分割
データが本当に揃っているかは専門家と検証する。（データは多いほうがいい。）

**モデリング**
・モデルの評価→特徴量の設計
適合率と再現率はトレードオフになる。（A→B B→A どちらを減らしていくのか？どちらかを犠牲にし、精度をあげる。）
必要な項目と必要でない項目を見直し、補正していく。


**アプリケーション実装**
A/Bテスト→実装とモニタリング
結果次第では機械学習だけの実装にせず、ルールベースを追加することで効果が上がることもある。
モニタリングを元に改善していく。
Node Tokyo 2018: ２つ目日

こんにちは、サム （[@sbenemerito](https://twitter.com/sbenemerito)） です。奥多摩の留学生です。日本語とブロクチェーン技術を勉強しています。２０１８年１０月に日本にフィリピンから来ました。

１１月１９日〜２０日にNode Tokyoという会議に行きました。たくさんことを習って他の開発者と会いたから、とてもいい経験でした。それで、この記事では、２つ目日に私の習ったことについて話し合います。

１つ目日のための記事はこのリンクで見つけます。
https://qiita.com/sbenemerito/items/304a6549d1a30fa6eef5

## Node Tokyoとは

![image.png](https://qiita-image-store.s3.amazonaws.com/0/300933/94a76fd2-a49e-f6d2-0736-d1a69036eeb8.png)


Node Tokyoは日本初の大規模な国際ブロックチェーンカンファレンスです。日比谷で１１月１９日〜２０日にされました。Node Tokyoの目的は海外と国内でブロックチェーンに取り組む開発者と学生にいるブロクチェーンのコミュニティを栄えます。

__ウェブサイト__
https://nodetokyo.jp/

## 習ったこと
２つ目日には、パネルディスカッションがいっぱいです。それで、「日本のブロックチェーンスタートアップ」や「日本の暗号通貨取引所」のような話題について聞けました。でも、各国のブロックチェーンコミュニティの話題とプロジェクトピッチステージに一番興味がありました。

### 各国のブロックチェーンコミュニティ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/300933/6f1c46c2-1cfd-07bf-7313-99d95b8ea1ae.png)
この写真の原作：[Hiroyasu IchikawaさんのTwitter: @SocialCompany](https://twitter.com/SocialCompany/status/1064772158348386306)

このパネルディスカッションは様々な国から人から成り立っていました。その人々は自分の国にブロクチェーンコミュニティリーダーです。このパネルディスカッションでその人々について知れました。また、いくつかの国のブロクチェーンコミュニティについて習いました。

ブロクチェーンコミュニティは賑やかになっていると気づきました。だから、たぶんブロクチェーンは近々にインタネットのように本当に有名になれます。そのときに楽しみです。このパネルディスカッションで、私はコミュニティに賑やかになりたいと気づきました。

#### プロジェクトピッチステージ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/300933/43254502-0445-83db-28f0-b1435b1e1be2.png)
この写真の原作：[片岡芳明@CyberAgent VenturesのTwitter: @yoshiaki96_cav](https://twitter.com/yoshiaki96_cav/status/1064806517583400961)

このときに５つのプロジェクトがありました。「catabira」と「getho」と「DAPPFACE」と「ゲームアイデンティティ」と「My Crypto Heroes」というプロジェクトが発表しました。勝者はMy Crypto Heroesでした。

この１２月に、私たちは「[BIT Blockchain Pitch](https://bit-blockchain-pitch.peatix.com/?lang=ja)」というイベントがあります。そのイベントで、私たちは自分のプロジェクトについて発表します。だから、Node Tokyoのプロジェクトピッチステージから、自分のプロジェクトの説き示し方について習いました。

## まとめ
2日間の範囲内で、すごくたくさんことについて習いました。ブロックチェーン自体についてだけじゃなくて、コミュニティのような他のことも習いました。そのイベントで、いくつかアイデアを考えれました。私のプロジェクトを作り方だけじゃなくって、説き示し方も習いました。今度のイベントは楽しみです。
Node Tokyo 2018: １つ目日

こんにちは、サム （[@sbenemerito](https://twitter.com/sbenemerito)） です。奥多摩の留学生です。日本語とブロクチェーン技術を勉強しています。２０１８年１０月に日本にフィリピンから来ました。

１１月１９日〜２０日にNode Tokyoという会議に行きました。たくさんことを習って他の開発者と会いたから、とてもいい経験でした。それで、この記事では、１つ目日に私の習ったことについて話し合います。

## Node Tokyoとは

![image.png](https://qiita-image-store.s3.amazonaws.com/0/300933/94a76fd2-a49e-f6d2-0736-d1a69036eeb8.png)


Node Tokyoは日本初の大規模な国際ブロックチェーンカンファレンスです。日比谷で１１月１９日〜２０日にされました。Node Tokyoの目的は海外と国内でブロックチェーンに取り組む開発者と学生にいるブロクチェーンのコミュニティを栄えます。

__ウェブサイト__
https://nodetokyo.jp/

## 習ったこと
たとえば、「イサーリアムのプラズマとセレニティ」や「日本の大企業がブロックチェーンをどう見ているか」や「創る人の時代へ：日本のレギュレーション概観」などですが、一番興味がある話題は「ブロクチェーン・セキュリティのためにユース・ケース」です。

### ブロクチェーン ・ セキュリティのためにユース ・ ケース
私の作っている物はこの話題に関するから、この話題に興味があります。この話題の中では、２つのユースケースは面白かったです。１つ目は「Quantstamp」というサービスで、２つ目は「Gitcoin」というサービスです。

#### Quantstampとは

![image.png](https://qiita-image-store.s3.amazonaws.com/0/300933/de71125e-3cd0-c093-4bad-56975483b9f5.png)


Quantstampはブロクチェーンのためセキュリティ・プロトコルです。そのサービスはウェブサービスとステーキング・プロトコルがあります。

Quantstampのウェブサービスで、スマートコントラクトのセキュリティを確認できます。それで、スマートコントラクトがセキュアになります。

そして、ステーキング・プロトコルで、スマートコントラクトの開発者とQuantstampのオーディターは合意できます。Quantstampのオーディターは開発者のスマートコントラクトのセキュリティを確認して、自分の資産をステークします。もしそのスマートコントラクトがハックされたら、Quantstampのオーディターの資産はそのスマートコントラクトの開発者に施ます。だから、Quantstampのオーディターの確認は完璧のほうがいいです。

__ウェブサイト__
https://quantstamp.com/

#### Gitcoinとは

![image.png](https://qiita-image-store.s3.amazonaws.com/0/300933/cf77fa79-dee4-0c36-ef9c-6614c098f1fc.png)


Gitcoinはスマートコントラクト開発の報奨金プラットフォームです。たとえば、開発者のスマートコントラクトの中で、いくつか脆弱な点があります。Gitcoinで、その脆弱な点のために報奨金がポストできます。それで、他の開発者はその脆弱な点を治して、報奨金を貰います。

__ウェブサイト__
https://gitcoin.co/

## まとめ
QuantstampとGitcoinのコンセプトはとても面白いと思います。また、私の作っている物もスマートコントラクトのセキュリティのためので、QuantstampとGitcoinから、アイデアを気づきました。たとえば、たぶん私のサービスでGitcoinのシステムを使えます。