OmniAICreator/Qiita-1.07M huggingface dataset:
努力は報われるか？をベイズ理論で読み解く


「努力すれば必ず成功する」の裏返しが「成功しなければ努力していない証拠」ではないことを証明します。と言いますか、感覚的に努力しないと成功しないだろうというのは分かるけど、最大限努力しても成功するのは「運次第」というところもあって、じゃあ、努力せずに棚ぼたを待てばよいかと言うとそうでもなく。

どういう戦略を取ればよいだろう？っていうことですね。

# 「努力」と「成功」の関連性を考える

最初に、努力と成功との間には関連性があるということを仮定して、ベイズの定理から

f(θ|x) = f(x|θ)・f(θ)

努力の分布 f(θ) と 成功の分布 f(θ|x) を考えます。努力の分布が「事前分布」、成功の分布が「事後分布」なので、相関関数 f(x|θ) が「努力をすれば成功する」という関連の相関関数になります。


## 相関が 1 または 0 の場合

努力すれば必ず成功する場合には、正の相関を表し 1.0 になります。例えば、10% の人が努力をした後に、10% の人が成功すると仮定すると、

努力(A)と成功(B)の関連は次のようになります。

![001.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/654e0a9d-8e01-efd1-22b2-196bd86ab69a.jpeg)

逆に努力と成功の関連が全くない場合（両者が独立している場合）は、次のような比率となります。

![002.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/fbd7dd2b-69f8-dd84-480a-a331b2595691.jpeg)

完全に相関がある場合は、努力しないければ（~A）、成功しない（~B）ことが確実ですね。逆に、相関が全くなければ努力しても努力しなくても成功する確率（B）は一緒になります。

## 相関が 0.9 と 0.5 の場合

さて、完全に相関がある場合と全く相関がない場合が確認できたので、途中の相関を考えてみましょう。本来ならば、努力する事に対してなんらかの分布（正規分布とか）を適用するのが良いのですが、計算を楽にするために（面倒くさいとも言う）一様分布であると仮定します。すると数値解析しやすくなるので、概要を使うには便利。いずれ、正規分布を使って計算もしてみましょう。


相関が 0.9 の場合

![003.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/658b485c-6245-dd2b-af89-6e5a047edc14.jpeg)


相関が 0.5 の場合

![004.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/7d5ef26a-1b6a-5337-66e2-541198722d4f.jpeg)


相関が 0.9 というのは「努力9割、運1割」という感じで、相関が 0.5 というのは「努力5割、運5割」というイメージです。ちなみに、無相関である 0 のときは、サイコロを振って成功か失敗かを決めるランダムなイメージですね。

この表を見る限り、努力すれば9割り方報われるだろうし、運の要素が半分だとしても、努力しておけば成功と失敗とが半々位だから感覚的な成功率とあっているような気がします。

# 努力した人 > 成功した人 の場合を考える

しかし、実際問題として、努力した人の数と成功する人の数がイコールってことはないわけで、大体において成功する人の数ってのは少ないものです。成功する人の枠というものを考えます。

## 半分の人が努力をして、1割の人が成功するパターン

全体の50%の人が努力しているとしましょう。そして全体の10%が成功すると考えると、相関が 1 のときと 0 のときは次の表になります。

![005.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/75a90090-d730-0394-4773-ad51044314e3.jpeg)

相関が 1 の場合でも、努力している（A）からといって成功するわけではないのは、成功する人の割合が少ないので仕方がありません。努力していても成功する人の数は2割（全体では10%なので）にすぎません。当然、努力していない人は全体が失敗（~B）します。

逆に相関がない場合 0 の場合には、5% と 45% ずつになります。

## 相関が 0.9 と 0.5 の場合

さっきと同じようにちょっとだけ運の要素が入った相関が 0.9 の場合と努力と運が半々のときの 0.5 の場合を計算します。

![006.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/5573194d-a958-a347-9164-5f1a7b892c97.jpeg)

0.9 の時は1/5程度、0.5 の時は 1/7 程度になります。努力した人=成功する人 のときとは随分確率が違います。

## 努力する人が1割、成功する人が1% のパターン

もう少し、成功する人の割合が少ない場合も計算してみます。全体で努力する人が10%いるけど、成功する人は1%しかいない場合です。何かのオーディションとかコンクールとかを考えてみてください。

まずは相関が 1 のときと 0 のときを計算しておきます。

![007.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/cb19a16a-2175-ad1a-ed23-15dd2c6b5dfe.jpeg)

これをベースにして、相関が 0.9 と 0.5 のときを計算します。

