OmniAICreator/Qiita-1.07M huggingface dataset:
RaspberryPiにつないだスピーカーから音が出ない

RaspberryPiからスピーカーで音を出そうとしたとき、音が出なくて困ったので、まとめておく

#####原因として考えられること
>
- スピーカーがそもそも接続できていない
- RaspberryPi側の設定ミス

ということで一つ一つチェックした
##スピーカーが接続できていない
まず、スピーカーが接続できているかどうかは以下のコマンドで確認
>
```
pi@raspberrypi:~ $ lsusb
```
```
pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 8086:0808 Intel Corp.
・・・
Bus 001 Device 006: ID 04f2:0939 Chicony Electronics Co., Ltd
・・・
```

と表示される.

Bus 001 Device 006: ID 04f2:0939 Chicony Electronics Co., Ltd　として認識されていることがわかった。

ここで接続できていないという線は消えた。

##Raspiの設定がうまく行ってない

[オーディオ設定　RaspberryPi公式ドキュメント](http://igarashi-systems.com/sample/translation/raspberry-pi/configuration/audio-configuration.html)

上のサイトを参考にRaspberryPiの設定をした。

すると音が出た！
メルペイ

memo
・初期ターゲットは小額決裁
　→狙いは体験を産みたい、
・メルペイの類似は？
　→ギフトカード：特別なお金という価値で利用して頂きたい。（本来では貯蓄に回るような特別報酬が消費に回る）
　　本来では流通しないお金が流通される→社会貢献？
　　メルカリの売上は下がる可能性がある。ただ、メルカリで売ることの価値がメルカリ市場の価値があがる。
・他のペイメント会社との区別化は？（LINE、YAHOO、RAKUTEN、merukari、AMAZON）
　→メルペイのビジョンはダントツの一番になること
　　多角化されている会社に比べてpayに力を入れている。
　　merucariの成功事例（様々なフリママーケットにかったこと）を生かして行きたい。
　　後発のメリットを活かして行きたい。
　　→ハード面などを考慮すると後発のメリットがでる
　　他社と区別化できる販売の仕方は上手く使って事業展開を行う＆他のペイメントが有利なところはハードルが下がったと考え、乗っかる
・体験の差別化
　→日本は決済に対して背徳感や更改が大きい。
　　その決済体験を変えたい。merupayはその体験をうみたい。
　　ストーリー体験で話ができるのはmerucariの利用体験があるから。

merupayのミッションは信用を創造して、滑らかな社会を作る
→キャッシュレスで便利になっていく世の中、街づくりをしていきたい。
　ペイメントの城下町を作っていけるような会社にしたい。
PowerAppsでタコメータをつくる

PowerAppsで[スピードメータを作っている方](https://qiita.com/rnakamuramartiny/items/efd8c5bf236834dead42)がいたので、触発されてタコメータを作ってみました。

##まずは動きをみてください

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">できた！！PowerAppsでタコメーター風インジケータ！<a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> <a href="https://t.co/f4fVEZImB7">pic.twitter.com/f4fVEZImB7</a></p>&mdash; ながちん(りつ) (@mofumofu_dance) <a href="https://twitter.com/mofumofu_dance/status/1039469207480557569?ref_src=twsrc%5Etfw">2018年9月11日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##作り方

1. PowerAppsのHTMLテキストコントロールを使います。
2. divにスタイルでメーターの線を表示します。
3. スライダーまたはほかのコントロールでメーターの角度を調整します。

これだけです。
具体的に見ていきます。CSSファイルのインポートができるかは謎なので、スタイルは直書き。
HTMLテキストコントロールに以下を記載しました。

```HTMLTextControl
"<div style='background: #F14134;background-image: linear-gradient(to bottom, #F14134, #343536);height: 0;left: 50%;position: absolute;top: 50%;width: 0;transform-origin: 50% 100%;margin: -285px -8px 0;padding: 285px 8px 0;z-index:2;border-radius: 50% 50% 0 0;transform:rotate("&(Slider1.Value*180/100-90)&"deg);'></div>"
```
このうち、*Slider1.Value*180/100-90* あたりが、スライダーとの連動になりますので、各アプリで対応させてください。

最後に、もはや蛇足ですが、パーツの対応です。
<img width="432" alt="BBB.png" src="https://qiita-image-store.s3.amazonaws.com/0/202779/9f880279-4027-a811-deae-f8e41619eee6.png">


##Reference
スタイルはここを参考にしました。
[https://codepen.io/ilhantekir/pen/igyEe](https://codepen.io/ilhantekir/pen/igyEe)
Deployment Managerを触って気になったところ - GCPを使い始めて気づいたAWSとの違いをメモしていく その2

# Deployment Managerを触って気になったところ - GCPを使い始めて気づいたAWSとの違いをメモしていく その2


https://qiita.com/watarin/items/d867dcfac9cfd62abbc0
に続いて、今日はDeployment Managerを色々触ってみたのでそのメモ



## 基本的な概念

- AWSのCloudFormationみたいなやつ
- 名前の通り、Deploymentする仕組みで、Convergeする仕組みではない（CloudFormationと同じ）
   - Terraformのstateのrefreshや、stateの直接編集みたいなこともできないので、他でいじると破綻する

個人的にはこの手のツールはConvergeして欲しいので、GCPでもTerraformメインになるかな？という気がしている（GCPでTerraformまだ試していないので、結果どうなるかはわからないけど）


## テンプレート

CloudFormationより明らかに便利なところ。大量にコピペしなくてよい！

- Python or Janja2 on YAMLでテンプレートが作れる
- PythonはYAML構造を出力する関数を定義する
- create/update時に、Pythonのコンパイルエラーは当該のPythonファイルに対して検出されるけど、構成ファイルとしてのエラーはテンプレート処理後のYAMLに対してエラーがでるので、Pythonファイルでどこを間違えたかは、自分で探す必要がある（まぁ仕組み的に当然といえば当然）
- 手元で、構成YAMLを動的に作るのと、ぶっちゃけ大差ない仕組みな気がする。とはいえやっぱり仕組みとして提供されているのは便利


## 変更の確認

CloudFormationとは一長一短かなぁ、、、、個人的にはTerraformのplanみたいなのが一番わかりやすいと思っている

- updateの際に `--preview` でプレビュー状態になる
- Deployment Manger内で仮想のresourceが作成されるので、それでどうなるかが確認できる。
- CloudFormationの変更セットみたいに、変更の一覧がざっとでてくる、というのはない。
- 各リソースの内容をそれぞれ見る必要がある。`resources list`  して、UPDATE になっているリソースを一つづつ `resources describe` する必要ある
   - WEBコンソールだと、、、プレビュー状態になっていることと、変更実行はできるけど、、、リソース情報はプレビュー状態のもの（変更予定のもの）は見れず、現状あるものしか見れない。
- 各リソースをdescribeすると、before/afterはでてくるけど、差分箇所の明示はされない。



## 適用

- 適用が失敗したら、そこで止まる。(CloudFormationみたいにロールバックしようとしない）
- previewで成功したからと言って、更新が成功するとは限らない（この手のはみんなそうだよね）
    - ex: comupteインスタンスのタイプ変更
- 実行にあたっては、Deployment Managerの権限を持っていれば各リソースに対する権限は不要
    - Deployment Managerのサービスアカウントがリソース操作する
- CloudFormationとは違って、リソースの変更を伴わない変更もできる



## 他でリソースいじると？

冒頭の通り、検知しない。Convergeもしない。なので絶対触っちゃだめ

- Deployment Manager外でリソースを編集しても一切関知しない（CloudFormationと同じ）
- 例えば、compute インスタンスをDeployment Mangerで作って、コンソールからインスタンスタイプ変えた後、Deplyment Managerでupdateしても、なにも更新されない（そもそも更新対象として検出されない）
Configure::load()で同じファイルを複数回読みこむと配列が増える(゜ロ゜)


```config.php
$config['target'] = [
	'foo' => ['foo1', 'foo2'],
	'bar' => ['bar1', 'bar2']
];
```

こんな設定を用意しておいて、利用したいところで

```php
Configure::load('config');
$config = Configure::read('target');
```

ってコードで読み取りすることってあると思うんですが、これ、複数実行すると配列が増えます！(゜ロ゜)


```php
Configure::load('config');
$config = Configure::read('target');
debug($config);

Configure::load('config');
$config = Configure::read('target');
debug($config);
/*
ここでは
[
	'foo' => ['foo1', 'foo2', 'foo1', 'foo2'],
	'bar' => ['bar1', 'bar2', 'bar1', 'bar2']
]
*/
```

少しコードみただけですが、Configure::load()内でHash::merge()実行してるようなので、連想配列なら上書き、数値添えの配列なら追加になるんだと思われます。

複数のテストを連続実行させたらConfigure::load()で同名ファイル読みこみを複数実行したようで、発見できました。

というわけでCakePHP2でCongigure::read()つかうときは、列挙したいだけでも数値添え字配列は避けた方が良さそうです。

さっきのコードなら

```config.php
$config['target'] = [
	'foo' => ['foo1' => 'foo1', 'foo2' => 'foo2'],
	'bar' => ['bar1' => 'bar1', 'bar2' => 'bar2']
];
```

とするか

```config.php
$config['target'] = [
	'foo' => ['foo1' => true, 'foo2' => true],
	'bar' => ['bar1' => true, 'bar2' => true]
];
```
こんな感じにして ```array_keys```で読むかってところでしょうか。


追記

```config.php
if (!Configure::check('target')){
	$config['target'] = [
		'foo' => ['foo1', 'foo2'],
		'bar' => ['bar1', 'bar2']
	];
}
```

これもありか

あるいはloadの第3引数がマージオプションになってるようなのでそっちで

```php
Configure::load('config', 'default', false);

```

うん。どれもスッキリしない^^;
Rubyで3の倍数と3のつく数字の時に☆印をつけた。

# What
[FizzBuzz](https://tomoyuki65.com/fizzbuzz-in-ruby/
)問題の応用として特定の数字の時も判定するプログラムを作成した。

# Why
アルゴリズムの問題をもっと解けるようになりたい!:angry:

# 実際のコード

```ruby
# 1-30までを出力し、3の倍数と３のつく数字は☆をつける

def findthird
  num = 1
  while (num <= 30) do
    if (num % 3 == 0 || num.to_s.include?("3"))
      #3の倍数とは、数字を3で割りき切れる数字なので「%3」
      #3のつく数字はnumの数を文字列に変換し、「to_s」、
      #指定した文字列"3"が含まれている場合にtrueを返す条件を加える。「.include?("3")」
      puts "#{ num } ☆"
    else
      puts num
    end

    num = num + 1
  end
end

findthird
```

# まとめ
PHPの解答例やRubyのリファレンス参考に、自分なりの回答を見つけることができたので勉強になりました。:laughing:
Python×業務効率化 Automagicaでブラウザを自動で動かしてみた

#はじめに
Python×業務効率化の可能性を模索中のk_mayo_beamと申します。
今回はPythonでRPAできないかと探し回っていたら見つけたAutomagicaというライブラリの機能をほんの少しだけ触ってみます。
#Automagicaってなんだ？
簡単に言うと**PythonでRPAができるよ！**っていうライブラリだと思ってます。
公式のドキュメントは⇒[こちら](https://automagica.readthedocs.io/)

Pythonには多数の便利なライブラリが準備されており、
比較的簡単にExcelやPDFを触ったり、WebUIの自動テストをしたり、
マウスやキーボードを自動で動かしたりできます。

ただ、統合的な自動化をしようとすると、
たくさんのライブラリをインポートするのがちょっとだけ面倒です。

AutomagicaはPyAutoGUI，Selenium，Tesseract，OpenPyXL，Beautiful Soupなどの
有名どころのライブラリをうまく連携させて、**使いやすい関数群を提供してくれます**。

#とりあえずインストールしてみる
コマンドはこちら↓
`pip install https://github.com/OakwoodAI/automagica/tarball/master`
依存関係があるライブラリがたくさんインストールされるので、気をつけて下さい。

#少しだけ触ってみる
今回はほんの3つの機能だけを使って、WEB操作を自動化してみます。
以下はChromeでQiitaを開いて、「Python×業務効率化」と検索して、ロゴをクリックするだけのプログラムです。

```python:find_mayo_beam.py
from automagica import ClickOnImage, ChromeBrowser, DisplayMessageBox
from retry import retry

#画像が見つかったらクリックする関数
@retry(delay=1)
def WaitAndClickImage(pic:str):
    return ClickOnImage(pic)

#Qiitaの検索窓のxpath
xpath = '//*[@id="globalHeader"]/div/div[1]/form/input'
#検索する内容
content = 'python×業務効率化'

#ChromeでQiitaを開く
browser = ChromeBrowser()
browser.get('https://qiita.com/')

#検索窓を探して内容を検索する
browser.find_element_by_xpath(xpath).send_keys(content)
browser.find_element_by_xpath(xpath).submit()

#k_mayo_beamのロゴを探してクリックする
WaitAndClickImage('logo.png')

#やったぜ！
DisplayMessageBox("やったぜ！")
browser.close()
```
画像のクリックですが、スクリーンショットをとって画像マッチングをするようなので、**画像のサイズに要注意**です。
SnippingToolなんかで取得するのがおすすめ。

#動作の様子
ちょっとGIFを作成してみました。
![demo.gif](https://qiita-image-store.s3.amazonaws.com/0/273809/1800f15a-9277-8525-0c35-e808b9764c56.gif)

#さいごに
総じて面白いツールだと思います。
まだまだたくさんの機能がついているので、試してみたいと思います。
【Netlify】カスタムドメインを設定する

# Netlifyとは

WEBサイトのホスティングサービス
https://www.netlify.com/

![netlify.png](https://qiita-image-store.s3.amazonaws.com/0/141934/36200c1e-9c92-8376-964d-7113cf0ef524.png)

# Netlifyに関する投稿
- [Netlify / GithubPages / Heroku の速度比較](https://qiita.com/NaokiIshimura/items/0b6c4ff5da437081866b)
- [ドラッグ＆ドロップでWEBサイトを公開する](https://qiita.com/NaokiIshimura/items/40ed08203b35aa0b527c)
- [Github連携でWEBサイトを公開する](https://qiita.com/NaokiIshimura/items/9f12805af85c9be22814)
- カスタムドメインを設定する ←今回の投稿
- [Forms機能を利用して問い合わせフォームを作成する](https://qiita.com/NaokiIshimura/items/bce2f0b865ec1bc16a53)


# 目標

サブドメイン無しのURL（ https://naokiishimura.cloud ）へアクセスしたときに、Netlifyを利用して公開したサイトへアクセスできるようにする。

# 補足

手順内では私が所持していたドメイン（ **naokiishimura.cloud** ）を利用してます。

![domain00.png](https://qiita-image-store.s3.amazonaws.com/0/141934/e9507893-0446-4d6f-8dbf-4e72277f027f.png)

# カスタムドメインの設定

Netlifyの管理コンソールでドメインを設定する。

![domain01-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/7f1bb5e5-a2bb-698e-ba1b-efa8610c00e5.png)
![domain02-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/6fddde53-a6cf-3929-2df0-8a4506c5211c.png)
![domain03-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/73052546-0523-115d-b1fc-fb6f186f5724.png)
![domain04-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/861a7370-618c-417c-569a-4bca2b7d637d.png)
![domain05.png](https://qiita-image-store.s3.amazonaws.com/0/141934/2bcedbd3-12d0-598b-b9b8-1f46c0125aed.png)
> 補足：サブドメイン無しのドメインを指定した場合は、サブドメインにwwwが指定されたドメインも自動的に追加されるようです


# DNS設定の確認

Netlifyの管理コンソール上でDNS設定を確認する。

サブドメイン無しの場合は、**ALIAS(推奨)**かAレコードの設定方法が表示される。

```
# ALIAS(推奨)
naokiishimura.cloud ALIAS eloquent-sammet-202e50.netlify.com.
```

```
# Aレコード
naokiishimura.cloud A 104.198.14.52
```

サブドメインがついてる場合は、CNAMEの設定方法が表示される。

```
www CNAME eloquent-sammet-202e50.netlify.com.
```

![domain05-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/95c7318f-e721-69b6-d231-51a8728798db.png)
![domain06-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/69844750-727c-3666-baab-c48d148042aa.png)
![domain07-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/1403a71b-d7ee-98a9-9315-f1854ef11d24.png)
![domain08-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/86fec7f7-4db0-485e-20ae-ed17fb538860.png)

# DNSの設定

Netlifyの管理コンソールで確認した内容をDNSに設定する。
AWS Route53を利用した場合は以下のようになる。

> 補足：Route53ではALIASを利用できますが、ALIASが指定できないDNSもあるため、あえてAレコードを利用して設定しました

![domain09-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/03bc1fb8-4b3a-cb90-b718-c3210d0ea8f9.png)

DNSの設定が完了してしばらくすると、Netlifyの管理コンソール上で設定したカスタムドメインが**Primary domain**に変わる。

![domain07.png](https://qiita-image-store.s3.amazonaws.com/0/141934/c38eeb42-abb1-e9c7-8c3d-b1ada868ced7.png)
![domain11-b.png](https://qiita-image-store.s3.amazonaws.com/0/141934/942cd4c4-868b-7d43-3e80-71cb4f577da6.png)

HTTPS通信用の証明書も自動的に設定される。

![domain12-a.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ede6ca61-3954-0ed1-6859-4388d5387272.png)

# アクセス確認

ブラウザから設定したカスタムドメインへアクセスして、Netlifyで公開したサイトが表示されることを確認する。

![domain13.png](https://qiita-image-store.s3.amazonaws.com/0/141934/d5586355-8bfe-6d71-f744-1d18322bef0b.png)
WebAPI周りについての基礎

#これは何？
スマホアプリを作る上で、WebAPIについての知識はなくてはならなくなった。
クライアントはReactNativeで動いていて、サーバーサイドはRailsで動いている。
そのつなぎ役をやっているのがAPIみたいなのはわかってるけどもっと突っ込んで理解したい人向け。

基本的には、[こちらの記事](https://qiita.com/y-some/items/7e05540d7563f7c1c101)に書いてあるリンクをすべて読めば理解できます。
ここではかいつまんで説明をしてます。

#どうやって動いてるの？
スマホアプリの場合、サーバーとクライアントが別々に動き、マイクロサービス化している場合がほとんどだと思いますが、そうした場合につなぎ込みの役割をしてくれているのがWebAPIです。
これまでは、URLを叩くとHTMLが返ってたと思いますが、それがJSONなどの形式になると理解すれば簡単だと思います。

例えば、
ReactNativeで書いたクライアント側から、WebAPIを通じてRailsのコードを動かすことができるようになります。
サーバー側から見れば、クライアントの動作一つ一つをAPIとして提供しておけるわけです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180679/3d23d5d3-dae0-e4fb-fd4f-6c87e7822b60.png)


クライアントからWebAPIにアクセスするときにはエンドポイント（URIのこと）を利用することになるため、
サーバー側ではできるだけわかりやすいエンドポイントを用意してあげることが大事です。

# HTTPとは？
HTTPプロトコルの中身は下記のような感じのようです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180679/0a7b093d-c021-d92a-f4c9-9248b0003839.png)

Requestにおいては、「何を」（URL+パラメータで指定）「どうするか」（HTTPメソッドで指定）「どういう状況化で」（HTTPヘッダー）を指定して、
Responceでは、ステータスコードと共に、リクエストの結果をRequestに合わせた形で取得することができる。

[参考](https://www.yoheim.net/blog.php?q=20120611)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/180679/b163f5ee-d325-4559-4bfd-1974ab95ad6f.png)

- 200系：正常系
- 300系：リダイレクト系
- 400系：ユーザーの入力がおかしい場合
- 500系：サーバー内にて何かエラーが起きている

ステータスコードは上記のようにざっくり覚えておけばいいと思います。

[ステータスコードの詳細](https://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89)


※ RESTful APIとは？

```
WebAPIの規格の名称です。
SOAPとRESTが存在するのですが、RESTしかほとんど使われないようです。
ざっくりいうと、上で見たHTTPのリクエストのURIを規定する規格のことです。
これに則ってURIを作成すると非常に統一的でわかりやすいです。
```

[RESTに関してはこれが非常にわかりやすいです](https://www.bokukoko.info/entry/2014/10/12/REST_%E3%81%AA_API_%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B)

WebAPIを設計するのであれば、まずは[こちら](https://qiita.com/naoki_koreeda/items/a3c4b61d5ae2105df8fa)のルールに則って開発するで問題ないと思います。
これをベースにカスタマイズして行くのが理想かと思います。
CircleCI2.0でphp.iniのmemory_limitを変更しても「Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes)」エラーが出てしまうときの解決法

CircleCI2.0でのPHPアプリケーションのビルドで、あるとき「Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes)」というエラーがPHPUnitのテストで発生するようになりました。
そのときかなりハマったので備忘録として残します。

## TL;DR

MySQLのmax_allowed_packetが足りていないのが原因で、MySQLのDockerイメージに引数でmax_allowed_packetの設定値を渡すとエラーが解消しました。

## 試したけど効果なかったもの

この手のエラーが出たときは、大体PHPのmemory_limitの値が低いことが原因なので、php.iniのmemory_limitを上書きするようにしました。
まずはiniの場所がわからないので`run: php -i` でphpinfoを出力しました。

```
省略...

Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => (none)
Scan this dir for additional .ini files => /usr/local/etc/php/conf.d

省略...
```

とあるので、/usr/local/etc/php/conf.dにファイルを追加します。


```yml
    - run: sudo sh -c "echo \"memory_limit = 2048M\" > /usr/local/etc/php/conf.d/memory.ini"
    - run: php -i | grep memory_limit
```

これでmemory_limitが2GBになりましたが、同じエラーが出ます。
プログラムがmemory_limitを書き換えているのかと思い、処理の直前に`ini_set('memory_limit', '2048M')` を入れましたがメッセージは変わりません。

```
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 806912 bytes) ...
```

と出ます。

memory_limitを変更したらAllowed memory size of xxx bytes exhaustedのxxxの値が変わるはずなのに変わらないのはおかしいと思い、他にこのような問題がないか調べてみると、[stackoverflow](https://stackoverflow.com/questions/34864524/allowed-memory-size-of-536870912-bytes-exhausted-in-laravel) に

> I had the same problem. No matter how much I was increasing memory_limit (even tried 4GB) I was getting the same error, until I figured out it was because of wrong database credentials setted up in .env file

というのがありました。
DBの接続情報が悪かったようでそこを直すと動作したそうです。
ここでMySQLの設定が原因なのかと疑いはじめました。

あらためてエラーが出るようになったコミットを見てみるととても長い文字列をDBに登録しており、MySQLが受け付けることができるサイズを超えたのではと思い、以下の方法でmax_allowed_packetを変更してみました。

```config.yml
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/php:7.2-apache-node-browsers
      - image: circleci/mysql:5.7
        command: [--max_allowed_packet=32M]
```

めでたくエラーが解消されてビルドが通るようになりました！
エラーメッセージが適切でなかったためだいぶハマってしまったのでこの経験が誰かの役に立てば幸いです。
EKSのkube-dnsをカスタマイズしてクラスタのドメイン名を変える

複数クラスタを扱いたいとなった場合に、クラスタのドメインを変えたくなるはず。EKSではkube-dnsは自動で構築されるのだが、`kubectl edit`で設定をいじれそうだったので変更してみた話。結果ドメイン名を編集できた。

# ドメイン名の変更
ドメイン名はデフォルトだと`cluster.local.`になっているので以下のように変更してみた。

```sh
## viが開くので .cluster.local => paper2.io に変更
$ kubectl edit -n kube-system deployment.apps/kube-dns
deployment.apps/kube-dns edited
```

# 確認
testpodの中からdigで引ける。

```sh
[root@testpod1 /]# dig paper2.io

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> paper2.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 63754
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;paper2.io.			IN	A

;; AUTHORITY SECTION:
paper2.io.		60	IN	SOA	ns.dns.paper2.io. hostmaster.paper2.io. 1536141600 28800 7200 604800 60

;; Query time: 2 msec
;; SERVER: 10.100.0.10#53(10.100.0.10)
;; WHEN: Wed Sep 05 10:11:32 UTC 2018
;; MSG SIZE  rcvd: 108
```

試しにpodがkube-dnsにしっかり登録されているかも確認してみた。

```sh
[root@testpod1 /]# nslookup 192-168-230-202.default.pod.paper2.io.
Server:		10.100.0.10
Address:	10.100.0.10#53

Name:	192-168-230-202.default.pod.paper2.io
Address: 192.168.230.202
```

大丈夫そう。

# 変えていいのか
うまく変更できているように見える。ただ私はマスターの設定でドメイン名を設定する場所があるかなどを把握していないので不具合が起きないかはわかりません。SlackのkubernetesのEKSチャンネルで変更しても大丈夫か聞いてみたけど回答もらえず。
ひとまず思いつく場所としては、クラスタードメインはkubeletでも指定できるので起動オプションを変更する必要がある。それ以外は不明。使う場合は追加の検証が必要そう。
(随時更新) 大学の教養課程数学を学びたいエンジニアさん向けの情報リスト by Team AI

#はじめに

Team AIでは月一回渋谷で数学研究会を開催しています。
10-20人で集まって、紙とペンで微積分・線形代数・統計の演習問題を解いています。
現状博士課程で素粒子を研究されている立石さんが講師になって頂いているので、
サポート力も上がってきました。
今回のそんなイベントから世の中に発信する価値のある情報をまとめたいと思います。
随時更新していくので、また感想等お教えください！

#2018/9/11 　立石さんのオススメ情報

Twitter会話で圏論がめちゃくちゃ流行っている
集合論のノリ、数学の土台となる理論
サブカテゴリーとして、圏、射、関手がある
https://bit.ly/2N7xxd6

商や積の微分は対数関数を使うと差や和になるので便利



#オススメTwitter

私がフォローしているリスト
https://twitter.com/ishiid/lists/math

鯵坂もっちょさん(ギャグ、GIF)
https://twitter.com/motcho_tw?lang=ja

二本松せきゅーんさん(数論)
https://twitter.com/integers_blog?lang=ja

グレブナー基底大好きbotさん(ギャグ、各分野)
https://twitter.com/groebner_basis?lang=ja

mipoさん(数学科の主婦)
https://twitter.com/nekomath271828?lang=ja

#数学YouTuber

予備校のノリで学ぶ大学の数学・物理
https://twitter.com/yobinori

バーチャル数学科大学院生いたりんっ(Virtual Tuber)
https://www.youtube.com/channel/UCRAWk5rqZVEC_qUii-jdxhg/featured

日曜数学会(ニコ動)
http://www.nicovideo.jp/tag/%E6%97%A5%E6%9B%9C%E6%95%B0%E5%AD%A6%E4%BC%9A

#イベント

数学デー(週二回)
https://twitter.com/sugaku_day

MathPower
http://mathpower.sugakubunka.com/

ロマンティック数学ナイト
http://romanticmathnight.org/

日曜数学会
https://twitter.com/nichimath

日曜数学会 北海道

日曜数学会 関西

#スペース

ファイカフェ(本郷の数理カフェ)
https://phi.cafe/

#団体・サークル

都数(東京都の学生サークル)
https://tosuu.web.fc2.com/

#塾

数理学院
https://twitter.com/ma_sc_institute

和から
https://wakara.co.jp/

みらい研
https://twitter.com/mirai_jimbocho?lang=ja

#ゲーム

ナブラ演算子ゲーム
http://nablagame.com/

素数大富豪
http://www.ajimatics.com/entry/2017/04/29/010952

陣目取
https://j344.exblog.jp/238440011/

ゴドマチ
合同を待つゲーム
https://j344.exblog.jp/238344979/

サイコロコロンブスの卵
https://bit.ly/2x0OMBW

#雑誌

数学セミナー
https://www.nippyo.co.jp/blogsusemi/

数学文化
https://bit.ly/2oVJ9kO

数理科学
http://www.saiensu.co.jp/?page=magazine&magazine_id=1

#書籍

###解析

ラングの解析入門
https://amzn.to/2N80fKM

マセマの微分積分
https://amzn.to/2Of7tcg

###線形代数

ラングの線形代数
https://amzn.to/2N8mGzL

マセマの線形代数
https://amzn.to/2Mkxg11

###統計

マセマの統計
https://amzn.to/2Mm1kcA
Spark on KubernetesでPersistent Volumeを使う方法

Kubernetesには、Podにアタッチして利用できるPersistent Volume(PV)というデータ領域があります。
PVによってPod削除後もデータを残すことが可能となり、また複数のPod間の共有ストレージとしても利用できます。

Apache Sparkはバージョン2.3からKubernetesネイティブサポートを開始しているものの、現バージョン(2018/09/11時点)のSpark2.3ではPersistent Volumeへのアタッチに対応していないのが現状です。
幸運なことに、次期バージョンのSpark2.4からはPersistent Volumeが利用できるようになるとのことですので、今回先取りしてSpark on KubernetesでPersistent Volumeを使ってみようかと思います。

# 0. 前提とか環境とか
* Kubernetes実行環境 : Azure Kubernetes Service(AKS)
* 一口にPVといっても、いろんな種類がありますが、AKSでクラスタを作成すると、次の2つのAzure Diskのストレージが自動で作成されるので、今回は"default"に対してアタッチを試みます。
    * default         : HDD ※今回はこちらを利用する
    * managed-premium : SSD

# 1. Spark2.4の準備
GitHubから2.4のソースをクローン。

```
git clone -b branch-2.4 https://github.com/apache/spark.git
```

SBT(Scala Build Tool)を利用してビルドを実施。
mvnとかでも大丈夫なはず。

```
build/sbt -Pkubernetes -DskipTests clean package
```

Spark2.4を利用しSparkコンテナをビルドしてプッシュ。
Spark2.3と同じなので具体的方法は割愛します。

# 2. PVC(Persistent Volume Claim)の作成
PVC定義(どのストレージをどの程度利用するか)を作成します。
yaml形式で次のように書きます。
ここではPVC名「azure-managed-disk」で5Gの領域確保を行います。

```
azure-default.yaml


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: default
  resources:
    requests:
      storage: 5Gi
```

下記コマンドでAKS上にPVC作成。

```
kubectl create -f azure-default.yaml
```

Storage Classを使用したPVCを作成し問題なければ、PVCの内容に基づいて作成されたPVを確認できるようになります。次のコマンドで確認できます。

```
kubectl get pv
```


# 3. Spark-Submit実行
spark-submit時にコマンドオプションを指定することで、Spark Podと先程作成したPVをアタッチすることができます。

```
./bin/spark-submit \
--master k8s://http://127.0.0.1:8001 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=1 \
--conf spark.kubernetes.container.image=$REGISTRY_NAME/spark:$REGISTRY_TAG \
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.path=/mnt/azure \
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.readOnly=false \
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.options.claimName=azure-managed-disk \
local:///opt/spark/work-dir/SparkPi.jar
```

PVをアタッチするために利用したコマンドオプションは次の3つです。

```
# pod内のどのパスにマウントするか？(ここでは"/mnt/azure"にマウントしました)
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.path=/mnt/azure \
# 読み取り専用か？（ここでは読み書き両方可能）
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.readOnly=false \
# どのPVCを利用するか？（ここでは先に作成したPVC"azure-managed-disk"を利用)
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.options.claimName=azure-managed-disk \
```

# 4. 参考文系
* https://github.com/apache/spark/blob/master/docs/running-on-kubernetes.md#using-kubernetes-volumes
* https://docs.microsoft.com/ja-jp/azure/aks/azure-disks-dynamic-pv
カラーユニバーサルデザイン推奨配色セット ver.4の配色を使用したスタイルシート

[カラーユニバーサルデザイン推奨配色セット ver.4](http://www.dic-graphics.co.jp/navi/color/ud.html) に基づいたスタイルシートを公開します。
自治体のホームページなど、アクセシビリティ(accessibility, a11y)が重視される場合にご利用ください。

### 全20色
アクセントカラーが9色、ベースカラーが7色、また無彩色から4色が選定され、合計20色あります。
※ver.3とは、同じ色でもrgb値が異なりますのでご注意ください。

## スタイルシート
スタイルシートにしました。クラスを付与したhtmlを作成すれば、これらの色が反映されます。

```css
.text-red {
    color: #ff4b00 ;
}
.text-yellow {
    color: #fff100 ;
}
.text-green{
    color: #03af7a ;
}
.text-blue {
    color: #005aff ;
}
.text-skyblue {
    color: #4dc4ff ;
}
.text-pink {
    color: #ff8082 ;
}
.text-orange {
    color: #f6aa00 ;
}
.text-purple {
    color: #990099 ;
}
.text-brown {
    color: #804000 ;
}
.text-lightpink {
    color: #ffcabf ;
}
.text-cream {
    color: #ffff80 ;
}
.text-yellowgreen{
    color: #d8f255 ;
}
.text-lightskyblue {
    color: #bfe4ff ;
}
.text-beige {
    color: #ffca80 ;
}
.text-lightgreen {
    color: #77d9a8 ;
}
.text-lightpurple {
    color: #c9ace6 ;
}
.text-white {
    color: #ffffff ;
}
.text-lightgray {
    color: #c8c8cb ;
}
.text-gray {
    color: #84919e ;
}
.text-black {
    color: #000000 ;
}
.background-red {
    background-color: #ff4b00 ;
}
.background-yellow {
    background-color: #fff100 ;
}
.background-green{
    background-color: #03af7a ;
}
.background-blue {
    background-color: #005aff ;
}
.background-skyblue {
    background-color: #4dc4ff ;
}
.background-pink {
    background-color: #ff8082 ;
}
.background-orange {
    background-color: #f6aa00 ;
}
.background-purple {
    background-color: #990099 ;
}
.background-brown {
    background-color: #804000 ;
}
.background-lightpink {
    background-color: #ffcabf ;
}
.background-cream {
    background-color: #ffff80 ;
}
.background-yellowgreen{
    background-color: #d8f255 ;
}
.background-lightskyblue {
    background-color: #bfe4ff ;
}
.background-beige {
    background-color: #ffca80 ;
}
.background-lightgreen {
    background-color: #77d9a8 ;
}
.background-lightpurple {
    background-color: #c9ace6 ;
}
.background-white {
    background-color: #ffffff ;
}
.background-lightgray {
    background-color: #c8c8cb ;
}
.background-gray {
    background-color: #84919e ;
}
.background-black {
    background-color: #000000 ;
}
```

* text-(色名) : 文字色を指定する
* background-(色名) : 背景色を指定する


### 注意点
カラーユニバーサルデザイン推奨配色セット ver.4の冊子に記載がありますように、この20色は、どの組み合わせで使ってもよい、というものではありません。この20色から選ぶ場合でも、選び方が良くないと、見分けにくい色の組み合わせが生じることがありますのでご注意ください。

[JIS安全色版はこちら](https://qiita.com/ounziw/items/d5bc56db992173b8d0b4) をごらんください。
ReSharper(Rider)で日本語がtypo扱いされる時の対処

#ReSharper 2018.2 (Rider 2018.2)でスペルチェックが追加
昔からプラグインとしてあったらしいですがアップデートで標準機能になりました

 [resharperの更新情報](https://www.jetbrains.com/resharper/whatsnew/#v2018-2-spell-checking)
 [riderの更新情報](https://blog.jetbrains.com/dotnet/2018/08/23/rider-2018-2-released/)

##日本語が全部typoと指摘される
![TypoInComment.PNG](https://qiita-image-store.s3.amazonaws.com/0/59989/383a5400-2c40-57ae-7c9b-9c4b2b82a3db.png)

##対処法
![対応.PNG](https://qiita-image-store.s3.amazonaws.com/0/59989/a287b46e-4cb2-ac26-893d-376d303fb01b.png)
・カーソルをあわせて　Alt+Enter
・Inspection:"Type in comment" -> Configure inspection severity -> Do not show 
これでコメントをスペルチェック対象外にしました

##戻したいとき
コメントも英語で統一するとかでチェックを戻したい時

![チェック設定.PNG](https://qiita-image-store.s3.amazonaws.com/0/59989/ce89b00b-0189-4aa3-d60d-8ebe9ea01496.png)

・メニュー -> ReSharper -> Options でオプション画面を開く
・左上の検索ボックス[Type in search] に spelling issuesと入力
・検索で出てきたInspection Severityを選択
・右画面でTypo in commentのチェックが外れてるはずなのでチェックを入れてSave

##補足
・文字列も怒られますが同様の手順で除外できます![文字列.PNG](https://qiita-image-store.s3.amazonaws.com/0/59989/c3f53390-2303-3673-6d9a-fd8465dffe31.png)

##参考
[Twitterで見つけて助かりました](https://twitter.com/Grabacr07/status/1039191764437889024)
Functional Programming in Scala（Scala関数型デザイン&プログラミング）のExerciseでTDDを練習しよう！

# 環境構築

[公式のリポジトリ](https://github.com/fpinscala/fpinscala)をcloneして、sbtプロジェクトとしてIntelliJ IDEAにインポートしましょう。

`build.sbt`に１行追加します。

```build.sbt
val commonSettings = Seq(
  scalaVersion := "2.12.1",
  libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test"
)
```

`project/plugins.sbt`を新しく作成します。

```project/plugins.sbt
addSbtPlugin("com.artima.supersafe" % "sbtplugin" % "1.1.3")
```

# テストファイル作成

以下のようなテストファイルを作成しましょう。

```exercises/src/test/scala/fpinscala/gettingstarted/GettingStartedSpec.scala
package fpinscala.gettingstarted

import org.scalatest._

class GettingStartedSpec extends FlatSpec {

// ここにテストコードを書く

}
```
LaravelのObjectを配列のように使おうとして、「コレクション」に辿りついた

#Object内の検索を配列関数でいこうとして怒られる

Laravel初心者です。

コントローラーから、

```php
return view('home',compact('data','data2'));
```
のように、値をViewへ渡せるのは便利でウキウキでした。
（最初は、コントローラーからViewへ値を渡す方法が面倒、かつ、よくわからなかったので、
compactが超便利で感動）

しかし、DBからのデータをViewへ渡した場合、配列を渡したと思っていたのに、
実際渡されていたのはObject。

こいつの処理にしばし悩みました。

例えば、配列のある列の中に、ある値があるかを、

```php
$key = array_search('taro', array_column($data, 'name'));
var_dump($key);  
```
みたいに探したかったわけです。

しかし無情にも、「Objectなんだから配列じゃねえ」とLaravelは言う。
( *array_column() expects parameter 1 to be array, object given* )
切ない。

しばし悩んで、「コレクション」にたどり着きました。

#コレクション、便利やん
「じゃあ、どうすりゃいいの？」となりましたが、たどり着いたのが以下のページ。
https://readouble.com/laravel/5.7/ja/collections.html

コレクションのメソッド群も、調べてみると超便利。
https://readouble.com/laravel/5.7/ja/collections.html#collection-method-list
一瞥して、かなりてんこ盛り感あります。

最終的に、下のような感じでcontainsメソッドを使い、

```php
@if($data->contains("name","taro"))
    {{$data->name}}//プロパティへのアクセスは、矢印+プロパティ名
@endif
```
こんな感じで、望む処理が書けました。

これからも、LaravelでObject処理に困ったら、
このページ見ながら、便利な道具を使わせてもらいましょかと。
ありがたし。
「Python」超初心者としてPythonデビュー

Pythonデビューしました！

```py
checkflg = False
inputCount = 0
while(not(checkflg)):
    try:
        if inputCount == 0:
            a = int(input("数字を入力してね : "))
        else :
            a = int(input("数字以外のものを入れたよね。もう一回入力してね : "))
        checkflg = True
    except ValueError:
        checkflg = False
        inputCount = inputCount + 1


while(True):
    if a == "8":
        print("ピンポン！")
        break
    else :
        a = input("ブー、不正解だった。再度入力してみてね : ")
```
【pug】ドロップダウンメニュー用の書き方覚書

メニューを構成する変数を作っておく。

```javascript
-
  var headerMenu = [
    {
      pageLink: '',
      pageName: 'ホーム'
    },
    {
      pageLink: 'about',
      pageName: '会社概要',
      childMenu: [
        {
          pageLink: 'philosophy.html',
          pageName: '企業理念'
        },
        {
          pageLink: 'message.html',
          pageName: 'トップメッセージ'
        },
        {
          pageLink: 'history.html',
          pageName: '沿革'
        }
      ]
    },
    {
      pageLink: 'recruit',
      pageName: '採用情報',
      childMenu: [
        {
          pageLink: 'message.html',
          pageName: 'メッセージ'
        },
        {
          pageLink: 'person.html',
          pageName: '社員紹介'
        },
        {
          pageLink: 'guideline.html',
          pageName: '募集要項'
        }
      ]
    },
    {
      pageLink: 'news',
      pageName: 'お知らせ'
    }
  ];
```

## 展開するためのコード

```javascript
ul.list-menu
  - for (var i = 0; i < headerMenu.length; i++)
    li
      a(href=headerMenu[i]['pageLink'] + '/')
        | #{headerMenu[i]['pageName']}
      if headerMenu[i]['childMenu']!=null
        ul.list-menu__child
          - for (var j = 0; j < headerMenu[i]['childMenu'].length; j++)
            li
              a(href=headerMenu[i]['pageLink'] + '/' + headerMenu[i]['childMenu'][j]['pageLink'])
                | #{headerMenu[i]['childMenu'][j]['pageName']}
```

子階層は親と同じディレクトリを想定しているが、この辺は臨機応変に。

## 出力結果
```html
<ul class="list-menu">
  <li><a href="/">ホーム</a>
  </li>
  <li><a href="about/">会社概要</a>
    <ul class="list-menu__child">
      <li><a href="about/philosophy.html">企業理念</a></li>
      <li><a href="about/message.html">トップメッセージ</a></li>
      <li><a href="about/history.html">沿革</a></li>
    </ul>
  </li>
  <li><a href="recruit/">採用情報</a>
    <ul class="list-menu__child">
      <li><a href="recruit/message.html">メッセージ</a></li>
      <li><a href="recruit/person.html">社員紹介</a></li>
      <li><a href="recruit/guideline.html">募集要項</a></li>
    </ul>
  </li>
  <li><a href="news/">お知らせ</a>
  </li>
</ul>
```

今回ドロップダウン用ということで書いたけど、PC用のメニュー・スマホ用のメニューの出し分けを行うことが多々あるので、変数で管理しておけば修正箇所が少なくて済む。
cert-bot/letsencrypt nginx `UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 12: ordinal not in range(128)`


## 環境
+ Amazon Linux AMI
+ nginx


## 事象
cert-botで証明書作ろうとしたところ下記のエラーが。

```
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 12: ordinal not in range(128)
```

## 原因
日本に生まれてしまったこと。

（nginxのconfファイルに日本語がコメントで書かれていた。）

## 対策
nginxのconfファイルの日本語を削除or英語にする。

ちなみに、nginxのconfファイルの場所は基本的に、`/etc/nginx/conf.d/` 配下にある。

## 詳細
cert-bot内のpythonスクリプトに文字コードの宣言が書かれていないため、デフォルトのanciiで読み込まれていて、UTF-8の日本語文字列の読み込みでエラーになる。
問題のファイルはこいつ(他にもあるかも...?)。
https://github.com/certbot/certbot/blob/master/certbot-nginx/certbot_nginx/nginxparser.py

本来はこいつに

```
# coding: utf-8
```

これを追加すればいいだけなのだけど、そもそもnginxのconfigurationファイルにUTF-8で書いてるのが正しいのかどうかわからない。
テストは通るし、日本語を含むURLからのリダイレクト設定するときとかはUTF-8で保存しないと動かないからUTF-8で書くのが正しいとは思っている。（Hex表記でもいい。）
https://github.com/nginx/nginx/blob/master/src/core/ngx_string.c
この辺かな。
気が向いたらちゃんと読み込んでプルリクおくりたい。
気が向いた人ちゃんと読み込んでプルリク送ってください。
Bootstrap4で.img-responsiveにハマった話

#.img-responsiveが効いてくれない！

ある時Bootstrapで、
いつものように.img-responsiveを使ってみても、
画像が可変になってくれない。

いろいろ調べて、Bootstrap4のドキュメントを見ると、
「**.img-responsiveは.img-fluidに変更されたよ**」と書いてある（！）
https://getbootstrap.com/docs/4.1/migration/#images

これまで３系を使ってきていましたが、
下調べもろくにせず４系を使ってみて、地雷踏みました。

他にも、中央寄せで多用していた
**.center-block が 
.mx-auto に**
変更されていたり。

画像だけなら他にも、
**.img-rounded が .rounded　に
.img-circle が .rounded-circle　に**
なってました。

他にも、わんさと変更点あります。
そんなわけで、
##Bootstrap4系への変更、よく調べましょ。。

先ほどのページを全部見て見ると、
３系から４系になって、かなり変更があったとわかります、オソロシヤ。
https://getbootstrap.com/docs/4.1/migration
ちょくちょく調べてCSS書かないと、また別の地雷踏みそうです。
あな、恐ろし。

３系（以前？）な皆様も、どうぞご注意を。
tableをスマホで確認するとフォントサイズが効かなくてハマった件

結論：以下をCSSに追記して解決した。

```css
-webkit-text-size-adjust:100%;
```


モバイル端末で使用されるテキスト自動拡大アルゴリズムを制御できるらしい。
https://developer.mozilla.org/ja/docs/Web/CSS/text-size-adjust
なぜあなたのKaleidoscopeはコンパイルできないのか？

**A. あなた使っているLLVMに適合した`KaleidoscopeJIT.h`でありません。利用しているLLVMのバージョンのリリースブランチから`KaleidoscopeJIT.h`を得ましょう。**

この記事は「[LLVM 6.0 で作るフロントエンドの道しるべ](https://qiita.com/sakasin/items/097fa676ccfd117acaa2)」の兄弟記事です。
以降は詳細という名の蛇足です。

# Kaleidoscope

LLVMを用いてプログラミング言語を実装する公式チュートリアルに、[Kaleidoscope][万華鏡]があります。LLVMに入門した多くの人が参照したのではないでしょうか。そして、写経とはいかないも、サンプルコードをコンパイルするくらいは試したことと思います。

筆者の場合、[４章のJIT](4. Kaleidoscope: Adding JIT and Optimizer Support)でサンプルコードがコンパイルできず、早速つまづきました。この原因は、適切な `KaleidoscopeJIT.h` を使っていないことにあります。

# KaleidoscopeJIT.h のありか

３章まではサンプルコードそのままでコンパイルできても、４章からは `KaleidoscopeJIT.h` を用意しろと言われます。よくチュートリアルを読むと `llvm-src/examples/Kaleidoscope/include/KaleidoscopeJIT.h` にあるらしいです。

`KaleidoscopeJIT.h` で検索すると、だいたい https://github.com/llvm-mirror/llvm/blob/master/examples/Kaleidoscope/include/KaleidoscopeJIT.h に行き当たります。 LLVMのミラーリポジトリだし、パスあってるし、これじゃんと思って使うと、コンパイルエラーになります。コンパイルエラーになるのは、 `master` ブランチ向けに修正されているためです。

使うべき `KaleidoscopeJIT.h` は、使っているLLVMのバージョンのブランチに、あるいはきちんとリリースされたソースに同梱されている `KaleidoscopeJIT.h` です。正しいブランチからヘッダを参照しましょう。 LLVM 6.0を使っている場合には、以下から参照できるものが正しい `KaleidoscopeJIT.h` です。

- https://github.com/llvm-mirror/llvm/blob/release_60/examples/Kaleidoscope/include/KaleidoscopeJIT.h


# おわび

煽りタイトルで、さらに内容薄になってしまったことは反省しています。

# 参考文献

- [Kaleidoscope: Implementing a Language with LLVM][万華鏡]

[万華鏡]: https://llvm.org/docs/tutorial/index.html#kaleidoscope-implementing-a-language-with-llvm
Power Query で SharePoint リスト の EntityPropertyName を 取得する

Power Query で SharePoint リストの EntityPropertyName, Title, InternalName を取得するだけ。で、EntityPropertyName は一意にならないことがある。まぁ起きないけど。

```text:PowerQuery
let
    ListRootSite = "https://<テナント>.sharepoint.com/",
    ListName = "<リスト名>",
    Source = 
        OData.Feed( 
            Text.Format( 
                ListRootSite & "_api/web/lists/GetByTitle('#{0}')",
                { ListName }
            ) 
        ),
    ContentTypes = 
        Table.Combine( Source[ContentTypes][Fields] ),
    RemovedOtherColumns = 
        Table.SelectColumns(
            ContentTypes, 
            { "EntityPropertyName", "InternalName", "Title" } 
        )
in
    RemovedOtherColumns
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193509/c4200145-fde5-527d-4d2b-4d5a74797eca.png)
Asana, Basecamp, Redmie, Wrike, X

日本ではRedmine根強いなぁ、って思ったのでちょっとググってみました。


# Asana, Basecamp, Redmie, Wrike

[Asana, Redmine, Wrike, Basecamp \- Explore \- Google Trends](https://trends.google.com/trends/explore?date=all&geo=JP&q=Asana,Redmine,Wrike,Basecamp)

![Screen Shot 2018-09-11 at 17.25.49.png](https://qiita-image-store.s3.amazonaws.com/0/74939/dc01a8d2-8a70-c38c-9d13-9faec1596f8c.png)

[Asana, Redmine, Wrike, Basecamp \- Explore \- Google Trends](https://trends.google.com/trends/explore?date=all&q=Asana,Redmine,Wrike,Basecamp)

![Screen Shot 2018-09-11 at 17.25.25.png](https://qiita-image-store.s3.amazonaws.com/0/74939/b6b56da2-7b58-ec9e-7f69-c0b9b4d3878b.png)


# Asana, Basecamp, Redmie, Wrike, JIRA

なんとなくJIRA加えてみたらこんな結果でした。

[Asana, Redmine, Wrike, Basecamp, JIRA \- Explore \- Google Trends](https://trends.google.com/trends/explore?date=all&geo=JP&q=Asana,Redmine,Wrike,Basecamp,JIRA)

![Screen Shot 2018-09-11 at 17.24.18.png](https://qiita-image-store.s3.amazonaws.com/0/74939/104f4b4c-f4b6-e550-c331-c07ef6a5697d.png)


[Asana, Redmine, Wrike, Basecamp, JIRA \- Explore \- Google Trends](https://trends.google.com/trends/explore?date=all&q=Asana,Redmine,Wrike,Basecamp,JIRA)

![Screen Shot 2018-09-11 at 17.23.55.png](https://qiita-image-store.s3.amazonaws.com/0/74939/f7785581-e9ca-fb14-505e-a27428059d02.png)




# リンク

- [Use Asana to manage your team’s work, projects, & tasks online · Asana](https://asana.com/)
    - [Asana を使ってチームの仕事、プロジェクト、タスクをオンラインで管理 · Asana](https://asana.com/ja)
- [Basecamp: Project Management & Team Communication Software](https://basecamp.com/)
- [Jira \| Issue & Project Tracking Software \| Atlassian](https://www.atlassian.com/software/jira)
    - [Jira \| 課題 & プロジェクト追跡ソフトウェア \| アトラシアン](https://ja.atlassian.com/software/jira)
- [Overview \- Redmine](https://www.redmine.org/)
    - [Redmine\.JP \- Redmine Japanese Information Site](http://redmine.jp/)
- [Your online project management software \- Wrike](https://www.wrike.com/)
    - [Wrike \- プロジェクト管理](https://www.wrike.com/ja/)




# 余談

関係ないけど検索していたらこんな記事見つけまして、ちょっと考えさせられる?


JIRAに死を | TechCrunch Japan
https://jp.techcrunch.com/2016/12/13/20161211death-to-jira/
Cloud Vision APIで画像解析

# Cloud Vision APIで画像解析

## Cloud Vision APIとは
- Google Cloud Platform(GCP)が提供する機械学習サービス
- Googleの持つ画像に関する機械学習モデルを使い、対象となる画像から以下の情報を取得することができます。
  - 猫やヨットなど、画像に含まれている物体の検知
　- 画像内に含まれている文章やロゴの取得
  - 人物の顔認識やその表情が示す感情に関する情報の取得
  - コンテンツが暴力的など不適切な要素を持つかの判定

![VisionAPIイメージ.png](https://qiita-image-store.s3.amazonaws.com/0/56239/a3f2aa47-5fef-91db-bb95-c281471c7f37.png)

## 今回は↓をやってみた
**ウェブの力を活用（ウェブ検出）**

- Googleの画像検索を活用し、著名人やロゴ、ニュース イベントなどの時事的なエンティティを検出
- この機能と類似画像検索を組み合わせてウェブ上で類似している画像を検索

## 実行手順
#### Vision APIを有効にする
##### サービスアカウントを使用して認証を設定する
サービスアカウント作成（Role不要）
アプリケーションのデフォルト認証情報設定

```
export GOOGLE_APPLICATION_CREDENTIALS="/home/xxxxx/development-visionapi.json"
```
サービスアカウントのアクティベート

```
gcloud auth activate-service-account development-visionapi@xxxx.iam.gserviceaccount.com --key-file=/home/xxxxx/development-visionapi.json --project=xxxxx
```

#### 環境設定（クライアントライブラリ設定）
```
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
virtualenv env
source env/bin/activate
cd /home/xxxxx/python-docs-samples/vision/cloud-client/detect
pip install -r requirements.txt
```
#### 画像の準備
GCSバケット作成と権限設定、ファイルアップロードを行う

今回この画像を使ってウェブ検出してみた

[Footballchannelより](https://www.footballchannel.jp/)![ph_messi.jpg](https://qiita-image-store.s3.amazonaws.com/0/56239/4d63c810-a4b8-62cc-c3fe-3e1a52da9b9d.jpeg)
あの人でしょ・・・？

#### 検出実行

```
$ python detect.py web-uri gs://xxxx/ph_messi.jpg
```

#### 検出結果
以下のような結果が返ってくる

```
Best guess label:
（もっともあてはまるラベル）
10 Pages with matching images found:
（一致するページのリスト）
10 Web entities found:
（ウェブ エンティティとその説明およびスコアのリスト）
8 visually similar images found:
（類似した画像）
```

今回（2018/8/28実行）だと以下の結果でした

```
Best guess label: messi double moskau
```
"メッシ" "ダブル（そっくりさん）" "モスクワ"

```
10 Pages with matching images found:
        Page url   : https://www.gettyimages.ca/detail/news-photo/iranian-lionel-messi-lookalike-university-student-reza-news-photo/681904592
略）
```
一致するページとしては以下などがあがってきました
[こちらでした](https://www.gettyimages.ca/detail/news-photo/iranian-lionel-messi-lookalike-university-student-reza-news-photo/681904592)

```
10 Web entities found:
        Score      : 13.345499992370605
        Description: Lionel Messi
        Score      : 1.163580060005188
        Description: 2018 World Cup
        Score      : 1.0410000085830688
        Description: Argentina national football team
        Score      : 0.7657500505447388
        Description: Great children’s party
        Score      : 0.7534500360488892
        Description: Iran
```
エンティティは
"Lionel Messi"
"2018 World Cup"
"Argentina national football team"
"Great children’s party"
"Iran"

```
8 visually similar images found:
        Image url    : https://www.welt.de/img/sport/mobile177463464/6632503087-ci102l-w1024/The-Iranian-
Messi-lookalike.jpg
略）
```
似通った画像として
"The-Iranian-Messi-lookalike.jpg"

つまり**メッシのそっくりさんだよ**という結果となりました
もしかしたらニュースになった直後だと**メッシだよ**という答えが多かったりするのかも
そう考えるとGoogleの画像における機械学習はすごいですね！

# 参照
https://www.footballchannel.jp/2017/06/23/post218532/
Cosmos DB の独習マテリアル集（2018年12月:編集中）

# はじめに
Microsoft Azure の中でも NoSQL の PaaS として存在する Cosmos DB。RDBMS（リレーショナルデータベースマネジメントシステム）に馴染みの多い人には少し敷居が高く見えてしまうこともあるかと思います。
この記事では、独習するためのコンテンツへのリンクをまとめてみました。

__本情報の内容（添付文書、リンク先などを含む）は、作成日時点でのものであり、予告なく変更される場合があります__

# ドキュメント
- [製品ドキュメント](https://docs.microsoft.com/ja-jp/azure/cosmos-db/)
- [Hands on Lab (英語版　Windows 環境のみ)](https://cosmosdb.github.io/labs/)
- [Azure Cosmos DB 入門(ホワイトペーパー)](https://www.microsoft.com/ja-jp/cloud-platform/documents-search?pdid=all_PD&svid=Service_42&dtid=Self_learning)
- [ハンズオン: Azure Cosmos DBを使ったグローバル分散アプリ構築(ゼンアーキテクツさん作成のハンズオン）](https://github.com/zenarchitects/cosmosdb-global-distribution-handson)
- [Azure Cosmos DB Technical Deep Dive (英語版）](https://aka.ms/cosmosdb-deck)
- [//build 2018](https://mybuild.microsoft.com/sessions)
    - BRK3310 How to migrate your existing MongoDB and Cassandra Apps to Azure Cosmos DB 
    - BRK3311 How to take advantage of scale out graph in Azure Cosmos DB
    - [BRK3319 Technical overview of Azure Cosmos DB](https://youtu.be/V_C7DlKVofc) 
    - BRK2205 Understanding Operations of  Azure Cosmos DB
- [次世代データベース サービス「Azure Cosmos DB」を使いこなそう ～ Azure Cosmos DB Deep Dive ～ @decode 2018](https://youtu.be/xIH_mBwwmnI)
- [Cosmos DB Performance Tuning @decode 2018](https://eventmarketing.blob.core.windows.net/decode2018-after/decode2018_PDF_DA22.pdf)
- [Cosmos DB University (リンク変更あり）](https://github.com/CosmosDB/GotCosmos/blob/master/index.md) 
- [Pluralsight:Azure Cosmos DB](https://www.pluralsight.com/courses/azure-cosmos-db)
- [Patterns for working with Cosmos DB](https://github.com/Azure/azure-cosmos-dotnet-v2/tree/master/samples/Patterns)
初心者がTerminalで最初に気を付けること

はじめまして。
プログラミングで何かモノを作れるようになりたいもりくまと申します。


ここから初心者としてつまづいた所、進捗を出すのに苦しんだ所などを書き残すことで、少しでも後から始める人の救いになれば幸いです。
内容がそもそも間違っていたり、もっと良い解決方法をご存知の諸先輩方より、アドバイスを賜われたら嬉しいです。



最初のつまづき　〜自分の居場所がわからない問題〜
人はよく道を見失いますが、プログラミングを始めたての私も例に漏れず、ターミナルを開いてデスクトップ手前のディレクトリでどこにも行けない状態に陥ってました。



業務中、「rails s〜〜で、立ち上がるからー」と説明を受けて、
1.教わったコードを何度も見直して、正確に打ち直す
2.ターミナルを再起動してみる
※作業環境はMacです。



・・・何回やってもダメでした。
そのファイルがない場所でいくら呼び出してもそりゃ、いないもんは呼び出せません。
プログラマっぽい作業始まって、かっこいい！とか思ってた自分さん。はしゃぐ前にまずpwdで自分の居場所を知るのじゃ。



「自分がいる場所＝そのファイルがある場所　になっている状態で、実行を始める」
コードを書くとかそれのもっと手前の基本中の基本ですが、慣れていないとなかなか厳しい。



そこで、調べて必要になった４つのターミナルコードの一覧をお送りします。




①「pwd」・・・今、自分がいるディレクトリ（今開いているフォルダ）がわかります。
※print working directoryの略

```bash
MacBook-Pro:~ $ pwd
/Users
```
今「Users」のディレクトリにいますね。





②「ls」・・・今いるディレクトリに何が入っているのかわかります。移動先の名前を調べるのに便利です。
※何の略かわからず。

```bash
MacBook-Pro:~ $ ls
AnacondaProjects			Desktop					Library					Public					Documents				Movies					
Applications				Downloads				Music					Dropbox					Pictures				
```
「Users」の中に入っているディレクトリ、ファイルの一覧が見える化できました。





③「cd 〜〜」・・・lsで確認ができたディレクトリに移動できます。
※change directoryの略、〜〜に移動したいディレクトリ名が入ります。

```bash
MacBook-Pro:~ $ pwd
/Users/
MacBook-Pro:~ $ cd Music
MacBook-Pro:Music $ pwd
/Users/Music
```
「Users」のディレクトリから、「Music」ディレクトリに移動しました。






④「cd ..」・・・ひとつ上の階層のディレクトリに移動します。

```bash
MacBook-Pro:Music $ pwd
/Users/Music
MacBook-Pro:Music $ cd ..
MacBook-Pro:~ $ pwd
/Users
```
「Music」ディレクトリにいた所から、「Users」ディレクトリに戻ってきました。





この４つさえあれば、
1.「pwd」　　　　自分の現在地
2.「ls」　　　　　ここから行ける場所
3.「cd 〜〜」　  　実際の行き方
4.「cd ..」　　　  間違えた時にひとつ戻る方法

上記の組み合わせで、一旦、自分のPC上どこでも自由に行けるようになりました。


今日はこのあたりで失礼します。
ログ監視でよく使う英単語

ログ監視でよく使う英単語をまとめたものです。

| 英単語 | 意味 | 英単語の変形 | 検索ワード |
|:--|:--|:--|:--|
| [crash](https://ejje.weblio.jp/content/crash) | クラッシュ | [動詞]<br>crashing (現在分詞)<br>crashed (過去形)<br>crashed (過去分詞)<br>crashes (三人称単数現在) | **crash** |
| [deny](https://ejje.weblio.jp/content/deny) | 否定する<br>拒む | [動詞]<br>denying (現在分詞)<br>denied (過去形)<br>denied (過去分詞)<br>denies (三人称単数現在) | **den**<br>**deny**<br>**denie** |
| [exception](https://ejje.weblio.jp/content/exception) | 例外 | 名詞<br>exceptions (複数形) | **exception** |
| [exit](https://ejje.weblio.jp/content/exit) | 退出する | [動詞]<br>exiting (現在分詞)<br>exited (過去形)<br>exited (過去分詞)<br>exits (三人称単数現在)<br><br>[名詞]<br>exits (複数形) | **exit** |
| [defect](https://ejje.weblio.jp/content/defect) | 欠陥<br>欠点 | [動詞]<br>defecting (現在分詞)<br>defected (過去形)<br>defected (過去分詞)<br>defects (三人称単数現在)<br><br>[名詞]<br>defects (複数形) | **defect** |
| [error](https://ejje.weblio.jp/content/error) | エラー<br>誤り<br>間違い | [名詞]<br>errors (複数形) | **error** |
| [fail](https://ejje.weblio.jp/content/fail) | 失敗する | [動詞]<br>failing (現在分詞)<br>failed (過去形)<br> failed (過去分詞)<br>fails (三人称単数現在) | **fail** |
| [failure](https://ejje.weblio.jp/content/failure) | 操作ミス<br>失敗<br>失敗者<br>失敗したもの<br>不成功 | [名詞]<br>failures (複数形) | **failure** |
| [find](https://ejje.weblio.jp/content/find) | 発見する | [動詞]<br>finding (現在分詞)<br>found (過去形)<br>found (過去分詞)<br>finds (三人称単数現在)<br><br>[名詞]<br>finds (複数形) | **found no**<br>**not f** |
| [fatal](https://ejje.weblio.jp/content/fatal) | 致命的な<br>きわめて重大な | [形容詞]<br>fatal | **fatal** |
| [miss](https://ejje.weblio.jp/content/miss) | ミスする<br>取りそこなう<br>見落とす | [動詞]<br>missing (現在分詞)<br>missed (過去形)<br>missed (過去分詞)<br>misses (三人称単数現在)<br><br>[名詞]<br>misses (複数形) | **miss** |
| [result](https://ejje.weblio.jp/content/result) | 結果 | [動詞]<br>resulting (現在分詞)<br>resulted (過去形)<br>resulted (過去分詞)<br>results (三人称単数現在)<br><br>[名詞]<br>results (複数形) | **result** |
| [terminate](https://ejje.weblio.jp/content/terminate) | 終える | 動詞<br>terminating (現在分詞)<br>terminated (過去形)<br>terminated (過去分詞)<br>terminates (三人称単数現在) | **terminat** |
| [unknown](https://ejje.weblio.jp/content/unknown) | 不明の | [名詞]<br>unknowns( 複数形) | **unknown** |
| [warn](https://ejje.weblio.jp/content/warn) | 警告する | [動詞]<br>warning (現在分詞)<br>warned (過去形)<br>warned (過去分詞)<br>warns (三人称単数現在) | **warn** |
初心者がとまどうJavaScript イディオム

## +v （数値化）
```
var v = "123";
console.log(+v + 100) // 223
console.log(v + 100) // 123100
```
parseFloat(v) に比べて高速なのに加えて、parseFloatとは細かい挙動が異なる
（例えば空文字列の場合、parseFloatならば NaN になりますが、 +v の場合はゼロになります）。

##v - 0 （数値化）
```
var v = "123";
console.log((v - 0) + 100) // 223
console.log(v + 100) // 123100
```
+v に比べてあまり使われることはありませんが、初見でもある程度意味が理解しやすいメリットはあるかもしれません。

## v + "" （文字列化）
```
var n = 123;
console.log(n + 123); //246
console.log(n + "" + 123); //123123
```

## (function(){ ... })(); // スコープ化
```
// 先頭の';'は省略可能
;(function() {
    var x = "hello world";
    console.log(x);
})();

// 下記と同じ意味
var f = function() {
    var x = "hello world";
    console.log(x);
};
f();
```
ソースコードの最初と最後にオマジナイのように書かれる、わからない人にとっては謎のfunction文。JavaScriptは関数の中に書かない変数宣言は全てグローバル変数として扱われてしまうので、グローバルスコープを汚さないように関数式でコード全体を囲っています。（上記コードと下記コードは同じ意味）

## && （if文の省略）
```
var o = { f: function() { console.log("hello world"); } };

if(o) {
    if(o.f) {
        o.f();
    }
}

// 省略形
o && o.f && o.f();
```

## v = v || {}
```
function f(o) {
    o = o || {};
    ...
}
```
関数の先頭などで、デフォルト引数の設定などに良く使われるイディオム。例えばoがundefinedの時などに、デフォルト値として空のオブジェクトを設定する、というような用法で使われます。

## v | 0 （整数化）
```
var i = v | 0;

console.log(-2.1 | 0); // -2
console.log(Math.floor(-2.1)); // -3
```
強制的に整数にするイディオムです。vが文字列の場合でも、まず数値化され、その後整数化されます。なお、 `Math.floor` でも似たような処理になりますが、マイナス数値を扱った場合の挙動が違うので注意。
twitter ユーザ指定検索

twitterの検索時に指定するqueryの指定方法については、

https://developer.twitter.com/en/docs/tweets/rules-and-filtering/overview/standard-operators

に詳しく書いてある。投稿者指定の検索方法は、query に
 from:xxx を指定すれば良い。

tweepyの場合。

```python
tweet = api.search(q='xxx from:yyy', ..., tweet_mode='extended')
tweet[0].full_text
```

でも検索文字列に日本語を指定するとうまくいかないんだよな。文字コードの問題なんだろうか? でもfromを設定しなければ日本語でもちゃんと検索できるのでそういう問題ではない気がしている。

あちらを立てればこちらが立たずばっかり。

python-twitterの場合。

```python
tweet = api.GetSearch(term='from:xxx', ...)
tweet[0].text
```
Ansibleインストールしてとりあえず疎通確認を試した

インストール

```
sudo apt-get install ansible
```

対抗ノードのIP記載

```:inventory/hosts
[primary]
10.0.0.1
```

疎通確認してみる

```
ansible all -i inventory/hosts -m ping
```
```
10.0.0.1 | UNREACHABLE! => {
    "changed": false,
    "msg": "ERROR! SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue",
    "unreachable": true
}
```

残念！

Ansibleの挙動を調べてみると
・~~rootユーザで~~対抗ノードにSSHしてからpingコマンドを実行しているらしい
    → 改めて確認するとrootではなく実行元ログインユーザだった
・特に指定がなければ鍵認証でSSHするらしい

SSHユーザの指定

```:inventory/hosts
[primary]
10.0.0.1 ansible_ssh_user=hogehoge
```

オプション指定でパスワード入力

```
ansible all -i inventory/hosts -m ping --ask-pass
```
```
10.0.0.1 | FAILED! => {
    "failed": true,
    "msg": "ERROR! to use the 'ssh' connection type with passwords, you must install the sshpass program"
}
```

インストールします...

```
sudo apt-get install sshpass
```

再実施

```
ansible all -i inventory/hosts -m ping --ask-pass
```
```
10.0.0.1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
```

ようやくAnsibleの疎通確認ができた...
Autodesk Mayaのカットナンバー一覧

Mayaのカットナンバーについてまとめました。
CUIだけでバージョン確認がしたかった為。
間違いがあるかもしれないので自己責任で。

###確認方法
`mayabatch -v`

###一覧

|バージョン|カットID
|---|---
|2013 x64|201202220241
|2014|201401300447
|2015|201405190330
|2015 Extension1+SP5|201410051530
|2015 SP6|201503261530
|2016|201502261600
|2016 SP4|201510022200
|2016 SP6|201603180400
|2016 Extension1+SP6|201603180400
|2016 Extension2(2016.5)|201603022110
|2017|201606150345
|2017 Update1|201608291545
|2017 Update2|201611102145
|2017 Update3|201702071345
|2017 Update4|201706020738
|2017 Update5|201710312130
|2018|201706261615
|2018 Update1|201708311015
|2018 Update2|201711281015
|2018 Update3|201804211841
|2018 Update4|201807191615
|2018 Update5|201811122215
|2019|201812112215
C# List<T>特定の要素を先頭へ移動させる

List<T>内に一致する要素があれば、その要素だけを先頭へ移動させて、
その他の要素は元のままになるように並べ替える方法です。


#Remove() 

Remove()を実行して、一致する要素があったかどうかを事後確認し、
要素があった場合はindex0へInsert()します。

```C#
var list = new List<string>() { "A", "B", "C", "D", "E" };
if (list.Remove("C"))
{
    list.Insert(0, "C");
}
foreach (var item in list) Console.WriteLine(item);
```


#IndexOf() 

IndexOf() を実行して、一致する要素があればRemoveAt()で削除し、
その後index0へInsert()します。
返り値が0の場合は既に希望の並びになっているので何もしません。

```C#
var list = new List<string>() { "A", "B", "C", "D", "E" };
if (list.IndexOf("C") > 0)
{
    list.RemoveAt(list.IndexOf("C"));
    list.Insert(0, "C");
}
foreach (var item in list) Console.WriteLine(item);
```


#結果は
C
A
B
D
E
となります。