![008.jpg](https://qiita-image-store.s3.amazonaws.com/0/32488/a2c12ceb-e559-5d39-5189-34b65cd1adee.jpeg)

努力が成功に十分に寄与する場合（相関が 0.9 のとき）には、1/10 の確率で成功を掴めますが、運の要素が増えてくると（相関が 0.5 のとき）1/20 程度に下がってしまいます。また、興味深いことに、相関が 0.5 のときは、努力して成功する人が 0.55％、努力しなくても成功する人が 0.45% になるので、結果的に見て成功する人の半分は「努力してなかったが偶然成功した人」になります。

# 考察

事前分布を一様分布として仮定しているので結論というほどには至りませんが、傾向を考察しておきます。

* 努力した人＝成功した人の分野では、努力するほうが得
* 努力した人>成功した人の分野では、努力が実らないこともある
* 成功者がレアケース、かつ、努力と成功の相関が低いときは、成功者が必ずしも努力しているとは限らない

ということが証明できました。

これから考えられる成功者の戦略としては（成功したいかどうかは別なんだけど、なんらかの形で「成功する」ことを目指すならば）、

* 努力していない人が多い分野を探して、努力する。
* 努力しても成功する訳ではないが、確率が上がっているので、何度も挑戦するとよい。
* 運の要素の少ない分野で努力するとよい。
* レアケースの成功者の話はほどほどに

ってことですね。
Riot APIを使ってLeague of Ledgedsの直近の使用チャンピオンを集計する

###League of Legendsとは
League of Legends(LoL)はRiot Gamesが開発したMOBAと呼ばれる5人対5人で戦うオンラインゲームです。
今回はRiot Gamesが提供している[Riot API](V)を使い、試合の情報を少し集計してみました。
今回は1プレイヤー（LoLではサモナーと呼びます）が直近の100試合で使用したチャンピオン（キャラクター）の回数を集計したいと思います。
###環境
- Windows10
- python 3.6.2
- vscode 1.30.1

###Riotwatcherについて
APIキーの用意等は割愛しますので他の方の投稿を参照していただけたらと思います。
APIキーだけ使って直接データを貰うこともできますがJSON形式で結構面倒だったりしているので、ここではpythonモジュールのriotwatcherを使いました。
https://riot-watcher.readthedocs.io/en/latest/index.html
###モジュールのインポート
各種データを取得するためのriotwatcher,一部のデータを処理するためのjson,あと出力を見やすくするためにpprintをインポートしました。

```lol.py
from riotwatcher import RiotWatcher
import json
from pprint import pprint 
```

###チャンピオンのデータを集計する辞書を作る
試合のデータに含まれる使用したチャンピオンのデータはIDで渡されるのでそれを名前と対応付けて、さらに回数を数えるための辞書を作っておきます。ここではキーをID,値を名前と回数のリストとしました。
名前の対応付けには公式から提供されているチャンピオンの静的データのファイルを使います。これは以下のURLから取得できます。
http://ddragon.leagueoflegends.com/cdn/8.24.1/data/en_US/champion.json
なお、新しいチャンピオンが追加されている場合があるので、URLの8.24の部分は適宜最新パッチの数値とする必要があります。

```lol.py
champion_count = {} #{ID:["チャンピオンの名前",回数]
with open('champion.json',encoding="utf-8") as f:
    df = json.load(f)
for i in df["data"]:
    champion_count[int(df["data"][i]["key"])] = [df["data"][i]["name"],0]
```
###データを取得する
今回は韓国サーバーのサモナー「[Hide on Bush](http://www.op.gg/summoner/userName=hideonbush)」さんの直近の100試合のIDを取得し、同サーバーの該当する試合のIDより詳細な情報を個別に取得することにしました。
regionにはデータを取得したいサーバを指定します。日本サーバーなら"jp1",韓国なら"kr"とします。
watcher.match.matchlist_by_accountからは本当はもっとたくさん情報がありますがそれはまた別の機会にしようと思います。

```lol.py
watcher = RiotWatcher("{APIキー}")
region = "kr"
name = "Hide on bush"
summoner = watcher.summoner.by_name(region, name)
#プレイヤーのIDやレベルなどの概要を取得して出力

recentmatchlists = watcher.match.matchlist_by_account(region,summoner["accountId"],queue=[420])
#IDを指定したサモナーの直近の100試合のデータを取得
#queue=[420]と指定することでソロキューのみに限定
for j in recentmatchlists['matches']:
    id = j["gameId"]
    championid = j["champion"] 
    #試合のデータからparticipantsのどれにあたるか特定するのにも使う。
    #ソロキューではチャンピオンは他のプレイヤーと被らないのでこれで良い
    champion_count[championid][1] +=1
    match = watcher.match.by_id(region,id) 
for j in champion_count:
    if champion_count[j][1] > 0: #一回以上使用したチャンピオンの回数を出力
        pprint(champion_count[j])
 
```

###出力
```
['Aatrox', 10]
['Akali', 11]
['Azir', 1]
['Caitlyn', 1]
['Camille', 3]
['Cassiopeia', 3]
['Ezreal', 1]
['Fizz', 2]
['Galio', 1]
['Gnar', 1]
['Irelia', 9]
['Jayce', 2]
['LeBlanc', 13]
['Lee Sin', 2]
['Leona', 1]
['Lissandra', 6]
['Lulu', 1]
['Neeko', 3]
['Pyke', 1]
['Rakan', 1]
['Rumble', 1]
['Ryze', 2]
['Sion', 1]
['Taliyah', 1]
['Talon', 2]
['Thresh', 1]
['Urgot', 7]
['Viktor', 1]
['Vladimir', 2]
['Xayah', 1]
['Xin Zhao', 2]
['Yasuo', 2]
['Zoe', 4]
```
###感想
本当は全サモナーの全試合のデータが欲しかったが、試合のデータを取得するには試合のIDを参照する必要があり、また試合のIDは個人のIDから取ってくる形になっているため、全ての試合のデータを取ってくるのは面倒そう。簡単にはできなさそうでした。
ただし、今回はまだ使っていないが、上位のレート帯に関しては何かしらとれるかもしれないです。
次は試合に関する他の情報も使って機械学習をしたいとおもいます。
###参考文献
[League of Legendsの試合データから勝敗を判別する機械学習①](https://qiita.com/hyo_07/items/f106efbde82aeb47c8a0)
[Riot Games APIでLeague of Legendsの試合データを取得しよう](https://qiita.com/himrox/items/8e99ee4a8451add5f332)
Ada言語 10日目 定数宣言

#はじめに
変数の宣言の仕方和わかりましたが、定数はどうでしょうか。

#ソースと結果
```main.adb
with Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Text_IO;
use Ada.Integer_Text_IO;

procedure main is

    hennsuu1, hennsuu2, hennsuu3 : Integer := 7;
    teisuu1 : constant Integer := 10;

begin

    Ada.Text_IO.Put_Line("Ada!");

    hennsuu1 := 10;
    -- ここでteisuu1 := 7;とするとエラー

end main;
```

ソースでteisuu1の値を変更しようとすると以下のようなエラーが出ます。
` left hand side of assignment must be a variable `

#最後に
次回はwhile文の予定です。
C++ Builder XE4 > FastReport > レポートの向きをA4横向きにする > Orientation > poLandScape

```txt:動作環境
C++ Builder XE4
FastReport VCL 5 
```

Q. FastReportデザイン画面でA4横向きにするには?

A. プロパティのOrientationをpoLandScapeに変更する。


![2018-12-24_14h28_34.png](https://qiita-image-store.s3.amazonaws.com/0/32870/bcb2d166-87ca-839e-a30d-7fb534afcf3d.png)

### 備考

印刷をA4横向き、A4縦向きで切替えたい場合、二つの方法があるだろう。

A. A4縦向きのままPicture画像側で回転する
B. A4横向きとA4縦向きのFastReportを用意し、設定に応じて印刷するものを変える

この記事はB側の作業で使う。

### 検索用キーワード

- 印刷向き
- 印刷方向
raspberry pi 1でtensorflow lite その25

#概要

raspberry pi 1でtensorflow liteやってみた。
tfliteファイルを作ってみた。
kerasモデルから作ってみた。
データセットは、xor.
tfliteファイルを調査してみた。

#写真

![tensorflow-lite-r15-android-81-neural-network-api-72-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/fa17e517-1748-b5bf-1bdc-6c63af91adfe.jpeg)

#kerasモデル


```
model = Sequential()
model.add(Dense(8, input_dim = 2))
model.add(Activation('tanh'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
```


#結果

Tensorは、理解できるが。nodeは、対応がつかん。

```
=== Pre-invoke Interpreter State ===
Interpreter has 13 tensors and 4 nodes
Inputs: 8
Outputs: 1

Tensor   0 activation/Tanh          kTfLiteFloat32   kTfLiteArenaRw         32 bytes ( 0.0 MB)  1 8
Tensor   1 activation_1/Sigmoid     kTfLiteFloat32   kTfLiteArenaRw          4 bytes ( 0.0 MB)  1 1
Tensor   2 dense/BiasAdd            kTfLiteFloat32   kTfLiteArenaRw         32 bytes ( 0.0 MB)  1 8
Tensor   3 dense/MatMul_bias        kTfLiteFloat32   kTfLiteMmapRo          32 bytes ( 0.0 MB)  8
Tensor   4 dense/kernel/transpose   kTfLiteFloat32   kTfLiteMmapRo          64 bytes ( 0.0 MB)  8 2
Tensor   5 dense_1/BiasAdd          kTfLiteFloat32   kTfLiteArenaRw          4 bytes ( 0.0 MB)  1 1
Tensor   6 dense_1/MatMul_bias      kTfLiteFloat32   kTfLiteMmapRo           4 bytes ( 0.0 MB)  1
Tensor   7 dense_1/kernel/transpose kTfLiteFloat32   kTfLiteMmapRo          32 bytes ( 0.0 MB)  1 8
Tensor   8 dense_input              kTfLiteFloat32   kTfLiteArenaRw          8 bytes ( 0.0 MB)  1 2
Tensor   9 (null)                   kTfLiteNoType    kTfLiteMemNone          0 bytes ( 0.0 MB)  (null)
Tensor  10 (null)                   kTfLiteNoType    kTfLiteMemNone          0 bytes ( 0.0 MB)  (null)
Tensor  11 (null)                   kTfLiteNoType    kTfLiteMemNone          0 bytes ( 0.0 MB)  (null)
Tensor  12 (null)                   kTfLiteNoType    kTfLiteMemNone          0 bytes ( 0.0 MB)  (null)

Node   0 Operator Builtin Code   9
  Inputs: 8 4 3
  Outputs: 2
Node   1 Operator Builtin Code  28
  Inputs: 2
  Outputs: 0
Node   2 Operator Builtin Code   9
  Inputs: 0 7 6
  Outputs: 5
Node   3 Operator Builtin Code  14
  Inputs: 5
  Outputs: 1



```

以上。
Herokuで「Cannot run more than 1 Free size dynos.」エラーのメモ

# 前提

Heroku のFeeプラン

# メモ

以下のようにRakeタスクを実行しようとしたところ、エラーが発生

```sh
kure@ubuntu ~/ % heroku run rake test        
Running rake test on ⬢ magicross... !
 ▸    Cannot run more than 1 Free size dynos.
```

`heroku ps` で起動プロセスを確認
何のことは無く、別ウィンドウでRails コンソールを実行中であった

```sh
kure@ubuntu ~/ % heroku ps                       
Free dyno hours quota remaining this month: 965h 22m (96%)
Free dyno usage for this app: 34h 37m (3%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== run: one-off processes (1)
run.8294 (Free): up 2018/12/24 14:12:42 +0900 (~ 3m ago): rails console

=== web (Free): bin/rails server -p $PORT -e $RAILS_ENV (1)
web.1: idle 2018/12/24 10:25:06 +0900 (~ 3h ago)
```
二項分布でPayPay支払い無料になる確率を回数ごとに比べてみた。

*もうキャンペーン自体は終わりましたが...*

PayPayが無料になる確率＝10%
これを二項分布の公式をもとに複数回くじを引いたときに
回数ごとに少なくとも１回は当たりを引ける確率をプログラムして求めてみました。
PayPayが無料になる確率＝10%ということは
PayPayが無料にならない確率＝90%なので、
**離散確率の合計値から０回のみ当たりが出た確率を引けばよい**のです。
練習のため既存メソッドは使用していません。

[こちらの公式を参考にしました。](https://bellcurve.jp/statistics/course/6979.html)



###コード
```python
"""
まずは１０回トライしてみた場合のあたりを少なくとも一回引く確率について
"""

import matplotlib.pyplot as plt


def print_extend(str, num):
    print(f"[{str}]回出る確率は {num} です。")


def combination(n, r):
    ans = 1
    if r != 0:
        mul_n = n
        mul_r = r

        for num in range(r - 1):
            n -= 1
            mul_n *= n
            r -= 1
            mul_r *= r
        ans = mul_n / mul_r
    return ans


def berno(n, k, p):
    c = combination(n, k)
    ans = c * p ** k * (1 - p) ** (n - k)

    return ans


def berno_print(n, p):
    y_axis = []
    for i in range(n + 1):
        y_axis.append(berno(n, i, p))
        print_extend(i, berno(n, i, p))


def berno_plot(n, p):
    y_axis = []
    x_axis = []
    for i in range(n + 1):
        y_axis.append(berno(n, i, p))
        x_axis.append(i)

    fig, axe = plt.subplots()
    axe.set_title("berno_plot")
    axe.set_xlabel('k')
    axe.set_ylabel('probability')
    axe.grid()
    axe.plot(x_axis, y_axis)
    plt.xticks(x_axis)
    plt.savefig("berno_plot.png")
    plt.show()


berno_print(10, 0.1)
berno_plot(10, 0.1)

"""
実行結果

[0]回出る確率は 0.3486784401000001 です。
[1]回出る確率は 0.3874204890000001 です。
[2]回出る確率は 0.19371024450000007 です。
[3]回出る確率は 0.05739562800000002 です。
[4]回出る確率は 0.011160261000000003 です。
[5]回出る確率は 0.0014880348000000005 です。
[6]回出る確率は 0.00013778100000000007 です。
[7]回出る確率は 8.748000000000003e-06 です。
[8]回出る確率は 3.6450000000000023e-07 です。
[9]回出る確率は 9.000000000000004e-09 です。
[10]回出る確率は 1.0000000000000006e-10 です。
"""
```

![berno_plot.png](https://qiita-image-store.s3.amazonaws.com/0/302092/8eb4a4c5-d9ab-08a8-fc16-2f2e55d48d34.png)

ここでは10回の試行のうち0回出る確率が
約34.87%なので65.13%の確率で無料になるということですね｡意外と低いです｡


10回､20回､30回〜100回試行における確率を計算してみます。一つ一つやっていては面倒なのでforで回します。

```python

sum_list=[]
for num in np.linspace(0, 100, 11):
    total=(1 - berno(num, 0, 0.1)) * 100
    sum_list.append(total)
    print(int(num), "回試行時少なくとも１回当たる確率", total, "%")

fig, axe = plt.subplots()
axe.set_xlabel('k/10')
axe.set_ylabel('probability')
axe.grid()
axe.plot(sum_list)
plt.savefig("berno_total_plot.png")
plt.show()
"""
実行結果

0 回試行時少なくとも１回当たる確率 0.0 %
10 回試行時少なくとも１回当たる確率 65.13215599 %
20 回試行時少なくとも１回当たる確率 87.84233454094307 %
30 回試行時少なくとも１回当たる確率 95.76088417247838 %
40 回試行時少なくとも１回当たる確率 98.52191170585654 %
50 回試行時少なくとも１回当たる確率 99.484622479268 %
60 回試行時少なくとも１回当たる確率 99.82029897000857 %
70 回試行時少なくとも１回当たる確率 99.93734212517822 %
80 回試行時少なくとも１回当たる確率 99.97815254994717 %
90 回試行時少なくとも１回当たる確率 99.99238226519542 %
100 回試行時少なくとも１回当たる確率 99.99734386011124 %

"""

```

![berno_total_plot.png](https://qiita-image-store.s3.amazonaws.com/0/302092/927e8d5f-d78a-f0fc-9289-7c9f454fab7f.png)

**少なくとも30回試行すれば95％圏内に入ることがわかりました。**
***
コンビニなどの決済では大丈夫でも家電で狙うには意外とシビアな確率だったんですね。
まだMacで消耗してるの？バタフライキーボードを嫌いMacBookAirを愛する大阪Web開発エンジニアのひとりごと。

# Inspired By [もうMacで消耗するのはやめました。 - Qiita](https://qiita.com/Y_ASAMOTO/items/d51e50cd65058979aa8e)

@Y_ASAMOTO さんの記事より引用 & 自分の使用感のつぶやきを記入

# この記事の作者の我がスペック

- Macを始めて触ってから5年ぐらい
- 本格運用してから3年半ぐらい
- 最初は戸惑ったけど、もうWindowsには絶対に戻りたくない勢



# >MacBook Proはすぐに高温になり、パフォーマンスが低下する。ChromeとSlackを起動したら熱くなります。

実感なかった。逆に冬は温まれる？

# >検証をする際に毎回Windowsを立ち上げて、MS EdgeやIEでの挙動を確かめなければいけないこと。

つらそう‥。もし自分がやるならWindowsと平行運用？でも環境構築の手間とかも二倍になりそうだし。

そういえばMacにWindowsも両方入れる仮想環境、ブートキャンプ的なものもがあったっけ？

ちなみにDockerじゃ難しいんだっけ？詳しくないので教えてエロい人。

# >使えないソフトが割と多いこと。小さなことだけど、あれば便利！というのものが使えないケースが目立ちます。

最初は辛かったような。でもなんだかんだと代替ソフトを見つけ続ける日々。もう慣れた。Windowsには戻れない。Appleに囲い込まれるMacユーザー。

# >無駄なアニメーションが多く、サクサク動いてくれないこと。

最初は感じていたかも。使い続けてるうちにまったく気にならなくなったような。アニメーションなさすぎるのも人間の脳に悪い気がして。Windowsはいろいろとオフにできるんだっけ。

# >MacBook Proのバッテリーが持たなさすぎること。Windowsならメーカーによっては1日持ちます。

docker使いまくりとか？充電ケーブルがコンパクトに折り畳めてポケットに入るので、それで対応する日々。

[macbook ポケット 充電 yumainaura - Google Search](https://www.google.co.jp/search?q=macbook+%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88+%E5%85%85%E9%9B%BB+yumainaura&oq=macbook+%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88+%E5%85%85%E9%9B%BB+yumainaura&aqs=chrome..69i57.7268j0j7&sourceid=chrome&ie=UTF-8)

# >タッチディスプレイではないこと、ペンが使えないこと。iPadでペンを使ってすることをパソコンで出来れば最高だと思っています。

本当に同感。

絵を描くのがつらすぎる！iPad Miniを持ち歩いてはいるけれど、画像同期とか辛いし。

本当はもっと絵を描きたい。

かといってiPad+外付けキーボードじゃプログラミングとかできなさそうだし。気のせい？

# >インターフェイスを削りすぎなこと。（SDカードリーダーやHDMIなど）

時代なんですよ‥。

# >値段が高すぎる。それでサクサク動いてくれるなら文句は言わないですが、サクサク動いてくれないのが問題。

Web開発エンジニアは軽いものしか基本的に使わないので気にしたことがなかった。2015年の最低スペックMacBookAirでも一応サクサク動いてはいる。

ゲーム系開発だと辛いかも？いや、そもそもMac使わないか、その場合は。

# >Microsoft Officeの挙動はやはりWindowsの方が上であること。

だろうな。でしょうね。そうですよね。

# >起動が遅い。立ち上がってからネットワークへ接続するまでに少し待たされます。

言われてみればそうかも？なんか待たされるなと思ったことも。無意識レベルだけど。

基本スリープ運用で、電源を切らないMacLover。

# ところで2018年新型MacBookAirはバタフライキーボードだけど良い感じだった！

ヨドバシカメラで体験。

クリスマスプレゼントに自分に買う？

# MacBookAirは神の神器

このキーボードを叩くためだけに生きている。

エンジニアという仕事もMacBookAirと生きるための単なる手段に過ぎない。

人間の幸福はキーボードを叩くときの打鍵音で決まるという宗教に洗脳されている。

# 記事タイトルの元ネタは？

いや、ご存知ですよね。たぶん。

[イケハヤの手法はフリー素材。どうぞ真似してください。 : まだ東京で消耗してるの？](http://www.ikedahayato.com/20180514/75613293.html)


# Kick it

[mac book air yumainaura - Google Search](https://www.google.co.jp/search?ei=7mogXN6xC5n8wQOVm67YDg&q=mac+book+air+yumainaura&oq=mac+book+air+yumainaura&gs_l=psy-ab.3...7704.8479..8871...0.0..0.126.220.1j1......0....1..gws-wiz.m14nH-lSleo)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Linux版Visual Studio Codeのウィンドウがダサくなったので戻した

※ 普通に[公式ページ][1]に書いてあることを読んだだけなので，それ以上の内容はありません．

Ubuntuに入れてるVSCodeを気軽にアップデートした．
そして起動して出てきたウィンドウには，ひどい違和感があった．
![Screenshot from 2018-12-24 13-58-03.png](https://qiita-image-store.s3.amazonaws.com/0/208441/ccf025a0-6edf-4223-8554-795a78a0bcf1.png)

何かがおかしい…

![Screenshot from 2018-12-24 13-58-03_bar.png](https://qiita-image-store.s3.amazonaws.com/0/208441/b6f60aa4-ce93-5b2f-e76e-55d46bb75860.png)
![Screenshot from 2018-12-24 13-59-29_bar.png](https://qiita-image-store.s3.amazonaws.com/0/208441/1f737c09-c029-6755-bb1b-c8acc83a1189.png)

ウィンドウがWindowsスタイルになっている…！？

# やったこと
結論から言うと，
`ファイル > 基本設定 > ウィンドウ > Title Bar Style`
を`custom`から`native`に変更すると元に戻すことができた．


当初，メニューバーの設定が変わったのだと思い，設定項目を探したが見た目に関するものは見当たらず．
この時の最新の[アップデート内容][2]を読んでみると，
> Custom title bar on Linux - The custom title and menu bar is now the default on Linux.

メニューバーじゃなくてタイトルバーなのね…

あと，Customをデフォルトにするってどうなのよ…というお気持ちになった．
Windows版の見た目に合わせたいんだろうけど，正直OSに合わないので使い勝手が悪くなるだけだと思う．

以上．

[1]:https://code.visualstudio.com
[2]:https://code.visualstudio.com/updates/v1_30
woothee(user agentの分類器)の使い方javascript編

### [woothee](https://github.com/woothee/woothee)とは
user agentの分類器です。多言語に対応しています。
今のところ以下の言語に対応しているみたいです。

- Java
- Perl
- Ruby
- Python
- PHP
- JavaScript
- Go
- Rust

JavaScriptで使用したので、ちょっとメモ残しておきます。

### 基本形
`woothee`を読み込んで、`parse()`を呼ぶだけです。

```javascript
var woothee = require('woothee');
woothee.parse('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)')
// => {name: 'Internet Explorer', category: 'pc', os: 'Windows 7', version: '8.0', vendor: 'Microsoft', os_version: 'NT 6.1'}
```
user agentの文字列を解析して、オブジェクトを返します。
keyとして、`name`,`category`,`os`,`version`,`vendor`,`os_version`を持つオブジェクトです。

#### 使用例
```javascript
import woothee from 'woothee';
const ua = woothee.parse( navigator.userAgent );
```

これでuaを取得して、`ua.os`とか`ua.os_version`によって目的に応じた振り分けが可能。


### 参考
[woothee](https://github.com/woothee/woothee)
jupyter notebookが起動しなかったときの解決

anaconda環境でなぜかうまく起動しなかった

```
$ jupyter notebook
Traceback (most recent call last):
  File "/anaconda3/bin/jupyter-notebook", line 11, in <module>
    sys.exit(main())
  File "/anaconda3/lib/python3.6/site-packages/jupyter_core/application.py", line 266, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/anaconda3/lib/python3.6/site-packages/traitlets/config/application.py", line 657, in launch_instance
    app.initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File "/anaconda3/lib/python3.6/site-packages/traitlets/config/application.py", line 87, in catch_config_error
    return method(app, *args, **kwargs)
  File "/anaconda3/lib/python3.6/site-packages/notebook/notebookapp.py", line 1507, in initialize
    self.init_webapp()
  File "/anaconda3/lib/python3.6/site-packages/notebook/notebookapp.py", line 1297, in init_webapp
    self.http_server.listen(port, self.ip)
  File "/anaconda3/lib/python3.6/site-packages/tornado/tcpserver.py", line 142, in listen
    sockets = bind_sockets(port, address=address)
  File "/anaconda3/lib/python3.6/site-packages/tornado/netutil.py", line 197, in bind_sockets
    sock.bind(sockaddr)
OSError: [Errno 49] Can't assign requested address
```

ポート指定したらうまく動いた

```
$ jupyter notebook --ip=0.0.0.0 --allow-root
```
C言語でオーバーロードを実装してみた

#はじめに
この記事はMITAdoventCalendarの24日目の記事です．
クリスマスイブです．
#そもそもオーバーロードとは
JavaやC++,C#などの言語には引数の違いによって同名の関数を呼ぶときに動作を変えることができます．これを関数のオーバーロードと言います．もちろんC言語にオーバーロードは実装されていませんが，作ってみました
#例

```c
#include <stdio.h>
#include <stdarg.h>//可変長引数周りのライブラリのインクルード
void func(int count,...);//呼び出す関数
void nfunc();//func内部で呼び出す関数
void yfunc(char *name);//func内部で呼び出す関数
int main(void){
	int partner;
	char name[100];
	printf("クリスマスイブですが彼女いますか?????\nNo:0,Yes:1\n");
	scanf("%d",&partner);
	if(partner==1){//引数が二つの時
		printf("彼女の名前は?\n");
		scanf("%99s",name);
		func(1, name);
	}
	else{//引数が一つのとき
		func(0);
	}
	
	return 0;

}
void func(int count,...){//...によって引数が可変になる(stdarg.hが必要)
	va_list ap;//stdarg.h内部で定義される可変長配列のリスト
	if(count==0){//引数が一つの時
		nfunc();
	}
	else{//引数が二つの時
		va_start(ap,count);//可変長引数のリストと可変長配列の長さで可変長配列を初期化
		yfunc(va_arg(ap,char*));//可変長配列から文字列を取り出す
		va_end(ap);
	}
}
void nfunc(){
	printf("悲しい人生だな\n");
}
void yfunc(char *name){
	printf("%sともども爆発しろ!\n",name);
}
```

#実行結果

```
No:0,Yes:1
0
悲しい人生だな

No:0,Yes:1
1
彼女の名前は?
紺野木綿季
紺野木綿季ともども爆発しろ!
```
#解説
コメントになるべく説明を書きましたがstdarg.hによってまず引数を可変長にします．
引数の個数で別名の関数をいくつか作っておいてfunc関数の内部で対応する関数をif文で呼び出します．
これによって引数の個数によって擬似的に関数のオーバーロードを実装できます．
#終わりに
これなら最初から大人しくC++使ってください．
Vue.jsサンプルプロジェクト ツリー型リストを表示する

Vue.js開発のツールの組み合わせのトレンドを調べる際に簡単なアプリを作りました。Yaml形式で記載された木構造のデータをHTMLのツリー型（多階層）リストで表示します。

https://github.com/unhurried/tree-view

## 使用しているフレームワーク・ライブラリ

* [Vue.js](https://vuejs.org) + [Vue CLI 3](https://cli.vuejs.org/) + [TypeScript](https://www.typescriptlang.org/)
* [Axios](https://github.com/axios/axios) (HTTP Client)
* [Jasmine](https://jasmine.github.io/) + [Chai](https://www.chaijs.com/) (Unit Test)
* [Cypress](https://www.cypress.io/) (E2E Test)
Windows標準ツールのcertutilを使ってVBEの色を変えてみる


![Screen Shot 2018-12-24 at 12.46.36.png](https://qiita-image-store.s3.amazonaws.com/0/149269/67561640-b66a-476d-e1ab-ef09389b6d13.png)

(2019/04/14 追記）
簡単な適用手順書を書きました
https://github.com/callmekohei/VBEColorsPlus


# Summary

`Windows`標準ツールの`certutil`を使って`VBE`の色を変えてみる

## Motivation

ネットでダウンロードしてとかではなく
できれば標準ツールでやってみたい

## こんな感じ

Before

![Screen Shot 2018-12-24 at 12.38.57.png](https://qiita-image-store.s3.amazonaws.com/0/149269/1a764425-c1ae-efdb-bce4-4fe4015ad27d.png)

After

![Screen Shot 2018-12-24 at 12.46.36.png](https://qiita-image-store.s3.amazonaws.com/0/149269/1a5c4ff2-0b59-9509-8cf4-9162dca64648.png)

## やりかた

### 01 VBE7.DLLをすこしいじる

```
// このあたりにあるはず・・・
C:\Program Files (x86)\Microsoft Office\root\vfs\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA7.1
```

VBE7.DLLのバックアップをとる！

```
VBE7.DLL
VBE7.DLL.20181218.BAK
```

`gitbash`上でやってみました！（TODO:cmdでもいつかやる）

```bash
function vs2012theme () {

  local fstSequence='ffffff00c0c0c0008080800000000000ff00000080000000ffff00008080000000ff00000080000000ffff00008080000000ff0000008000ff00ff0080008000'
  local sndSequence='00000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff00'
  local vbe7Default='ffffff00c0c0c0008080800000000000ff00000080000000ffff00008080000000ff00000080000000ffff00008080000000ff0000008000ff00ff0080008000'
  local vs2012theme='000000001e1e1e00343a40003c424800d4d4d400ffffff00264f7800569cd60074b0df00794e8b009f74b100e5140000d69d8500ce917800608b4e00b5cea800'

  # VBE7.DLLをテキストにする
  # HEXRAW format is 12
  certutil -f -encodehex $1 tmp.txt 12
  
  # 該当部分の文字列を置き換える
  # fstSeqの部分は1箇所、sndSeqの部分は39箇所ある
  # sndSeqは最初の部分のみ置き換える（sedは最初ののみ置き換えるので大丈夫）
  # see: Man sed ---> Sed Functions
  cat tmp.txt \
    | sed -e 's/'$fstSequence'/'$vs2012theme'/' \
          -e 's/'$sndSequence'/'$vs2012theme'/'\
    > tmp2.txt

  # テキストをバイナリにする
  certutil -f -decodehex tmp2.txt VBE7.DLL 12

  rm tmp.txt
  rm tmp2.txt

}

vs2012theme $1
```

```shell
$ bash foo.bash VBE7.DLL
```

### 02 色設定ファイルを調整する

`regedit`を立ち上げる

```
コンピューター\HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common

// CodeBackColors
2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0

// CodeForeColors
13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
```

![codebackcolors2.png](https://qiita-image-store.s3.amazonaws.com/0/149269/4e276aa9-3b0a-2425-3ad6-f9c6d1b03327.png)

![codeforecolors2.png](https://qiita-image-store.s3.amazonaws.com/0/149269/caf7c2e3-9681-b88d-0193-aeba782a7c90.png)

## 弱点

オプションで色を変えられない・・・（リストに出てくる色の候補が初期設定のまま・・・）

![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/149269/c4743d66-6b26-ddf2-b3ad-b3477f5fe092.png)


## その他

もっと楽な方法

`VBEThemeColorEditor`を使う
https://github.com/gallaux/VBEThemeColorEditor

## See

[VBEThemeColorEditor](https://github.com/gallaux/VBEThemeColorEditor)
[VBECustomColors](https://github.com/dimitropoulos/VBECustomColors)
[Eiji James Yoshidaの記録](http://d.hatena.ne.jp/EijiYoshida/20140618/1403092219)
忍びの地図を作ったはずがオーラー（闇祓い）専用の汎用性の低いコマンドになった件

最近、転職活動しながらオーラー（闇払い）の修行をやっておりますaimofです。（意訳：リファクタ必至の読めないコードの整備補助ツールを作っています）
闇の魔術に対する防衛術の先生が失踪したと聞いて、代わりに投稿します。

対象言語はGoです。

## 忍びの地図、ご存知ですか？

「闇の魔術の防衛術」の元ネタ"Harry Potter"シリーズに登場する便利アイテムで、学校内の人の動きを追跡したり、抜け道書いてあったりなんかいろいろ多機能な地図です。

地図といえば前にプログラミング中に、地図がほしい事象が合ったような……

## 本題

皆さん、リポジトリ内でパッケージの依存関係（特にExport先）を調べたいことってありますよね？
そんなときのために、依存関係調査ツールdeponを作成しました！（似たツールがすでにあるかは未調査）

[github.com/aimof/depon](https://github.com/aimof/depon)

一日で作ったのでdepon自体のソースコードが闇の魔術ですが、細かいことはおいておいて……

## デモ

`GOPATH`は`$HOME`です。

```
~/src/github.com/aimof/depon/cmd/depon $ depon
Ex	Im	packages
1	6	github.com/aimof/depon
1	0	errors
1	0	path/filepath
1	0	strings
0	4	github.com/aimof/depon/cmd/depon
2	0	fmt
1	0	os/exec
1	0	log
1	0	flag
1	0	os
```

```
~/src/github.com/aimof/depon/cmd/depon $ depon -package github.com/aimof/depon
export: [github.com/aimof/depon/cmd/depon]
import: [fmt errors strings os/exec os path/filepath]
```

オプションなしで、リポジトリ内のすべてのexport、import数を表示します。（順番未整備）
`-package`オプションをつけると、特定パッケージのexport, import一覧が表示されます。（同じく順番未整備）

（ちなみに`--package`optionはmaster未マージだったり…）

## 詳細

goパッケージを含むgitリポジトリに対して、リポジトリ内の依存関係を明らかにします。
既存ツール(depth)との違いは、__パッケージを指定してexport先を表示することです__。

## 実装

```go
type Tree struct {
	root     *node
	allNodes mapNodes
}
```

```go
type node struct {
	name     string
	tree     *Tree
	parents  mapNodes
	children mapNodes
}
```

```go
type mapNodes map[string]*node
```

グラフのようなものを作ってマッピングして、うまいことやります。

## なぜdeponがオーラー（闇祓い）専用の汎用性の低いツールなのか？

作ってから気づきました。

__go__で、__リポジトリ内限定__で、__パッケージ単位__でexport先が知りたい状況……

__それってやばくね？__

### 解説

goは、パッケージ（ディレクトリ単位）内のファイルが多い言語で、逆にいえば、パッケージ数は少なくなりがちなのです。
パッと見ただけでexport先がわからないというのは、無駄にパッケージが多く、依存関係がめちゃくちゃな、闇の魔術的ソースコードと呼ぶにふさわしい代物です。

そんなコードと戦う環境って多くない……よね？

github.comの適当なリポジトリを見ると、サブパッケージ数が10個超えているところなんてほとんどありません。（５個こえているところすら殆ど無い）

私みたく「パッケージ数を2/3にしてやったぜ」みたいな武勇伝語る人は多くないはず。

## 結論？

このツールって必要なくね？

少なくともまともな環境では使い道ないけど、需要あれば開発する。

### 注というか課題というか言い訳

思いついてから一日で作ったので、ソースコードが闇の魔術しているけど許してください。
また、使用に制約が多いため、多分クローンしてきてインストールして使ってみてもだいたい失敗します。
READMEをほしい同士がいたらコメントください。
vSphere CLIでvicfg-cfgbackup.plが実行できない

#事象
ESXiホストのバックアップを実行したく、WindowsPCにvSphere CLI 6.5をインストール
スタートメニューから「VMware」→「VMware vSphere CLI」→「Command Prompt」を立ち上げる
バックアップコマンド「vicfg-cfgbackup.pl --server=xxx.xxx.xxx.xxx --username=root -s ESXi_20181224.tgz」を打つ
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/124395/78d72e84-1f16-3b46-aea3-6e644c4630ea.png)
このように、「このファイルを開けません」というplファイルが関連付けられていないダイアログが出て実行不可

#原因
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/124395/fcd7fb96-7507-23d9-7fef-b4505c52bc52.png)
このように、ActivePerlをインストールしなければならないようです。
（確か以前試したときはvSphere CLIと一緒に簡易版Perlがインストールされて、何も考えずに実行できたような？？）

#解決方法
恐らくActivePerlをインストールするのが正解です
が、以前のPCではインストールしなくても使えた覚えがあったので、試しにvSphere CLI 6.0にダウングレード
そうすると一緒にActivePerlがインストールされた・・・

つまり6.5ではActivePerlが除外されたというわけですか。。
AWSのubuntu16.04でWebブラウザが表示されない問題

###1)症状
リモートデスクトップで接続し、Webブラウザを開こうとすると以下のエラーが発生
```Failed to execute default Web Browser. Input/output error.```


###2)解決方法
デフォルトのWebブラウザに問題があるようだったのでFirefoxをインストールしてみるとうまいく行きました。


###3)Firefoxをコマンドからインストールする方法
```
>sudo apt-get update
>sudo apt-get install firefox
```
laravel paginate で ページネーション


## コントローラー

paginate(2) で 1ページに 2件ずつ表示するってこと。

```

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Route;
use Log;

//使いたいモデルを指定
use App\Nikki;


class NikkiController extends Controller
{
    public function show()
    {

        $nikkis = Nikki::query()
            ->paginate(2);

        return view('nikki.show', ['nikkis' => $nikkis]);
    }
    
}

```


## 表示

ページ数に応じて、
ページャーもこれでいい感じに動く。

```

@foreach ($nikkis as $v)
    <div class="card mb-2">
        <div class="card-body">
            <h4 class="card-title">{{ $v->title }}</h4>
            <h6 class="card-subtitle mb-2 text-muted">{{ $v->updated_at }}</h6>
            <p class="card-text">{{ $v->body }}</p>
            <a href="/nikki/add/{{ $v->id }}" class="card-link">修正</a>
            <a href="/nikki/del/{{ $v->id }}" class="card-link">削除</a>
        </div>
    </div>
@endforeach





    @if($nikkis->lastPage() > 1)

        @if($nikkis->previousPageUrl())
            <a href="{{ $nikkis->previousPageUrl() }}">前のページへ</a>
        @endif

        {{ $nikkis->currentPage() }} / {{ $nikkis->lastPage() }}

        @if($nikkis->nextPageUrl())
            <a href="{{ $nikkis->nextPageUrl() }}">次のページへ</a>
        @endif

    @endif

```

以上。
めちゃくちゃ簡単ですね。
Oracle12cR2メモ

Oracle12cR2(12.2.0.1.0)をWindows Server 2016(バージョン1607)にインストールしてみたので、そのメモ。

# Oracle12cについて

## 機能説明
マルチテナントアーキテクチャ(Enterprise Editionのオプション)
1つのインスタンスにて、複数のデータベースを扱える。RACは1つのデータベースに対して複数のインスタンスを割り当てる。概要図は以下
  ![image.png](https://qiita-image-store.s3.amazonaws.com/0/187121/c2278374-8131-1e58-5143-8663507b8746.png)

## 用語
### データベース
- 物理ファイル(データファイル、REDOログファイル、制御ファイル)のこと

###インスタンス(instance)
- システムグローバル領域(SGA)とバックグラウンドプロセスのこと
- データベースとユーザを仲介する。「データベース　⇔　インスタンス　⇔　ユーザ」

### コンテナデータベース(CDB)
マルチテナントアーキテクチャのデータベースを最初に作成した際に作られる管理用データベース

### プラガブルデータベース(PDB)
実際のデータベース

### グローバルデータベース名
データベース名とドメイン名を足したもの。

```sql:グローバルデータベース名の確認
SELECT * FROM GLOBAL_NAME;
```
## ネットワーク関連
### リスナー(Listner)
動的に作成されるため、静的な定義は不要。

### tnsnames.ora
ネットサービス名をホスト名+サービス名に変換する。

```text:tnsnames.ora
<任意の名称> =
	(DESCRIPTION =
		(ADDRESS_LIST =
			(ADDRESS = (PROTOCOL = TCP)
				(HOST = localhost)
				(PORT = 1521)
			)
		)
		(CONNECT_DATA = 
			(SERVICE_NAME = <グローバルデータベース名>)
		)
	)
```
インデントにも意味があるので注意。動かない場合はインデントを見直す

### 簡易接続ネーミング・メソッド(EZCONNECT)
<ユーザ名>/<パスワード>@<ホスト名>:<ポート番号>/サービス名
で接続できる。tnsnames.oraが不要。

# 別端末からの接続
## instantclientを使ってWindows ODBC(x64)での接続
### インストール手順
1.「Basic」と「ODBC Supplement」をダウンロード
2.展開したファイルを同一のフォルダに保存
3.そのフォルダへのPATHを通す
4.環境変数NLS_LANGを指定する
5.インストール。odbc_install.exeをJAオプション付きで実行する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/187121/7eb849bb-f0c4-73ab-319b-c223c78140a0.png)

### トラブル対応
- ODBCのエラーが出る
![image.png](https://qiita-image-store.s3.amazonaws.com/0/187121/84b5dd36-2430-b18e-0d85-fd7c521a685d.png)
VC++2013ランタイムをインストールする必要がある。
https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package

- 簡易接続では繋がるが、tnsnames.oraでは繋がらない
tnsnames.oraファイルを実行時のカレントフォルダに置く必要がある。

### 参考URL
http://apis.jpn.ph/fswiki/wiki.cgi?page=Oracle%2FInstantClient
Mac gitコマンド xcrun: error

# Macのターミナルでgitコマンドを実行したら「xcrun: error」になった

GAEにdjango環境構築中にエラーに遭遇した。

```
$ git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
```
version確認でもエラー。

```
$ git --version
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
```
## 以前はgitコマンド使えていたような？
Gitインストールからやり直そうとしたけど、エラーコードでそのままググったらMacOSの更新が原因らしい。

## xcode-selectインストールで解決！
```
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
```
リトライして解決！

```
$ git --version
git version 2.17.2 (Apple Git-113)
```

## 参考URL
[Mac OS Sierraにしたらgitコマンド、ターミナル上にエラーが出てしまった。](https://qiita.com/ARTS_papa/items/60ba305b23dc967bba87)
【Blender】テンキーを上部数字キーに割り当てる方法

環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Blender v2.79.6
⭐️Mac Book

<font color="Magenta">テンキーを上部数字キーに割り当てる方法</font>

1.[File]-[User Preferences]を選択する
<img width="425" alt="スクリーンショット 2018-12-24 12.27.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/35b5eeae-287c-e4ad-fd8b-7a9237fc89d5.png">


2.[Input]タブを選択し「Emulate Numpad」をチェックONする。
<img width="859" alt="スクリーンショット 2018-12-24 12.29.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/c5d66a4d-85eb-82f6-e46a-3e53e32acc9c.png">


これでキーボード上部の数字のキーがテンキーの代わりになる。

<img width="804" alt="スクリーンショット 2018-12-24 12.29.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/46a5046f-937e-98d0-faa8-155901116985.png">
C++の仮想関数って、どれくらい遅いの？

[C++で学ぶ！メモリレイアウトとvtableのすゝめ　〜動的ポリモフィズムを実現する仕組み〜]( https://qiita.com/4_mio_11/items/aa71f18b24ab55e4cb3d )
を読んで、どんだけ遅いのかが気になったので測ってみた。

まずは、仮想だったり仮想じゃなかったりする関数を呼ばれるクラスたち：

```c++:vfunc_classes.h(c++14)
struct base
{
  virtual void vfunc() const =0;
  void non_vfunc() const;
  virtual ~base(){}
};

struct derived1 : public base
{
  virtual void vfunc() const;
  virtual ~derived1(){}
  static void func(base const &);
};

struct derived2 : public base
{
  virtual void vfunc() const;
  virtual ~derived2(){}
  static void func(base const &);
};
```

そして、関数定義

```c++:vfunc_classes.cpp(c++14)
#include "vfunc_classes.h"

void base::non_vfunc() const {}
void derived1::vfunc() const {}
void derived2::vfunc() const {}

void derived1::func(base const &){}
void derived2::func(base const &){}
```

最後に、時間を測るひと。

```c++:vfunc.cpp(c++14)
// CC -std=c++14 -O2 vfunc.cpp vfunc_classes.cpp
#include <iostream>
#include <chrono>
#include "vfunc_classes.h"

constexpr int TRIAL = 1'000'000'000;

void vfunc(base const & b)
{
  auto start = std::chrono::high_resolution_clock::now();
  for( int i=0 ; i<TRIAL ; ++i ){
    b.vfunc();
  }
  auto end = std::chrono::high_resolution_clock::now();
  std::cout
      << "vfunc: "
      << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() * 1e-3
      << "ms"
      << std::endl;
}

void funcptr(base const & b, void(*func)(base const &b))
{
  auto start = std::chrono::high_resolution_clock::now();
  for( int i=0 ; i<TRIAL ; ++i ){
    func(b);
  }
  auto end = std::chrono::high_resolution_clock::now();
  std::cout
      << "funcptr: "
      << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() * 1e-3
      << "ms"
      << std::endl;
}

void non_vfunc(base const & b)
{
  auto start = std::chrono::high_resolution_clock::now();
  for( int i=0 ; i<TRIAL ; ++i ){
    b.non_vfunc();
  }
  auto end = std::chrono::high_resolution_clock::now();
  std::cout
      << "non_vfunc: "
      << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() * 1e-3
      << "ms"
      << std::endl;
}

int main()
{
  derived1 d1;
  derived2 d2;
  vfunc(d1);
  non_vfunc(d1);
  funcptr(d1, derived1::func);
  vfunc(d2);
  non_vfunc(d2);
  funcptr(d1, derived2::func);
  return 0;
}
```

||g++-8|clang++|
|:--|:--:|:--:|
|vfunc(d1)|1511.62ms|1791.4ms|
|non_vfunc(d1)|1245.71ms|1671.74ms|
|funcptr(d1,略)|1502.68ms|1651.72ms|
|vfunc(d2)|1514.37ms|1787.41ms|
|non_vfunc(d2)|1267.34ms|1707.33ms|
|funcptr(d2,略)|1495.54ms|1654.25ms|

g++ も clang++ も、測定できるほどの差がある。
比率としては、g++ で 20%、clang++ で 5% ほど。ループを回すのに必要なコストも入っていることに注意。

g++ の場合は 仮想関数と関数へのポインタは同じぐらいの時間。
しかし意外にも。clang++ の場合、仮想関数の方が関数へのポインタより遅い。そういうもんか。アセンブラ見たほうがいいかなぁ。

いずれにせよ。

* 仮想関数でなくても良い関数は、仮想にすべきではない。

という原則は守ったほうが良い。

蛇足。C++14 になっているのは、`1'000'000'000` って書きたかったから。そんだけ。
Visual Studio Codeエディタの色をプロジェクトごとに違うものにする

Visual Studio Codeで複数のプロジェクトを開いている時，「どれが作業対象だっけ？」となることが多かったので，エディタの色をプロジェクトごとに違うものにしてみます．

Before:

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139383130382f64376664316539662d393435352d616431632d316235362d3465303439386664633465302e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198108/b003ec01-3414-4c9f-ff0c-0dfd37a1e137.png)


After:

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139383130382f63313030333937352d346136322d326539322d626230312d3630326534396237353936382e706e67 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198108/f35ba064-111c-95c1-c12d-832f58c69e41.png)


## 効果
- 作業対象のプロジェクトのウインドウを簡単に発見できます．

## 確認環境
- MacBook Pro (16-inch, 2019)
- macOS Catalina 10.15.7
- Visual Studio Code  1.51.1

## 手順

プロジェクトルートに`.vscode/`ディレクトリを作成し，`settings.json`ファイルに下記のように追記します(ファイルがすでに存在する場合，既存のファイルに追記してください)．


```json
{
    "workbench.colorCustomizations": {
        "titleBar.activeBackground": "#FFD700",
        "titleBar.activeForeground": "#000000",
        "activityBar.background": "#FFD700",
        "activityBar.foreground": "#000000"
    }
}
```

## 結果

色がつきました．

<img width="1044" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139383130382f33613132313236612d313736312d356462652d346533622d3033366336306162303234652e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198108/bd6cc778-b5bf-a5da-cc53-1940ea1a3481.png">

簡単に発見することができます．他のプロジェクトのエディタ色には影響しません．

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139383130382f63313030333937352d346136322d326539322d626230312d3630326534396237353936382e706e67 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198108/c5b0bd9c-38f3-6872-dea2-6032cbb5f0eb.png)

プロジェクトごとにテーマカラーを決めて，チームに一体感を出すのにも使えるかもしれません．

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139383130382f64383362316231372d306231352d393438642d336638322d3533363338343632366238382e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198108/c23d3efe-f300-3be1-8cf5-5e7e01e33a43.png)

以上です．
FT232RLを用いてATmega328PにArduinoスケッチを書き込む

# About
ATmega328Pにスケッチを書き込む方法のメモ．

## 使用したもの

| 　　　　　　　　品名               | 個数 |
|----------------------------|------|
| ATmega328P(ブートトローダー書込済)                 | 1    |
| FT232RL(USB変換モジュール) | 1    |
| 抵抗(10kΩ)                 | 1    |
| コンデンサ(22pF)           | 2    |
| コンデンサ(0.1μF)          | 1    |
| 水晶発振子(16MHz)          | 1    |

FT232RL(USB変換モジュール)は以下のものを使用．
http://akizukidenshi.com/catalog/g/gK-01977/

## 手順

* FT232RLとATmega328Pを次のように配線．

![配線図.png](https://qiita-image-store.s3.amazonaws.com/0/228086/823dc90f-b3e5-9d64-5976-257251f67d6c.png)

* Arduino IDEにATmega328Pのボードを追加する．(以下URL参照)

http://www.shangtian.tokyo/entry/2017/06/24/211957

* FT232RLとPCを接続し，ボードはATmega328Pを選択(設定はデフォルト)

* マイコンボードに書き込む(Ctrl + u)で完了．
あなたと一緒に仕事がしたい

**The Agile Guild(TAG) Advent Calendar 2018 24日目** の記事です。

## ぐるぐるする想い
今年は、TAGでいろいろな刺激を受けた。
その中で、ぐるぐる、もやもやしつつも、現在形で影響を受けている言葉や自分のアイディアたちを並べてみる。

- 意欲に満ちた人々を集めてプロジェクトを構成します。環境と支援を与え仕事が無事終わるまで彼らを信頼します。
-  あなたは何をする人ですか？
- 意思のあるつくり手（プログラマーだけじゃないよ、デザイナーも、マーケターも、プロマネも、プロダクトを通じてある状況をつくりだすつくり手だ）
- チームが先、プロジェクトが後
- より価値を届けられるチームを作りたい 

## 旗を揚げたい
チームを作りたい。
誰がオーナーというわけでもない、みんなが「自分の」と思えるチームを作りたい。
意欲に満ちた人々を集めてチームを作りたいんだ。
そして、そのチームで顧客に価値を届け続けたい。

### それは、どんな意欲に満ちた人々？
どんなことに情熱を燃やす人々を集めたいの？
それがわからない。

##### たとえば、技術力？
「テストを書くこと」などアプローチを考えてしまいがちだけれど、
本質は「設計と品質、そして速度を両立することに情熱のある人」なのだろう。
でも、これは、たとえばであり、一例にすぎない。

##### たとえば、思想信条？
私は「意思のある作り手」であり「顧客に最高の開発サービスを届ける」を信条としており、
顧客のビジネスを成功させることに興味がある。


しかし、それってつまりどういう人？
思想面でどういう発言をする人で、行動面ではどういうことを大事にする人？
わからない。

会話をすれば、「あ..！ あなたと一緒に仕事がしたい」と思うことがある。
でも、その共通点が見えてこない。

私を知る人に聞いてみたい。
「君は○○な人を集めたいんじゃないかい？」と教えて欲しい。
**思想面、行動面でこんな人** というのを文字に起こせた時、旗を上げられる気がする。

## 旗揚げのあとは？
2019年は、きっとアチコチで、いろんな人達が、それぞれに小規模なチームが旗を揚げていくと思う。
2018年末時点でも、すでに小さなチームが成立しているとは思うが、加速していくような気がしてならない。

そして、おそらくは小さなチーム同士、小さな考え方や行動面の違いなどを超えて、
哲学や作りたい世界において、協力しあいながら進むことができる未来があるのだと思う。
定性的には。

定量的に考えるために、テキトーだけど感覚を数字を仮定してみると、3〜5人程度のチームが100〜200チームほど、存在していてもおかしくないと思う。もし、これらのチームが全部、協力体制にあったとしたら、 **300〜1000人程度の会社** と同じ程度のインパクトがあるかと思う。

そして、 **似たような方向を向いて、協力体制にあるチームが3人×20チーム** くらいあったとしたら、60人規模の会社が存在しているようなものだと思う（ただし、会社と違って閉じた輪ではなく、チーム1にとってチーム2〜20が協力体制のとき、チーム2にとっての協力関係にあるチームはチーム1と、チーム16〜35となるような..）。

それは、とても柔軟でゆるやかなつながりの社会になる気がする。
**各チームはなにかの想いなり動き方がチームの特色にあふれているために、とても効率的な働き方・効果的な仕事の仕方を通して、高いアウトプットが出せるのではないだろうか。**
もし、そうなるなら自分はそこにいたい。

2019年を、そんな年にしたい。
Angular4.4 -> 6.0 にした話（後編）

この記事は、[Business Bank Group Developers Advent Calendar](https://qiita.com/advent-calendar/2018/bbg_developers) 24日目の記事です。

---

Angularを4.4から6.0へ移行した話の後編です。
前編は[こちら](https://qiita.com/kyokoshimizu/items/614e5658bdf1cf7fe005)になります。

前編でAngular Update Guideタスクを終えているので、後編では関連モジュールの修正がメインとなっています。

実際にやったことは以下になります。

- nodeのバージョンアップ
- typescriptのバージョンアップ
- angularに関連するライブラリのバージョンアップ
- 構文修正

## node 7.5 -> 10.14.0

7からのバージョンアップだったので身構えていましたが、package.jsonのくらいで終わりました。

```diff:.node-version
- v7.10.1
+ 10.14.0
```

```diff:package.json
- @types/node: "^7.0.43",
- "node-sass": "^4.7.2",
+ @types/node: "^10.12.12",
+ "node-sass": "^4.10.0",
```

プロダクトはanyenvを利用しているので.node-versionを変更し、package.jsonの更新を行いました。
他にはDockerFileも更新していますがこれは省略します。

## Typescript 2.6.2 -> 2.7.2

バージョンあげた時に一つ問題が起きました。多分tslintの方だと思いますがいつ発生したのかわかってなかったのでここのセクションで。

```diff:foo.component.ts
- @Input() hide? = false;
+ @Input() hide?: boolean = false;
```

ありがちな表示切り替え用のプロパティですが、optionalの変数に型を指定しないと

```
[tslint] missing whitespace (whitespace)
```

とエラーが出たので、型を明示するように修正しました。

## angularに関連するライブラリのバージョンアップ

```diff:package.json
- "angulartics2": "^4.6.3",
- "@ngx-translate/core": "^8.0.0",
- "@ngx-translate/http-loader": "^2.0.0",
- "ngx-bootstrap": "^1.9.3",
- "ngc-webpack": "3.2.2",
+ "angulartics2": "^7.2.3",
+ "@ngx-translate/core": "^10.0.2",
+ "@ngx-translate/http-loader": "^3.0.1",
+ "@ngtools/webpack": "1.10.2",
+ "ngc-webpack": "4.1.2",
+ "ngx-bootstrap": "^3.1.3",
```

順番に、angularのバージョンが上がったことで、`ngx-translate`はcoreが10, http-loaderは3出ないといけません。
`ngx-bootstrap`もangular6だと3が必要。
ビルドに対応するためにngc-webpackを4にあげましたが、それに関連して`@ngtools/webpack`を追加する必要がありました。

## 構文修正

### Angulartics2

定義が次のように変わりました。

```diff:app.modules.ts
export class AppComponent {
  constructor(
-   _angulartics2GoogleAnalytics: Angulartics2GoogleAnalytics,
+   angulartics2GoogleAnalytics: Angulartics2GoogleAnalytics,
  ) {
+   angulartics2GoogleAnalytics.startTracking();
  }
}
```

```diff:src/app/app.module.ts
import { Angulartics2Module } from 'angulartics2';
- import { Angulartics2GoogleAnalytics } from 'angulartics2/ga';

@NgModule({
   imports: [
-     Angulartics2Module.forRoot([ Angulartics2GoogleAnalytics ]),
+     Angulartics2Module.forRoot(),
```


### Pipe

localeがpipeで持つようになったので、specの定義時にlocaleデータを注入しないとエラになるようになりました。

```ts
import localeJa from '@angular/common/locales/ja';
import { DecimalPipe, registerLocaleData } from '@angular/common';

describe('DecimalPipe', () => {
  beforeAll(() => {
    registerLocaleData(localeJa);
  });
  const pipe = new new DecimalPipe('ja-JP');
```

# おわりに

以上の対応を行いめでたくAngularを6にすることができました。
Angular6のupdate Guideがあるためスムーズに進められるところもありますが、プロダクトによって外部モジュールをどれだけ追加しているかによってアップデートのしんどさは変わります。
まして、最新が7などさらに上がある状態だと、外部モジュールを単純に最新にすればいいわけではなく、Angular6で動くバージョンを特定する必要があります。
そういうストレスを軽減するためにも継続したアップデートは不可欠だと改めて感じました。
また、同様にAngularの低いバージョンからアップデートを行おうと切磋琢磨している人たちへの参考になれれば幸いです。

明日、最終日は弊社CTOの @Kirika さんが担当いたします。よろしくお願いします！
Ubuntu18.04のapt upgradeがredirection loop encounteredで失敗する問題の対処

# 問題
apt upgrade時にRedirection loop encounteredというエラーが出てupgradeできない。

# 対処
1. ソフトウェアとアップデートを起動する
2. Ubuntuのソフトウェアタブを選択する
3. ダウンロード元を明示的に指定する(私は```http://ftp.riken.jp/Linux/ubuntu```にしました)
Rubyでサーバレスwebアプリケーション作成

こんにちは。
日々の業務ではインフラをやっています@hayaosatoです。

約1ヶ月前になりますが、AWS re:Invent2018にてAWS Lambda(以下Lambdaと表記します)の多くのアップデートがありましたね。
ランタイムの追加とLambda Layersが追加されたということで、それらを踏まえて今回はサーバレスのWebアプリケーションを作成してみたいと思います。

## 作るもの
サーバレスなWebアプリケーションとして、構成は以下のようなります。
![AWS.png](https://qiita-image-store.s3.amazonaws.com/0/312728/e5839323-d2a9-4ef0-aadc-4903bacfe7a2.png)

## AWS Lambda
今回作るLambda関数としては、API Gatewayからのリクエストに対して以下のhashを返す必要があります

```=ruby:hash.rb
{ 
  statusCode: 200,
  headers: {
    Content-Type: 'text/html'
  },
  body: 'コンテンツ'
}
```
また、関数の更新は `aws lambda`コマンドによって行いました。かなり便利ですね。

```
$ zip -r main.zip lambda_function.rb vendor
$ aws lambda update-function-code --function-name $FUNCTION_NAME --zip-file fileb://./lambda_function.zip
$ aws lambda update-function-configuration --function-name $FUNCTION_NAME --handler lambda_function.lambda_handler
```

## Lambda Layers
Lambda Layersという機能の追加によってLambdaの関数が分割でき再利用しやすくなりました。
とりあえず使ってみたかったので今回はよくあるSlack通知をLayerに追加してみます。

また、Lambda Layerの追加も `aws lambda`コマンドによって可能です
(※ 僕みたいにawscliのバージョンを上げ忘れてハマらないようにしましょう)

```
$ aws lambda publish-layer-version --layer-name $LAYER_NAME --zip-file fileb://./layer.zip --compatible-runtimes ruby2.5
$ aws lambda update-function-configuration --function-name $FUNCTION_NAME --layers $LAYER_ARN
```

これで追加したLambda Layerはrequireできるようになったので

```=ruby:require.rb
require '/opt/layer'
```
のようみ読み込んで使用できます。
(絶対パスで読み込まないと動かなかったのですが、何か設定抜けてたりするんですかね。。。)

## API Gateway
あとはAPI Gatewayを使ってデプロイするだけです。
GETリクエスト時にLambdaを実行すうように設定して、ステージの作成でデプロイ完成です。

## 最後に
Lambdaはかなり今後の展開が楽しみで、インフラをやっておきながらサーバレスにはかなり期待しています。
皆さんもぜひ試してみてください。

## 参考
- https://aws.amazon.com/jp/getting-started/serverless-web-app/
- https://docs.aws.amazon.com/cli/latest/reference/lambda/index.html#cli-aws-lambda
- https://qiita.com/kimihiro_n/items/15cce90ec93625c4445a
- https://qiita.com/rinjin5th/items/efffaea65f5488495d86
- https://qiita.com/mochizukikotaro/items/b980d28ee492c40aa145
初めてのVulkanプログラミング step2 layerの導入


[目次に戻る](https://qiita.com/tositada_nakada/items/db0f01c1c8c2945f786b)


[Vulkan Programming Advent Calendar 2018]: https://qiita.com/advent-calendar/2018/vulkan

ソースコードは以下の場所に置いておきます。各自のバージョンに合わせたプロパティ設定をしてから自由にご利用ください。
[github:  VulknAppAdocal2018](https://github.com/nakadasanda/vulkanAppaddcal2018)


vulaknは以下の要素で構成されている階層型アーキテクチャーです。
・バルカンアプリケーション
・バルカンローダ
・バルカンレイヤー
・クライアントデバイス(ICD)

![](https://vulkan.lunarg.com/doc/view/1.0.61.1/windows/images/high_level_loader.png)

##ローダー

アプリケーションは、ローダの端にあり、ローダーと直接接続されています。アプリケーションの反対側には、vulkan対応ハードウェアを制御するICDがあります。ローダーは、特別な機能を提供する多数のオプションlayerを挿入することができます。ローダは、さまざまなレイヤーを操作したり複数のGPUとそのドライバーを操作します。vulkanの関数はすべて、ローダー、レイヤー、ICDなど様々なモジュールから呼び出します。vulkanオブジェクトモデルを使用すると、ローダは、ICDが呼び出される前にレイヤーがvulkan関数を処理することができます。

##layer
レイヤーは、vulkanシステムを拡張するオプションコンポーネントです。
アプリケーションからハードウェアにいたるすべてにおいて、vulkanの機能を評価などを行う拡張機能を設定することができます。レイヤーは、CreateInstaneに実装されます。またこれらの複数のレイヤーを連鎖させて、1つの大きなレイヤーのようにカスケードすることができます。

LunarG Vukan　SDK　には、以下のレイヤーが含まれています。

|レイヤー名|機能|
|:--------|:-----|
|VK_LAYER_LUNARG_api_dump|apiの呼び出しと、そのパラメータと値を表示
|VK_LAYER_LUNARG_monitor|アプリケーションのタイトルバー(一番上の帯)にfpsを表示|
|VK_LAYER_LUNARG_screenshot|指定のフレームワークを画像に出力する|
|VK_LAYER_GOOGLE_threading|スレッドAPIの妥当性を評価する|

このほかにも多くのlayerが存在します。

このレイヤー機能を利用するには、環境設定が必要です。
しかし現在皆さんのPCには、きっとVK_LAYER_Nvidiaまたは、VK_LAYER_Intelしか入っていないと思われます.

Vulkan Loaderは、次のレジストリキーを検索してレイヤーを見つけます。

```cpp
HKEY_LOCAL_MACHINE/SOFTWARE/khronos/ExplicitLayers
HKEY_LOCAL_MACHINE/SOFTWARE/Khronos/Vulkan/ImplicitLayers
```
Vulkan Loderは値の名前で指定されたjsonテキストファイルを開き、レイヤー共有ライブラリーを検索します

##windowsでレイヤーをアクティブにする
環境変数を新規作成しVk_instance_layerにLayer名を記入し、また新しくvk_layer_pathを設定します。

<img width="525" alt="コメント 2018-12-25 124719.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/251306/a8516198-bc64-d997-342c-f7a4435c0ff7.jpeg">


<img width="457" alt="コメント 2018-12-25 124822.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/251306/09e25c3a-f19b-25da-9098-154451164c16.jpeg">

## 連絡先

tweeter: [tositada_nakada](https://twitter.com/nakadasanda17)
mail: nakadasanda@outlook.com

## 寄付

paypal: [tositada_nakada](https://www.paypal.me/nakadasanda)
Amazon: [欲しいものリスト](http://amzn.asia/fGpGuJo)
競技プログラミングを始めて苦戦したこと

この記事は[N高等学校 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/n-highschool) 24日目の記事です。


この記事がどういうものかというと，私がプログラミング経験2ヶ月ぐらいで競技プログラミングを始めた時に困ったことをまとめた記事です。競技プログラミングをやってみたいけど，プログラミング全然やったことない人や，初めてみたけどよくわからないことがあるという人の役に立てば，と思います。

###はじめに

私はN高等学校に今年4月入学した1年生です。入学するまでのプログラミング経験は，少しイベントなどでやったことはありますがほぼゼロです。入学してからは[N予備校](https://www.nnn.ed.nico)のプログラミング入門 Webアプリコースの2章の途中ぐらいまでの内容を学習しました。そしてもともと[情報オリンピック](https://www.ioi-jp.org)(JOI)に出てみたいと思っていたので，それに出れるように頑張ってみようと思い競技プログラミングを始めました。

###実際に始めてみて

実際に始めてみるといくつか困ったことがありました。ひとつめは言語の仕様がわからないということで，ふたつめはエラーが出た時にどうすればいいのかわからないということです。

####言語がわからない
この時私が勉強したことがある言語がN予備校でやったJavascriptだけで始めはJavascriptでやっていたのですが，JOIで使える言語はC言語，C++だけだったのと，JavascriptもあまりよくわからなかったのでC言語かC++を勉強しようと思いました。そして

- [苦しんで覚えるC言語](https://9cguide.appspot.com)
- [AIZU ONLINE JUDGE プログラミング入門](https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1)
- [AtCoder Programming Guide for beginners (APG4b)](https://atcoder.jp/contests/apg4b)

の3つを学習してこの問題は解決しました。

####エラーの問題

エラーが出た時は私は英語わからないきょうのでとりあえず，[Google翻訳](https://translate.google.co.jp)でエラー出力を翻訳して，わからなければひとつずつエラーを検索をかけて解決してきました。ですが，翻訳したり，検索をかけてるのは結構時間がかかるのでよく出るのをまとめておきたいと思います(実行環境はUbuntu 16.04.4，g++ 5.4.0です)

```
fatal error: studio.h: No such file or directory
compilation terminated.
```
これは，"studio.h"というファイルまたはディレクトリはないというエラーです。私も初めのうちはスタジオだと思っていたのですが，standard I/O (標準入出力)の省略らしいので"stdio.h"になるらしい

```
error: ‘variable’ was not declared in this scope
```

これはerrorの後にある変数(この例だとvariable)はこのスコープでは定義されていないというエラーです。文字列使おうとした時や，スペルミス，定義したつもりだったがしていなかったなどの時によくあると思います。

```
error: expected ‘;’ before ‘return’
```
これはセミコロンを書き忘れた時に出ます。この例だとreturnの前にセミコロンがいるのに書き忘れています。expectedという単語が期待されたなどの意味の単語らしいので，この単語がエラーで出てきたら何か書き忘れてると思ってもいいかもしれません。

私が思いついたのはこれぐらいだったのですが結構まだあると思うのでその時は，検索をかけてみてください。何かしらの情報が見つかると思います。

###最後に

競技プログラミングの大会に出れるならばできるだけ出た方がいいと思います。まず楽しいですし，色々な発見があったりするので，自分の成長にも繋がると思います。最後まで読んでいただきありがとうございました。