OmniAICreator/Qiita-1.07M huggingface dataset:
Java Stream APIチートシート

Stream超便利。Stream正義、そしてStreamすぐ忘れる。ということでチートシートを作成しました。
よろしくご査収ください。

# 全てに処理を行う（List編）

```java
Arrays.asList("ほんと", "世の中", "世知辛い").stream().forEach(s -> System.out.println(s));
Arrays.asList("まじまじ", "ホント", "世知辛い").stream().forEach(System.out::println);
```

# 全てに処理を行う（Map編）

```java
Collections.emptyMap().entrySet()
  .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
```

# 特定のものだけ処理を行う。

```java
Arrays.asList("恋", "愛", "金", "夢").stream()
  .filter(s -> s.equals("愛")).forEach(System.out::println);
```

# 型変換する。

```java
Arrays.asList("1", "2", "3", "5").stream()
  .map(s -> Integer.valueOf(s)).forEach(System.out::println);
```

# 特定範囲の数字に対して処理する。

```java
IntStream.range(0, 10).map(i -> i*2).toArray();
```

# List→Mapにする。

```java
Arrays.asList("SU-METAL DEATH!", "YUIMETAL DEATH!", "MOAMETAL DEATH!").stream()
  .map(s -> s.split(" ",2)).filter(a -> 2 == a.length)
  .collect(Collectors.toMap(a->a[0], a->a[1]));
```

# マルチスレッドで高速に処理する。

```java
Arrays.asList("恋", "愛", "金", "夢").parallelStream()
  .findFirst(s -> s.equals("愛"));
```

# List結合
```java
Arrays.asList("愛,それは,甘く","愛,それは,強く","愛,それは,尊く").stream()
  .map(s -> s.split(",")).flatMap(a -> Arrays.asList(a).stream())
  .collect(Collectors.toList());
```

# 長くなったら変数化。

```java
Function<String, String> toHakata = s -> {
    return s + "とよ。";
};
Arrays.asList("そぎゃんこつなか").stream().map(toHakata);
```

# 他にもあったら
コメント、プルリクください。
rails+graphql-rubyで日時型を定義する

## はじめに
仕事で試しにGraphQLを使うことがあったので使えそうなものを抜粋して書いていきます。
今回は日時型を定義します。


## 環境
ruby 2.4.2
rails 5.1.4
graphql-ruby 1.7.4

## 使用ケース
mysqlなどのDBとつなぎ込み、DBの「datetime型」の扱う
そのアプリケーションのGraphQL内において扱い方を共通化したい時など


## どうやるか？
GraphQLのScalarTypeを使用します。
もともとGraphQLには以下のscalar型が定義されていますが、

```
Int
Float
String
Boolean
ID
```

DBとつなぎこむと日時型がなくて困ります。
なので扱い型を共通かするため日時型を追加します。


## ディレクトリ構成
```
├── app
│   ├── graphql
│   │   ├── functions
│   │   ├── loaders
│   │   ├── mutations
│   │   ├── schema.rb
│   │   └── types
│   │       ├── date_time_type.rb
│   │       ├── user_type.rb
│   │       ├── query_type.rb
```


## 定義
```graphql/types/date_time_type.rb
Types::DateTimeType = GraphQL::ScalarType.define do
  name 'DateTimeType'

  coerce_input ->(value, _context) { Time.zone.parse value }
  coerce_result ->(value, _context) { I18n.l(value, format: :default) }
end
```
locales上にフォーマットを定義して、そのフォーマットに整形しています。
こちらは一例ですので、お使いのアプリケーションに合わせてlocales使うなり設定してください。

```config/locales/ja.yml
ja:
  time:
    formats:
      default: "%Y/%m/%d %H:%M:%S"
```


## 使用
```graphql/types/user_type.rb
Types::UserType = GraphQL::ObjectType.define do
  name "User"

  field :id, !types.ID
  field :name, !types.String
  field :created_at, Types::DateTimeType # ここ
  field :updated_at, Types::DateTimeType
  field :deleted_at, Types::DateTimeType
end
```

以上になります。
Graphiqlなどでクエリ実行して確認してみてください。
Jira Confluence Bitbucket の 配色パターン (ルックアンドフィール)

あんまり需要ないと思いますが、自分が困ったので、メモがてら。
開発環境と本番環境で色分けたいなー、なんて時にご利用下さい。
※素人配色＆考えです。

#Jira
Server 7.3.8
##基本的な考え方
1) ベースの色を決める
　　このページでは「緑」をベースとした場合で記載していきます。

2) パレットでRGBだけを調整して、ベースとした色味が一番強いものをチョイス
　　真ん中あたりのカラフルな縦のヤツで調整しました。（頭の悪い説明）
　　RGBが均等のものはそのままにしておきます。

3) たぶんそのままだと目が痛い配色のはずなので、パレット右下の「B」の値を調整。
　　良い感じに暗くできたらOK

Jiraのパレット
![パレット](https://qiita-image-store.s3.amazonaws.com/0/214587/65f29845-3614-d362-250f-8d98a82cdbe1.png)


##実際の配色
2色（明：`#289928`、暗：`#1A661A`）を中心に考える。
※単にこれ以上の複雑な配色パターンを考えられないだけとも言う
![Jiraの配色](https://qiita-image-store.s3.amazonaws.com/0/214587/3623ad94-77b1-98b1-b57d-97fe0da8bc15.png)

###本体
|対象|色|補足|
|:-----------------|:------------------|:------------------|
|ヘッダーの背景色|`#1A661A`|暗|
|ヘッダーの強調背景色|`#289928`|明|
|ヘッダーのセパレータの色|`#2d522d`|（実は未だにどこの色か分からん）|
|ヘッダーの文字の色|`#ffffff`|そのまま|
|ヘッダーの強調文字の色|`#f0f0f0`|そのまま|
|メニュー項目の強調背景色|`#289928`|明|
|メニュー項目の文字の色|`#ffffff`|そのまま|
|ボタンの背景色|`#289928`|明|
|ボタンの文字の色|`#ffffff`|そのまま|
|アクティブ リンクの色|`#2C802C`|アクティブリンクなのでリンクより少し明るめ|
|見出しの色|`#292929`|そのまま|
|リンクの色|`#1c4d1c`|リンクなのでなるべく見やすい落ち着いた色で|
※なんとなく明るさ的には以下な順序
明＞暗＞アクティブリンク＞リンク

###ガジェット
|対象|色|補足|
|:-----------------|:------------------|:------------------|
|色 1 (既定)|`#289928`|追加した色|
|色 2|`#3b73af`|元の規定の色。「色2」自体は変更前に緑系を担当。|

#Confluence
Server 6.1.4
##基本的な考え方
考え方は、Jiraと変わらない。
Jiraで配色決めていたらそれをそのままコピペすれば行ける。

##実際の配色
![Confluenceの配色](https://qiita-image-store.s3.amazonaws.com/0/214587/847fdc81-27d1-883b-5a91-7879e2cecca2.png)

|対象|色|補足|
|:-----------------|:------------------|:------------------|
|トップ バー　|`#1A661A`|暗|
|トップ バーの文字　|`#FFFFFF`|そのまま|
|ヘッダー ボタンの背景　|`#289928`|明|
|ヘッダー ボタンの文字　|`#FFFFFF`|そのまま|
|トップ バー メニュー選択時の背景　|`#289928`|明|
|トップ バー メニュー選択時の文字　|`#FFFFFF`|そのまま|
|トップ バー メニュー項目の文字　|`#2C802C`|Jiraのアクティブリンクに同じ|
|メニュー項目選択時の背景　|`#289928`|明|
|メニュー項目選択時の文字　|`#FFFFFF`|そのまま|
|検索フィールド背景　|`rgba(0, 0, 0, 0.2)`|そのまま|
|検索フィールド テキスト　|`#FFFFFF`|そのまま|
|ページ メニュー選択時の背景　|`#289928`|明|
|ページ メニュー項目の文字　|`#333333`|そのまま|
|見出しの文字　|`#333333`|そのまま|
|スペース名の文字　|`#999999`|そのまま|
|リンク　|`#2C802C`|Jiraのアクティブリンクに同じ|
|枠線と区切り線　|`#CCCCCC`|そのまま|
|タブ ナビゲーションの背景　|`#289928`|明|
|タブ ナビゲーションの文字　|`#FFFFFF`|そのまま|
|タブ ナビゲーションの背景の強調色　|`#289928`|明|
|タブ ナビゲーションの文字の強調色　|`#FFFFFF`|そのまま|

#Bitbucket
Server
##基本的な考え方
2色しか選べない。でも1色で統一しても割と行ける。
Jiraで配色決めていたらそれをそのままコピペすれば行ける。
（結局、暗の方を選ぶだけだった）

##実際の配色
![Bitbucketの配色](https://qiita-image-store.s3.amazonaws.com/0/214587/9210bbb4-b4fa-d5b7-29c5-a875b4617119.png)

|対象|色|補足|
|:-----------------|:------------------|:------------------|
|Header color　|`#1a661a`|暗|
|Accent color　|`#1a661a`|暗|


#最後に
この記事は、「この考え方良いよ！」とかではなく、「こう考えました」って記事です。
センスねー！って思われる方は、是非「俺はこうやったぜ！」ってのあげてくださいー。
（Atlassian製品関連の日本語記事少ないので困る。）

以上
ビットコインゴールド(BTG)を GPU マイニングする(2017 年 11 月 20 日時点)

冬到来!

漢なら GPU でレイトレーシングや機械学習しつつ, 空いた時間や夜間にマイニングして暖房代わりにしたいですね!

ビットコインからフォークし, 2017 年 11 月上旬くらいから始まった, GPU でマイニングできるビットコインゴールド(BTG)を試してみましょう.

https://bitcoingold.org/

2017 年 11 月 20 日時点では, BTG ブロックチェーンは安定して稼働しつつあるようです(ただし現時点では取引所での扱いは限定的で, まだまだこのまま安定して稼働していくかどうなるかは不明)

BTG は Equihash アルゴリズムを使っているので, 基本的には Zcash のマイニングプログラムを使うことができます(BTG 用にちょっと修正したものが必要?). NVIDIA(Pascal)が効率がよいです.

https://qiita.com/syoyo/items/259e2be55dcedd4cdbf2

## Wallet を選ぶ

とりあえずは Coinomi や Freewallet あたりとかで Wallet を作っておきます.

## プールを選ぶ

bitcoingold.org でいろいろ選べますが, 今回は http://btgpool.pro/ を使ってみます.

手順通りにマイニングプログラムを用意し Wallet のアドレスを指定すれば, そのままマイニングスタートです.


## 計算してみる.

http://calc.btgpool.pro/

GTX 1080 Ti は powertune すると 150W(nvidia-smi で表示される値) で 600 Sol/s 出ます(4.0 Sol/W)

600 Sol/s で, 2017 年 11 月 20 日時点では difficulty 2,886,681 で 0.0231 BTG($3.70) でした. 

## TODO

4.0 Sol/W くらい高効率にする設定だとあまり暖房効果が
PythonでISO8601(RFC3339)を扱う



## はじめに

APIでスタンダードな日付形式であるISO8601について、Pythonで扱うのに軽くはまったのでメモ。
ISO8601形式は様々な書き方ができますが、有名どころのAPIでは以下の2種類が多いと思います。

* UTC

    * 2016-12-31T20:02:05.123456Z

* APIのパラメータやサービスで設定したタイムゾーン

    * 2016-12-31T20:02:05.123456+0900

## 文字列 -> datetime

APIからJsonで戻ってきた文字列をPythonのdatetimeに変換します。常にJSTで統一しています。
datetimeはそのまま、>, < での比較ができ、timedeltaによる日付の計算ができるため、プログラム内では常にdatetimeで表現するのがよいかと思います。

```py
def iso_to_jstdt(iso_str):
    dt = None
    try:
        dt = datetime.strptime(iso_str, '%Y-%m-%dT%H:%M:%S.%fZ')
        dt = pytz.utc.localize(dt).astimezone(pytz.timezone("Asia/Tokyo"))
    except ValueError:
        try:
            dt = datetime.strptime(iso_str, '%Y-%m-%dT%H:%M:%S.%f%z')
            dt = dt.astimezone(pytz.timezone("Asia/Tokyo"))
        except ValueError:
            pass
    return dt
```

## datetime -> 表示用文字列

datetimeを画面なりに出力する文字列に変換します。
ここでは"/"区切りの日本風です。上記の関数でdatetimeにしてあれば日本時間で表示されます。

```py
def dt_to_str(dt):
    if dt is None:
        return ''
    return dt.strftime('%Y/%m/%d %H:%M:%S')
```

## datetime -> ISO文字列

次のプログラムとのI/Fなど、親システム的にするにはISO形式で出力しておくとよいでしょう。

```py
def dt_to_isostr(dt):
    if dt is None:
        return ''
    return dt.isoformat()
```

## example

上記変換処理の実行例です。
ここでは不正なフォーマットはNone,空文字で表現していますが、場合によっては最小の日付、最大の日付などで表現するという方法もありますね。

●サンプルプログラム

```py
print('test1----------------------------')
dt1 = iso_to_jstdt('2016-12-31T20:02:05.123456Z')
print(dt1)
print(dt_to_str(dt1))
print(dt_to_isostr(dt1))


print('test2----------------------------')
dt2 = iso_to_jstdt('2016-12-31T20:02:05.123456+0900')
print(dt2)
print(dt_to_str(dt2))
print(dt_to_isostr(dt2))

print('test3----------------------------')
dt3 = iso_to_jstdt('2016-12-31T20:02:05.123456-0300')
print(dt3)
print(dt_to_str(dt3))
print(dt_to_isostr(dt3))

print('test4----------------------------')
dt4 = iso_to_jstdt('2016/12/31T20:02:05.123456Z')
print(dt4)
print(dt_to_str(dt4))
print(dt_to_isostr(dt4))

print('--------------------------------')
```

●実行結果

```shell-session
test1----------------------------
2017-01-01 05:02:05.123456+09:00
2017/01/01 05:02:05
2017-01-01T05:02:05.123456+09:00
test2----------------------------
2016-12-31 20:02:05.123456+09:00
2016/12/31 20:02:05
2016-12-31T20:02:05.123456+09:00
test3----------------------------
2017-01-01 08:02:05.123456+09:00
2017/01/01 08:02:05
2017-01-01T08:02:05.123456+09:00
test4----------------------------
None


--------------------------------
```

## おわりに

Pythonに限らずですが、日付・時刻の扱いは面倒です。

終わりだよ～

## 参考

[8.1. datetime — 基本的な日付型および時間型 — Python 3.6.3 ドキュメント](https://docs.python.jp/3/library/datetime.html)
阿部寛のホームページで使われているカラーコード一覧

**[阿部寛のホームページ](http://abehiroshi.la.coocan.jp/)**が速いと話題になっていますが、デザインもなかなか洗練されています。
そんな阿部寛のホームページで使われているカラーコードの一覧をまとめてみました。

## メニュー部
### 背景
* `#F0F0FF`

### 文字
* `#FFCCCC`
* `#00FF00`
* `#33FFFF`
* `#0099FF`
* `#0000FF`
* `#333399`
* `#CC00CC`

## コンテンツ部
### 背景
* `#FFFFFF`

### 文字
* `#000000`
* `#FF0000`
iOS Safari特有の挙動でハマったところ

ガラケー時代ほどひどくはありませんが、モバイルブラウザは機種特有な挙動を、今でも避けることができません。それはiOSについても当てはまります。

ここでは3つほど挙げておきますが、他にもいろいろあるかと思います。

# バブリングしない、`click`

これはかなり有名な件で、すでに[Qiitaにも記事があります](https://qiita.com/38kun/items/ce6a26c9c59612e6f515)が、簡単に言うと、特定の条件を満たさない限り、`click`イベントが`<body>`やそれ以上（`window`、`document`）までバブリングしない、というものです。イベントが起きる条件としては、

* `<body>`の内側（`<body>`自身は除く）で、押された要素からバブリングしてくる要素に`click`イベントを仕掛けてある
* CSSの`cursor: pointer`がかかっている
* `<a>`や`<button>`など、インタラクティブな要素から`click`が発生した

という感じです。手抜きな対処法としては、`<body>`に`cursor: pointer`をかけてしまう、という手段があります（どうせiOSでカーソルは出ませんし）。

# 電話番号なのに、`<input type="tel">`が合わない

最近かなり増えた`<input>`の`type`ですが、電話番号用に`<input type="tel">`があります。モバイル機で正しく`type`をセットしておけば、状況に応じて適切なキーボードを選んでくれます。

…が、`<input type="tel">`で選ばれるiOS標準のキーボードは、以下のようなものです。

![tenkey_s.png](https://qiita-image-store.s3.amazonaws.com/0/60327/d317d72a-b479-8fa1-f31d-19d699760455.png)

隅っこに記号ボタンはありますが、ここにある記号も限られていて、とくに**ハイフンがありません**。ハイフンを入力させたい電話番号欄の場合、`<input type="tel">`が使えないという、妙なことになります（もちろん、大きなキーボードの出るiPadの場合や、標準とは違うキーボードの場合は問題ないかもしれません）。

# 止まらない、`invalid`（iOS 10.3で解消）

何かと便利な[バリデーション属性](https://qiita.com/jkr_2255/items/90816425d7863b731347)ですが、iOS 10.2以下では条件を満たしていなくても**送信が続いてしまいます**。止めるためには、`submit`でフォームの状態をチェックして、`preventDefault`するぐらいしか、手はありません。

# タップで反応しない、`<input type="range">`

スライダ入力になる`<input type="range">`ですが、iOSではスライダをドラッグしないと反応しなくて、目的地のタップはスルーしてしまいます。`onclick`などでイベントを拾って、自前で値を変更する必要があります。
nfcpy 0.13.4でNFCのIDを読む

#Raspberry Pi 3でNFCのタグが読みたい
ということで、nfcpyをインストールしました。その他必要事項はググれば色々出るとおもいます。
0.10で大きな改変があったようですが、webに乗っている比較的新し目のコードを0.13で実行してもエラーになるので、ソースコード読んだりしながら試行錯誤した結果が下記のコードです。
結局、ぐぐると出て来るコードのIDmやUIDをidentifierに変えると動きました。

#環境
Raspberry Pi 3 + RC-S380

#コード

```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import nfc
import binascii

def on_connect(tag):
	print tag
	print tag.type
	print binascii.hexlify(tag.identifier).upper()

def main():
	with nfc.ContactlessFrontend('usb') as clf:
		clf.connect(rdwr={'on-connect': on_connect})

if __name__ == '__main__':
	main()
```

#結果
Xperia X Performance SOV33を読ませてみました。

```
Type4ATag MIU=255 FWT=0.038664
Type4Tag
08xxxxxx
```


#~~SOS~~
~~Type3は毎回同じIDをはくのですが、Type4Aは毎回違うIDが出てきてIDの意味がないという状態です。~~
~~nfcpyだとこれ以上できそうにないんですが、解決策ご存じの方ご教示ください。~~

#解決策
Type4に対する根本的な解決策ではないのですが、targetsで212Fと424Fを指定することによりType 3のFelicaの読み込みに限定できました。
212F,424Fは212Hz, 424HzのFelica用のプロトコルといったところでしょうか？

```python
import nfc, nfc.clf
import binascii

def on_connect(tag):
	print tag
	print tag.type
	print binascii.hexlify(tag.identifier).upper()

def main():
	clf = nfc.ContactlessFrontend("usb")
	
	rdwr_options = {
		'targets': ['212F' , '424F'], #Felicaに限定
		'on-connect': on_connect,
	}
	
	clf.connect(rdwr=rdwr_options)


if __name__ == '__main__':
	main()
```
#その結果

```
Type3Tag 'FeliCa Mobile 3.0' ID=0134XXXXXXXXXXXX PMM=0114XXXXXXXXXXXX SYS=FE00
Type3Tag
0134XXXXXXXXXXXX
```
ちょっとずつ読むドメイン駆動設計 第三部 より深い洞察へ向かうリファクタリング 第十章 しなやかな設計 序章

結構重い風邪でしばらく読めてませんでしたが、再開です^^

# しなやかな設計

[第三部の序章](https://qiita.com/YasuhiroKimesawa/items/eb29387171d583144abc#%E6%B7%B1%E3%81%84%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%97%E3%81%AA%E3%82%84%E3%81%8B%E3%81%AA%E8%A8%AD%E8%A8%88)にて、変更可能な、しなやかな設計が第三部のテーマである「深いモデル」を支えていると読んできました。

もう少し詳しくどういうことか読んでいきます。

## リファクタリングが止まる時

どんな悪いコードでもリファクタリングができるというのは幻想で、実際にはもともと設計が優れたものでないと、リファクタリングすることは困難です。

処理の中に暗黙的に含まれているものを完全に予測する自信がないと、ソースをリファクタリングすることを避け、重複したコードを書き出します。
また、設計が一枚岩になっていても、再利用できずに重複したコードを書き出します。がっつり経験ありますね。。。
こうして、リファクタリングとイテレーションによる改良が止まってしまうのですね。

そもそも、変更やリファクタリングがしやすい設計。それが、**しなやかな設計**です。

## イテレーションとより深い洞察へ向かうリファクタリング

序章で読んだように、深いモデルは**しなやかな設計**が支えています。なので**しなやかな設計**は第三部のテーマである、「より深い洞察へ向かうリファクタリング」の肝になりますね。

第九章で読んできた、[暗黙的な概念を明示的に](https://qiita.com/YasuhiroKimesawa/items/809ac929026daef0b768)したものは、まだ、変更しやすい設計にはなっておらず、「イテレーション」のサイクルを通じて育っていき、その結果として「実際に使えるモデル」になっていきます。それを支えていくのが**しなやかな設計**ということですね。

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/150455/5d239fd7-d0ff-81f1-ce0c-dca79450af52.png)

## そうは言っても・・・

設計の初期バージョンは、納期や予算の関係もあり、しなやかになっていないことが多いはず。

そうなると、そもそもリファクタリングできない状態で、アプリケーションが育っていかないような気がします。

初期バージョンからすべてのコードがしなやかな設計にすることは不可能です。
そこで、設計の初期バージョンから、**最も重大で難解な部分、複雑な部分**を特に選択してしなやかな設計にしておくことをします。

そうすることで、初期バージョンからイテレーションを始められ、より深い洞察へ向かうリファクタリングへ進めることができるはずです。

明日からは具体的にどうすればしなやかな設計にすることができるのかを読んでいきます。
Pythonや機械学習が学べるオンラインサービス

# Pythonや機械学習が学べるオンラインサービス

ちょうど約1年前に
[プログラミング言語Pythonや人工知能技術（機械学習・深層学習）が学べるスクール・サービス (無料・有料）](https://qiita.com/Hawk84/items/991f38d9da9b51acce59)
といった投稿をしましたが、あれから1年ほどたったので今回はオンライン上でPythonや機械学習が学べるサービスをまとめてみました。
オンライン系のサービスはほとんど増えていないみたいですが、スクール系はかなり増えた印象です(^^;)
では今回はオンラインでPythonや機械学習が学べるサービス5つを紹介いたします。

### 1. PyQ https://pyq.jp/

Pythonと機械学習が学べるようです。
また、ライト、スタンダード、メンター、プレミアムと4種類あるみたいです。
ライトが月に2,980円で利用できます。
スタンダードは7980円、メンターは29,800円、プレミアムは98,000円。
また、オンライン上でプログラミングできるみたいで、環境構築しなくてもWeb上でPython・機械学習が学べるのは便利ですね。
環境構築は初心者には大変ですので。。

詳細は下記リンク参考にしてみてください。
https://pyq.jp/pricing/

### 2. AI Academy http://aiacademy.jp

LightプランとBasicプランの2種類あるみたいです。
Lightが980円で、Basicが7,980円とのことです。
PyQが一番安いと思っていましたが、月1000円で利用できるのはちょっと検討しようかと思いました。
また、サイトみた感じ、Pythonと機械学習意外にも、
Deep Learningのコンテンツもあるようで、テキストコンテンツも50種類以上もあるとのことです。（すごい。。）

詳細は下記リンク参考にしてみてください。
http://aiacademy.jp

### 3. プロゲート http://prog-8.com

こちらはPythonや機械学習に限らず、たくさんのプログラミング言語が学べます。
なんといっても見た目がよく、スライドも豊富でわかりやすいです。
で、学べる内容はPythonになります。
Pythonは5種類（Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ）あり、Pythonについて〜クラスまで説明されています。
基本無料のようですが、一部から有料(980円)とのことです。

詳細は下記リンク参考にしてみてください。
https://prog-8.com/plans/for_users

### 4. Udemy https://www.udemy.com/
Udemyは動画コンテンツがメインのサービスです。
Pythonや機械学習系のコンテンツだけでなく、いろいろな動画コンテンツを買切れば、
動画視聴ができます。
私もいろいろと買っていますが、基本1万〜2万ですが、
セールの時もあり、その場合1つ1200円〜２０００円で販売されることも多いです。
一度コンテンツを探してみてはいかがでしょうか？

詳細は下記リンク参考にしてみてください。
https://www.udemy.com/

### 5. ドットインストール https://dotinstall.com/
ドットインストールもプロゲートのようにたくさんのプログラミング言語が学べます。
Pythonはありますが、機械学習系はないみたいです。
プロゲートとドットインストールの違いはスライド形式ではなく、1つ1つのコンテンツが動画です。
また、1つ1つが3分に収まっていることが特徴です。
無料で見れるものもありますが、プレミアム(980円)だと、プレミアム限定の動画も見れるようです。

詳細は下記リンク参考にしてみてください。
https://dotinstall.com/premium

# まとめ

今回はオンラインに特化しました。
次回は、オフライン（セミナー含む）形式で機械学習が学べるサービスも投稿しようと思います。
また、個人的には、「PyQ」か「AI Academy」のどちらか利用してみようと思いました。
実務では、機械学習を使う機会はなさそうですが、どれも1000円あれば学べるので、全然アリかなと思います。
react-bootstrap-tableでSort Indicatorが表示されないなど

現状、最新のreact-bootstrap-table(v4系統)で、Sort Indicator(画像のソート矢印)が表示されない場合など、何か挙動がおかしい時は、以下の様に**version**というpropsに**4**を渡してみると治る可能性があります。

![スクリーンショット 2017-11-20 12.41.25.png](https://qiita-image-store.s3.amazonaws.com/0/159013/e0b21850-4fcd-a241-24d2-fab8fa212cff.png)

```html
<BootstrapTable
  ref='table'
  data={datas}
  version="4"
>
  <TableHeaderColumn
    dataField='id'
  >id</TableHeaderColumn>
  ...
  <TableHeaderColumn
    dataField='price'
   >Price</TableHeaderColumn>
</BootstrapTable>
```
aws-sdkでAWS IoTの証明書を全件取得

# はじめに

AWS IoTではモノと証明書を手軽に作ってアクセスコントロールできる。
管理する時にはSDKからモノや証明書の一覧を取得できるけれど、1リクエストで取得できる件数に制限(Max:250)があるし、RateLimitもあるので全件取得する時に詰まった。
メモとして証明書を全件取得するScriptを紹介する。

# 実装

```js
'use strict'

const aws = require('aws-sdk');

// AWS アカウント設定
// export ACCESS_KEY="<your access key>"
// export SECRET_ACCESS_KEY="<your secret access key>"
// export REGION="<your region>"
aws.config.update({
    accessKeyId: process.env.ACCESS_KEY,
    secretAccessKey: process.env.SECRET_ACCESS_KEY,
    region: process.env.REGION
});
const iot = new aws.Iot();

// 定数
const MAX_PAGE_SIZE = 250;
const ERROR_CODE_RATE_LIMIT = 'ThrottlingException';
const MS_INTERVAL = 10;

// listCertificatesのパラメータ
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Iot.html#listCertificates-property
const listCertsParams = {
    ascendingOrder: false,
    marker: null,
    pageSize: MAX_PAGE_SIZE
};

/**
 * 証明書を全件取得
 * @param {Object} params 
 * @param {Array<map>} result 
 */
function listCertsPromise(params, result) {
    return new Promise((resolve, reject) => {
        iot.listCertificates(params, (err, data) => {
            if (err !== null) {
                if (err.code === ERROR_CODE_RATE_LIMIT) {
                    // RateLimitの場合は待つ
                    waitPromise(MS_INTERVAL).then(() => {
                        listCertsPromise(params, result)
                            .then(resolve)
                            .catch(reject);
                    });
                } else {
                    reject(err);                    
                }
            } else {
                result = result.concat(data.certificates);
                if (data.nextMarker === null) {
                    resolve(result);
                } else {
                    // nextMarkerがnullじゃなければ再帰呼び出し
                    params.marker = data.nextMarker;
                    listCertsPromise(params, result)
                        .then(resolve)
                        .catch(reject);
                }
            }
        })
    });
}

/**
 * 待つPromise
 * @param {number} ms milliseconds 
 */
function waitPromise(ms) {
    return new Promise((resolve) => {
        setTimeout(resolve, ms);            
    });
}

function main() {
    listCertsPromise(listCertsParams, new Array())
        .then(data => {
            console.log(JSON.stringify(data));
        }).catch((err) => {
            console.error(err);
        });
}

main();
```
git push 時の　error: failed to push some refs to

# 経緯
過去にgithubにpushしたbranchで、　　masterが更新されたため`git rebase` を行った後に再度remoteのgithubにpushしようとしたらこのエラーがでてしまいました。

```
$ git push origin branch-name
To github:team_repository/repository_name.git
 ! [rejected]        branch_name -> branch_name (non-fast-forward)
error: failed to push some refs to 'github:team_repository/repository_name.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
```

# 原因
過去に一度remoteにpushした場所との整合性がとれずerrorがでてしまったらしいです。

# 解決法
この解決法は現在のローカルブランチが100%正しい場合のみになるのですが、

```
git push origin :branch-name
git push origin branch-name
```

で直ります。

`git push origin :branch-name` 
はremoteのブランチを一旦deleteするという意味です。
一旦過去の大昔にpushしていたブランチを排除し、新しいブランチとしてまた作り直すということですね！


### twitterもフォローよろしくおねがいします。 ！
https://twitter.com/yoshixj
Laravel:$loopによるループ変数の使用例

#繰り返し専用のループ変数($loop)

\$loopという繰り返しディレクティブの変数が用意されているので条件識別と連動させて処理する


```
//最初の繰り返しかどうか
$loop->first

//最後の繰り返しかどうか
$loop->last

//現在の繰り返し数（1から開始）
$loop->iteration

//あと何回繰り返すか(残り回数)
$loop->remaining

//繰り返しで使っている配列の要素数
$loop->count

//繰り返しのネスト数
$loop->depth

//ネストしている場合、親の繰り返しのループ変数を示す
$loop->depth

```

##使用例
\$dataの数だけデータをリスト形式で表示するコード
ループ内でも初めのループ・最後のループを検知して、その時のみ文字を出力している

```resources/views/hello/index.blade.php
<html>
<head>
    <title>Request&Response</title>
    <style>
        body {
            font-size:16pt;
            color:#999;
        }
        h1 {
            font-size:100pt;
            text-align: right;
            color:#eee;
            margin:-40px 0 -50px 0;
        }
    </style>
</head>
<body>
    <h1>Blade/Index</h1>
    <p>foreachディレクティブの例</p>
        @foreach($data as $item)
            //最初の繰り返しかどうか
            @if($loop->first)
            <p>※データ一覧</p><ul>
            @endif
            //現在の繰り返し数（1から開始）
            <li>NO,{{$loop->iteration}}.{{$item}}</li>
            //最後の繰り返しかどうか
            @if($loop->last)
            </ul><p>ここまで</p>
                @endif
        @endforeach

</body>
</html>
```

```app/Http/Controllers/HelloController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;


class HelloController extends Controller
{
    public function index() {
        $data = ['one','two','three','four','five'];
        return view('hello.index',['data'=>$data]);
    }
}
```
Laravel::RequestとResponse の表示


#条件

use文で下記の2行を追加し、　読み込むアクションの引数を指定する必要がある

```
(Request $request,Response $response)
```

```
use Illuminate\Http\Request;
use Illuminate\Http\Response;
```

```
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;


class HelloController extends Controller
{
    public function index(Request $request,Response $response) {

$html = <<<EOF
        <html>
        <head>
        <title>Request&Response</title>
        <style>
        body {
            font-size:16pt;
            color:#999;
        }
        h1 {
            font-size:100pt;
            text-align: right;
            color:#eee;
            margin:-40px 0 -50px 0;
        }
        </style>
        </head>
        <body>
            <h1>Hello</h1>
            <h3>Request</h3>
            <pre>{$request}</pre>
            <h3>Response</h3>
            <pre>{$response}</pre>
            <h3>アクセスしたURLを表示 url()</h3>
            <pre>{$request->url()}</pre>
            <h3>アクセスしたURLをすべて表示する fullUrl()</h3>
            <pre>{$request->fullUrl()}</pre>
            <h3>ドメイン下のパス部分だけを返す path()</h3>
            <pre>{$request->path()}</pre>
        </body>
        </html>
EOF;
        $response->setContent($html);
        return $response;
    }
}
```
Google公認プロフェッショナル - クラウドアーキテクトを受けてみた

Google公認プロフェッショナル - クラウドアーキテクトを受けてきました。
取得を考えている方の参考になれば幸いです。

# 試験概要
https://cloud.google.com/certification/cloud-architect?hl=ja

- 時間：120分
- 問題数：50問

# 事前準備
- 入門書に書いてあるチュートリアルを実践する
    - [プログラマのためのGoogle Cloud Platform入門](https://www.amazon.co.jp/プログラマのためのGoogle-Cloud-Platform入門-サービスの全体像からクラウドネイティブアプリケーション構築まで-阿佐/dp/4798137146)
- 公式ドキュメントを読んで、いくつかのチュートリアルを実践する
    - [Google Cloud Platform のドキュメント](https://cloud.google.com/docs/?hl=ja)

# 結果
幸い合格でした。

AWSの試験等とは異なり、スコアは表示されません。落ちた時のことを考えると少し不便ですね。

# 受験者のスペック
参考になるかわかりませんが。。。

- AWS歴：３年８ヶ月
- GCPは未経験(チュートリアル程度)
- クラウド関連の保有資格
    - AWS: アソシエイト×３＋プロフェッショナル×２＋Big Data
    - Azure: MCSA Cloud Platform(532+533)
    - IBM: IBM Certified Application Developer - Cloud Platform v1
- 外観：メガネぼーず

# 内容について
一言でいうと
　「GCP色が薄く、クラウドの一般常識が問われる」
ような内容でした。
ここまで、ベンダー色の薄いベンダー試験も珍しいと感じました。
Googleさんは、
「仕様のこまけーことはドキュメントよめゃいいんだよ」と言いたいのか、もしくは
「GCPこそクラウドの標準である」と言いたいのか。。。

一応、GCPのサービス名は試験に出てくるのですが、各サービスの基本的な概念をさえ抑えておけば解ける問題が多かったです。但し、当然サービスの仕様を理解していないと解けない問題もあるので、ドキュメントはよく読んでおいた方が良いと思います。

# 難易度について
AWSのアソシエイトと同じかちょっと簡単な位に感じました。

# 感想
なんか拍子抜けしたというか。。。
次は、Google公認プロフェッショナル - データエンジニアにチャレンジする予定。

# 追記

- 合格すると「フード付きトレーナー」が送られてきます。(追記：2/13に届きました。そこそこ時間がかかるようなので気長に待ちましょう。)
- こんなところにブロックチェーンが。。。*「資格はブロックチェーンで安全になっています」*

(2019.11.19) 更新時も、プレゼント(フーディーかバッグ)がもらえました。
TensorFlowで画像整形

## Introduction
Tensor Flowで畳み込みたい
だけど画像のサイズを整形するのが面倒っていうことがよくありました

自分はこれまではSonyの![Neural Network Console](https://dl.sony.com/ja/)を使いバラバラな縦横比をPaddingさせて，縮小させるということをしていました
これもこれで良かったのですが不都合もあったので![こちらの記事](https://qiita.com/Hironsan/items/d2a6364221c588867a60)を参考にTensor Flowで画像を整形しました

## Requirements

 - TensoFlow (1.5.0以上)

Tensor Flow のEager Excursionを使いました
サイズが整っていないTensorを扱うのは面倒が多そうでしたので…
`pip install tf-nightly`または`pip install tf-nightly-gpu`で使えるようになります
nightly buildで動作が不安定なので仮想環境での利用をおすすめします
自分はTensor Boardが動かなくなりました

## Code

実行ファイルと同じディレクトリに置かれているoriginalフォルダ以下に変換したい画像を配置
copyファイル以下に整形した画像を置いていきます
`new_width`と`new_height`をいじれば縦横比は自在です

```python
import tensorflow as tf

def reshape(image):
    """
    Making gotten images regular size.
    Arg:
        image: 3-D Tensor
        
    Return:
        reshaped: reshaped images
    """
    max_size = size_decision(image)
    new_height = 640
    new_width = 640
    
    reshaped = tf.image.resize_images(tf.image.resize_image_with_crop_or_pad(image, max_size, max_size),[new_height, new_width])
    return reshaped

def size_decision(image):
    """
    Helper function.
    Returning longer edge size.
  
    Arg:
        image: 3-D Tensor
    Return:
        size: longer edge size
    """
    return tf.reduce_max(tf.shape(image))
```
## Run


自分のやり方だと実行部では`tfe.enableeager_execution()`する必要がありました
形の違うNumpy配列を簡単にTensorに変換することは難しかったので，逐次処理しています
バッチ処理したほうがかっこいいと思うので，良い方法があれば教えてください…！
以下で多分動きます

```python
if __name__=='__main__':
    import os
    import cv2
    import numpy as np
    import tensorflow.contrib.eager as tfe  # Version 1.5.0 or higher
    tfe.enable_eager_execution()
    DIRECTORY = './copy'
        
    image_names = [x for x in os.listdir('original')]
    
    for x in image_names:
        img = reshape(tf.constant(np.asarray(cv2.imread('original/'+x)))).numpy()
        print(cv2.imwrite(DIRECTORY+'/'+x, img))  # show T or F

```
4.3.4　多クラスロジスティック回帰

## 目次
######4, ラプラス近似

###4, ラプラス近似
ラプラス近似というフレームワークの紹介する。
まず連続な１変数$z$の場合を考え、以下の式で定義される分布$p(z)$を仮定する。

$$p(z)=\frac{1}{Z}f(z). ...(4.125)$$

ここで,$Z=\int f(z)dz$は正規化係数である。Zの値は未知であると仮定する。ラプラス法の目的は、分布$p(z)$のモードを中心とするガウス分布による近似を見つけることである。まず$p(z)$のモードを見つける。言い換えれば、$p'(z_0) = 0$、または、等価な
$$\frac{df(z)}{dz}|z=z_0 　= 0$$
を満たす$z_0$を見つけることである。
ガウス分布は、その対数が変数の２次関数であるという特性を持っている。そこで、モード$z_0$を中心とした$lnf(z)$のテイラー展開を考える
$$lnf(z)\simeq lnf(z_0)- \frac{1}{2}A(z - z_0)^2 ....(4.127) $$
ここで
$$A= - \frac{d^2}{dz^2}lnf(z)|z=z_0$$
である。$z_0$が分布の局所最大値であるので、テイラー展開の１次項は現れないことに注意されたい。
このテイラー展開の指数を取ると
$$f(z)\simeq lnf(z_0)exp(-\frac{A}{2}(z-z_0)^2)  ... (4.129)$$
を得る。ガウス分布の正規化のための標準的な結果を利用すると、正規化分布$q(z)$を得ることができ、
$$q(z)=(\frac{A}{2\pi})^{\frac{1}{2}}exp(-\frac{A}{2}(z-z_0)^2) ...(4.130)$$
となる。



$$lnf(z)\simeq lnf(z_0)- \frac{1}{2}(z-z_0)^TA(z-z_0)  ... (4.131)$$
となる。ここでM×Mのヘッセ行列A
$$A = - \nabla\nabla lnf(z)|z=z_0 ...(4.132)$$
で定義され、$\nabla$は勾配オペレーターである。両辺の指数を取ると
$$f(z)\simeq f(z_0)exp(-\frac{1}{2}(z-z_0)^T) ... (4.133)$$
が得られる。分布$q(z)$は$f(z)$に比例しており、正規化された多変量ガウス分布に対する、標準的な結果(2.43)を使うことによって、適切な正規化係数を決めることができ、

```math

q(z) = \frac{|A|^{\frac{1}{2}}}{(2\pi)^{\frac{M}{2}}}exp(-\frac{1}{2}(z-z_0)^T(z-z_0)) = N(z|z_0,A^{-1})  ...(4.134)

```

となる。ここで|A|はAの行列式を表す。Aで表せる精度行列が正定値行列である。であり、すなわち、定常点$z_0$局所最大であって、局所最小または鞍点でない場合には、このガウス分布が適切に定義される。
ラプラス近似を適用するには、まずはモード$z_0$を見つける必要があり、そのモードでヘッセ行列を評価する必要がある。実際には、一般的にモードは何らかの数値最適解アルゴリズムで求めることができる。
CSS Grid Layout と仲良くしたい

# なんで仲良くしたいの

先日参加した[CSS Nite LP54「Coder's High 2017」](http://cssnite.jp/lp/lp54/)にて
[鹿野 壮](https://qiita.com/tonkotsuboy_com)さんより「CSS Grid Layout」のお話を聞いたので。
ちょっと色々試してみたいと思いました:grinning:

# CSS Grid Layoutって何なの

CSS Niteで聞いたことのおさらいになるのですが、、

- 懐かしのテーブルレイアウトに近い（セルをくっつけたりできる）
- 複数行のレイアウトに向いている（Flexboxは複数行に弱い...）
- レイアウトのために無駄な入れ子が増えない

などなど。
以前はグリッドで隙間なくコンテンツを埋めようとすると
どうしてもJavascriptに頼りがちでしたが、
これからはきちんとGrid使ってみよう:point_up:

# 各ブラウザの対応状況

2017年11月現在、主要ブラウザ最新版でサポートしてくれています。
[Can I use | CSS Grid Layout](https://caniuse.com/#feat=css-grid)
新しいものなので、古いブラウザはサポート外です。
※IE11は2025年まで生きるのか...:smiling_imp:

# HTMLの構造
`display: grid;`を指定する要素（グリッドコンテナと呼ぶ）を用意して
その直下に子要素（グリッドアイテムと呼ぶ）を置いておきます。

```html:ソースコードはシンプルな構造
<div id="container">
	<div id="itemA">A</div>
	<div id="itemB">B</div>
	<div id="itemC">C</div>
	<div id="itemD">D</div>
	<div id="itemE">E</div>
</div>
```
# CSSの構造
次にgridの設定をCSSで行います。

```css:グリッドコンテナの設定
#container {
	display: grid;
	grid-template-rows: 200px 150px;
	grid-template-columns: 33% 33% 1fr;
	grid-gap: 10px;
}
```

これはid「container」の要素に対して

- `display: grid;`・・・グリッドレイアウト使う宣言
- `grid-template-rows: 200px 150px;`・・・１行目の高さ200px、２行目は150px
- `grid-template-columns: 33% 33% 1fr;`・・・左から列の幅を指定。（frは残りの幅を埋める）
- `grid-gap: 10px;`・・・設置するグリッドアイテムの間隔

というように設定しています。
子要素となるグリッドアイテムの設定はというと、

```css:グリッドアイテムの設定
#container div {
	padding: 1em;
	border-radius: 5px;
	font-weight: bold;
	color: #FFF;
}
#itemA {
	background: #FFBC42;
	grid-row: 1 / 3;
	grid-column: 1 / 2;
}
#itemB {
	background: #D81159;
}
#itemC {
	background: #8F2D56;
}
#itemD {
	background: #8F2D56;
}
#itemE {
	background: #D81159;
}
```
このように角丸や背景色を変えただけなのですが
↑注目すべきは`#itemA`のところです。
`grid-row`は列を、`grid-column`は行を跨いだエリアの設定ができます。
![grid_sample2.jpg](https://qiita-image-store.s3.amazonaws.com/0/184921/fb8daf1d-44b9-474f-3240-3f4d709b7367.jpeg)
この場合、黄色の「A」といエリアは横の線（row）①～③に接していて、かつ、
縦の線（column）が①～②と接するサイズでグリッドアイテムを作るということになります。

## Gridを解除したい時
コンテナを`display: block;`に戻す。
※`grid-gap`もなくなるので、marginは適宜調整します。

```css:
@media screen and (max-width:768px){
	#container {
		display: block;
	}
	#container div {
		margin-bottom: 10px;
	}
}
```

# 作ったサンプル（CodePen）
<p data-height="550" data-theme-id="0" data-slug-hash="YEEaWo" data-default-tab="css,result" data-user="tricolorebox" data-embed-version="2" data-pen-title="CSS Grid Layout" class="codepen">See the Pen <a href="https://codepen.io/tricolorebox/pen/YEEaWo/">CSS Grid Layout</a> by tricolorebox (<a href="https://codepen.io/tricolorebox">@tricolorebox</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://production-assets.codepen.io/assets/embed/ei.js"></script>

# 今後はFlexboxともうまく付き合ってゆきたい
LP54にて[鹿野 壮](https://qiita.com/tonkotsuboy_com)さんはGridとFlexbox双方のいいところ、
悪いところをわかりやすく説明してくださいました。
これからは適材適所でお仕事にも取り入れていきたいなと思います:sparkles::sparkles:

# 参考サイト
[CSS Grid Layout を極める！（基礎編）](https://qiita.com/kura07/items/e633b35e33e43240d363)
[CSS Grid Layout - CSS | MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout)

以上。
※ざっくりまとめたので、後で書き足すかも...
色分けされた散布図をGoogleスプレッドシートでサラッと描きたい

##  はじめに
### この記事について
スプレッドシートのHowTo記事です。
「何かをカテゴリわけして、色分けした散布図でカラフルに表示したい」ときに使うグラフの作り方を説明します。
ググってもやり方が出てこなかったため、ここにメモがてら記載しておきます。
### 完成図
![_4.png](https://qiita-image-store.s3.amazonaws.com/0/207239/373f2a96-b587-ece6-9ac0-9a88c65655ee.png)

今回は検索ワードをカテゴリわけして、横に表示順位、縦にCTRを置いた散布図を作ってみます。
## 作業
### ①ローデータをエクスポート
今回はSearch Analytics For Sheetsを使ってSearchConsoleのデータをエクスポートしましょう。
ここでは後から使うつもりでGroupBy句にQuery（検索ワード）とPage（ランディングページ）を入れています。
エクスポートされた結果はこんな感じになるでしょうか。
![_7.jpg](https://qiita-image-store.s3.amazonaws.com/0/207239/1575a6ad-038c-cda7-6009-81bebdbbe341.jpeg)


### （ここはまとめ方に応じます、飛ばしていただいて結構です）
検索ワードをグルーピングするため、ワードを目視でチェックして分類しました。今回はCT数上位100ワードに分類を振ったとします。
あまりにも数が多い場合はランディングページの第一階層を分類として利用するとかでもよいと思います。
![_8.jpg](https://qiita-image-store.s3.amazonaws.com/0/207239/146fbe05-14f2-afff-c217-fcf41f84661a.jpeg)



### ②ピボットテーブルでデータを整列
ピボットテーブルを開き、行ラベルに「Position（検索順位）」、列ラベルに「ワード分類」、値に「CTR」を入れてみます。
行・列ともに「合計を表示」のチェックを外すようにしてください。
※追記：今回値にCTRをAVERAGEで入れてしまいましたが、加重平均しないと厳密な結果ではないですね。素直にSUMできるものを例に使うべきでした。
![_5.png](https://qiita-image-store.s3.amazonaws.com/0/207239/83ea64bc-9859-5c8b-350b-6cdc2e1a8e15.png)

データが、こんな感じに整列されたでしょうか（ぼかしの奥には%に丸めていない少数が並んでいます。）
![_10.jpg](https://qiita-image-store.s3.amazonaws.com/0/207239/968de277-048a-1e07-1874-2a94943f2567.jpeg)


### ③あとはグラフを挿入するだけ
②で整列されたデータ全てを選択して、挿入>グラフをクリックして下さい。
始め棒グラフが出るかと思いますが、グラフエディタのデータ>グラフの種類で「散布図」を選択します。
すると、こんなカラフルな散布図が出来上がります。
![_4.png](https://qiita-image-store.s3.amazonaws.com/0/207239/033a626d-a488-19f5-dfa5-b67b41ad569c.png)

今回はダミーデータのためまったく傾向は出ていません。
実務において、こんなグラフと一緒に「ブランドワードはCTRが高いですがビッグワードは検索上位でもCTRが低いです！Organic流入を増やすために、ビッグワードのLPになっているページのTDKを見直しましょう！」とかビシっと言えると、それっぽい感じがします。


## おわりに
### やっぱりスプレッドシートはすごかった
ちょっとややこしいグラフはエクセルでしか作れないのかと思っていましたが、スプレッドシートでも作れるようです。
データ抽出や集計、操作に関してはスプレッドシートの方が長けていると思いますので、今後も細かいデータはできるだけスプレッドシートで扱い、サラッとグラフにまとめていこうと思います。
NCL > fileIO > ファイル読込 > dates_file = asciiread("input.tbl",-1,"string")

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

NCL(NCAR Command Language)関連。

.nclファイルにおいて日付の文字列を扱う部分を変更しつつスクリプトを使ってきた。
変更の作業が多くなってきたので、ファイルから読込むようにしてみる。

```readfile_171120.ncl
; case 1
 dates_tbl = (/\
 "20171006","20171007","20171008","20171009","20171010",\
 "20171011","20171012","20171013","20171014","20171015",\
 "20171016","20171017","20171018","20171019","20171020",\
 "20171021","20171022","20171023","20171024","20171025",\
 "20171026","20171027","20171028","20171029","20171030",\
 "20171031"\
   /)

print(dates_tbl)

; case 2
dates_file = asciiread("input.tbl",-1,"string")
print(dates_file)
```

データファイル

```input.tbl
20171006
20171007
20171008
20171009
20171010
20171011
20171012
20171013
20171014
20171015
20171016
20171017
20171018
20171019
20171020
20171021
20171022
20171023
20171024
20171025
20171026
20171027
20171028
20171029
20171030
20171031
```

### 実行

```bash
$ncl readfile_171120.ncl
 Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.


Variable: dates_tbl
Type: string
Total Size: 208 bytes
            26 values
Number of Dimensions: 1
Dimensions and sizes:	[26]
Coordinates: 
(0)	20171006
(1)	20171007
(2)	20171008
(3)	20171009
(4)	20171010
(5)	20171011
(6)	20171012
(7)	20171013
(8)	20171014
(9)	20171015
(10)	20171016
(11)	20171017
(12)	20171018
(13)	20171019
(14)	20171020
(15)	20171021
(16)	20171022
(17)	20171023
(18)	20171024
(19)	20171025
(20)	20171026
(21)	20171027
(22)	20171028
(23)	20171029
(24)	20171030
(25)	20171031


Variable: dates_file
Type: string
Total Size: 208 bytes
            26 values
Number of Dimensions: 1
Dimensions and sizes:	[26]
Coordinates: 
Number Of Attributes: 1
  _FillValue :	missing
(0)	20171006
(1)	20171007
(2)	20171008
(3)	20171009
(4)	20171010
(5)	20171011
(6)	20171012
(7)	20171013
(8)	20171014
(9)	20171015
(10)	20171016
(11)	20171017
(12)	20171018
(13)	20171019
(14)	20171020
(15)	20171021
(16)	20171022
(17)	20171023
(18)	20171024
(19)	20171025
(20)	20171026
(21)	20171027
(22)	20171028
(23)	20171029
(24)	20171030
(25)	20171031
```

読込むファイルはbashかPythonで作るようにすればNCLを覚えておかないで済む。

### リンク

ファイル読込み例
https://www.ncl.ucar.edu/Applications/read_ascii.shtml#asc1
[MySQL]スロークエリログの出力設定

毎回ググってしまうので・・・

## スロークエリとしての判定時間を設定

```
mysql> SHOW GLOBAL VARIABLES LIKE '%query_time%' ;
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.24 sec)

mysql> SET GLOBAL long_query_time = 0.5 ;
Query OK, 0 rows affected (0.25 sec)

mysql> SHOW GLOBAL VARIABLES LIKE '%query_time%' ;
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.500000 |
+-----------------+----------+
1 row in set (0.00 sec)
```

## ログ出力するように

```

mysql> SHOW GLOBAL VARIABLES LIKE '%slow_query%' ;
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log      | OFF                            |
| slow_query_log_file | /var/lib/mysql/hoge-slow.log |
+---------------------+--------------------------------+
2 rows in set (0.00 sec)

mysql>  SET GLOBAL slow_query_log = 'ON' ;
Query OK, 0 rows affected (0.26 sec)


mysql> FLUSH LOGS ;
Query OK, 0 rows affected (0.10 sec)

mysql> SHOW GLOBAL VARIABLES LIKE '%slow_query%' ;
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log      | ON                             |
| slow_query_log_file | /var/lib/mysql/hoge-slow.log |
+---------------------+--------------------------------+
2 rows in set (0.00 sec)


mysql> FLUSH LOGS ;
```
(多分)iTunes12.7以降でipaファイルを無理やりインストールするにはドラッグアンドドロップするようになったがiOSのバージョンが古いとそれさえできないのではないか?

# タイトルでぜんぶゆった

- できる端末とできない端末の差がそれぐらいしか思いつかない。(できた→11.1.2/できんかった→11.0.3)
- もしそうだとしたら古いバージョンでの事前検証ができないのでこまる。

# 祈り

- 勘違いであることを祈る。
- 解決法があることを祈る。
cocos2d-js(v3.x)で背景を透明にする方法(HTML5版のみ)

# やりたいこと
cocos2d-jsでブラウザ向けゲームのリリース等でcocos2d-jsの背景を透過させたい
（cocos2dよりも後ろに、それ以外の描画結果を合成表示したい場合など）


## CCBoot.js の変更

[project]/frameworks/cocos2d-html5/ にある
**CCBoot.js**の'alpha':falseを'alpha:true'に書き換える。

【変更前】

```javascript:CCBoot.js
        if (cc._renderType === cc.game.RENDER_TYPE_WEBGL) {
            this._renderContext = cc._renderContext = cc.webglContext
             = cc.create3DContext(localCanvas, {
                'stencil': true,
                'alpha': false
            });
        }
```


【変更後】

```javascript:CCBoot.js
        if (cc._renderType === cc.game.RENDER_TYPE_WEBGL) {
            this._renderContext = cc._renderContext = cc.webglContext
             = cc.create3DContext(localCanvas, {
                'stencil': true,
                'alpha': true
            });
        }
```

## 背景描画色を透過率α（アルファ）=0 で指定する

**main.js**等で以下のように背景描画色を透明にする

```javascript:main.js
   cc.LoaderScene.preload(g_resources, function () {   

        //背景描画色を透明に
        cc.director.setClearColor(cc.color(0, 0, 0, 0));

        cc.director.runScene(new GameScene());
    }, this);

```
Intel NUC に Automotive Grade Linux をインストール

注: この手順は古いです。今は単に .wic ファイルを dd するだけで SD を作れます。

## 作業手順

[公式文書 Running AGL on Intel MinnowBoard (and most Intel 64 bits HW)](http://docs.automotivelinux.org/docs/getting_started/en/dev/reference/machines/intel.html)

Intel NUC に AGL をインストールするメモ。まずインストールするファイルを選ぶ。Intel Minnowboard Max 用が NUC にも使える。色んな所にリンクがあるが [AGL Unified Code Base Release Notes](https://wiki.automotivelinux.org/agl-distro/release-notes) がまとまっていた。hddimg ファイルをダウンロードする。

* [latest](https://download.automotivelinux.org/AGL/snapshots/master/latest/intel-corei7-64/deploy/images/intel-corei7-64/) agl-demo-platform-crosssdk-intel-corei7-64.hddimg
    * 私が試したときはアプリが壊れていた。
* [dab 4.0.2](https://download.automotivelinux.org/AGL/release/dab/4.0.2/intel-corei7-64/deploy/images/intel-corei7-64/) agl-demo-platform-intel-corei7-64.hddimg
    * まあ動いた。

このファイルを SD カードに焼くには mkefi-agl.sh というツールを使う。(なぜ普通に dd 出来ないかは要調査)

    git clone git@github.com:dominig/mkefi-agl.sh.git
    $ sudo cp -l mkefi-agl.sh/mkefi-agl.sh /usr/local/bin

あとは SD カードを指してツールを実行すれば作成。ツールはパーティションの作成やフォーマットを自動で行ってくれる。

    $ lsblk
    SD カードデバイスを確認
    $ mkefi-agl.sh
    $ sudo mkefi-agl.sh -v agl-demo-platform-crosssdk-intel-corei7-64.hddimg /dev/sdc

## hddimg とは?

さて、hddimg というのが聞き慣れないので調べてみる。

この .hddimg というファイルに馴染みがないのでどういう物なのか調べてみる。mkefi-agl.sh を読むとどうもマウント出来そうだ。

    $ sudo mount -o loop ~/Downloads/agl-demo-platform-crosssdk-intel-corei7-64.hddimg /mnt

マウントした物を観察すると、rootfs.img があるので、これが起動後の linux のルートパーティションになるようだ。

```
$ tree /mnt | less
/mnt
├── EFI
│   └── BOOT
│       └── bootx64.efi
├── initrd
├── ldlinux.c32
├── ldlinux.sys
├── libcom32.c32
├── libutil.c32
├── loader
│   ├── entries
│   │   ├── boot.conf
│   │   └── install.conf
│   └── loader.conf
├── rmc.db
├── rootfs.img
├── startup.nsh
├── syslinux.cfg
├── vesamenu.c32
└── vmlinuz
```

ということで、hddimg というのは linux のルートパーティションと EFI のブート情報を含んだ何かである事がわかる。

```
$ mkdir /tmp/mnt
$ sudo mount -o loop /mnt/rootfs.img /tmp/mnt
$ $ ls /tmp/mnt
bin  boot  dev  etc  home  lib  lost+found  media  mnt  proc  run  sbin  sys  tmp  usr  var
```

## Bitbake が hddimg を作る仕組み。

Bitbake は [IMAGE_FSTYPES](http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-IMAGE_FSTYPES) の値を元に作成するイメージのフォーマットを決める。AGL の場合、次のように設定が見える。

```
$ ag IMAGE_FSTYPES meta-*

meta-agl/meta-agl-distro/conf/distro/poky-agl.conf
122:AGL_EXTRA_IMAGE_FSTYPES ??= ""
131:IMAGE_FSTYPES := "${AGL_DEFAULT_IMAGE_FSTYPES} ${AGL_EXTRA_IMAGE_FSTYPES}"

meta-agl/meta-agl-bsp/conf/include/agl_intel-corei7-64.inc
27:AGL_DEFAULT_IMAGE_FSTYPES := "wic hddimg"
```

## 自前でビルドする場合。


    source meta-agl/scripts/aglsetup.sh -m intel-corei7-64 agl-demo agl-devel
    bitbake agl-demo-platform

のように `-m intel-corei7-64` を指定すれば勝手に hddimg ファイルが出来る。
【Heroku】gitのsubmoduleを使ったプロジェクトのデプロイができない件

直接、
`git push heroku master`
は問題なくデプロイできるんですけど、
githubのマスターブランチへpushすると自動でherokuにデプロイする設定をしているとなぜかできない。
具体的に言うと親プロジェクトは問題なく置かれるんですけど、submoduleのプロジェクトがcloneできていない模様。

色々調べていると、親切な方が作ってくれたビルドパックをherokuアプリに追加すればいけるとかあったんですけど。
~~ドキュメントが英語で上手に使いこなす自信がなかったので、~~

github → heroku
の自動デプロイ機能を切って、

`git push origin master`
してから、手動で。
`git push heroku master`


とすることでいったん良いかなって・・・
interface社のFAコントローラに天文受信機制御用の環境を構築する

# 概要
天文観測用の受信機を制御するためにInterface社のFAコントローラを用いている。
新規で計算機をsetupする機会があったので、その手順をまとめてみた。

## <i class="fa fa-cube" style="font-size:1em;"></i> やることのまとめ
ここでは、pythonパッケージのインストールとCompact PCIボードを制御するためのドライバーの組み込みを行う。

- python package の install
    - pyenv
    - anaconda
- PCIボードドライバのインストール

## 動作確認環境
InterfaceLinux 3.2.46-ci-0-32
Debian 7.2

# Setup 手順

## python package の install

###  1. pyenvのinstall
[pyenv 公式ページ Github](https://github.com/hamukazu/pyconjp2015tutorial/blob/master/install_instruction.md)
[その他参考ページ : Qiita pyenvを使ってMacにPythonの環境を構築する](https://qiita.com/1000ch/items/93841f76ea52551b6a97)
公式ページの手順を参考にinstallしていく.

```bash:pyenv_install
git clone https://github.com/yyuu/pyenv ~/.pyenv
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev
sudo apt-get install -y libreadline-dev libsqlite3-dev wget curl llvm
```

### 2. pyenvにpathを通す
以下の記述を "~/.bash_profile"に追加する(interface Linuxには".bash_profile"がないかもしれない) 
もしその場合は、"~/.profile"に以下の記述を追加

```bash:python_path
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
```
.profileに記述した内容は、再起動しないと変更が反映されないので再起動を行う。

### 3. anacondaのinstall
次はpyenvを使って、pythonパッケージである anaconda をinstallする.

```bash:anaconda_install
pyenv install anaconda3-4.4.0
pyenv global anaconda3-4.4.0
```
ipythonを起動して、python 3が使われていればok.

## PCIボードドライバの install

### 1. インストールするドライバ一式
- **GPG-3100** : CPZ-3177, 
- **GPG-3300** : CPZ-340516, CPZ-340816
- **GPG-7204** : CPZ-7204
- **GPG-7400** : CPZ-7415V

### 2. Interface社の公式HPから上記のドライバをダウンロード
- ボードの型番でググったりしてCompact PCIボードの製品ページへ行く.
    - [例 : CPZ-3177のページ -- http://www.interface.co.jp/catalog/prdc.asp?name=cpz-3177](http://www.interface.co.jp/catalog/prdc.asp?name=cpz-3177)
- ページのソフトウェアの欄にLinux/RTドライバがあるので、ダウンロードをclick.
    - (*)ドライバのインストールにはinterface社へのユーザ登録・ログインが必要なのでなければアカウントがなければ作る.
- ダウンロードページに飛んだら、"DISK1 : DriverDisk 1/3 [Linux/RTLinux]" をダウンロード.

### 3. ダウンロードファイルを解凍
```
/home/(user)/ダウンロード
```
以下にダウンロードされたtgzファイルが置かれる.(環境によっては違う場所に置かれるかも?)
ダウンロードファイルを見つけたら、その場所で解凍する.

```bash
tar xvzf (file_name)      # ex.) tar xvzf gpg3100_i386_056046.tgz
```

### 4.  install を実行

```
su
#bash install
```
色々と選択画面が出てくるが、全て "yes"や"normal" などを選択すればok.
(*) readme.txtには、"sh install"と書いてあるがそれだと失敗するので、上記のようにbashで実行する.

### 5. ドライバの組み込み
ドライバがインストールされた場所へ行き、insda.shを実行する.

```
#cd /usr/src/interface/gpg3300/(アーキテクチャー)/linux/drivers 
#bash insda.sh
```
ここまでで、ドライバのインストール・組み込みは完了.
各ボードについてこの手順で組み込んで行く.

### 6. ダウンロードファイルの移動
webからダウンロードした各installファイルは整理して一箇所に置いとかないとなんとなく気持ち悪い.
今後特に使用用途があるわけではないが、まとめておこう.

- 保管場所の作成

```bash
cd
mkdir  Interface_driver
cd Interface_driver
mkdir GPG3100
mkdir GPG3300
mkdir GPG7204
mkdir GPG7400
```

- ダウンロードファイルの移動

```bash
# 各ドライバについてこんな感じで移動させておく
mv -r /home/user/Download/gpg3100_i386_056046 /home/user/Interface_driver/GPG3100/
```
macOS High SierraでVMware Fusionのキーボード・マウスがおかしくなった

VMware FusionのゲストOSで、キーボード入力とマウス移動を同時に実行するとkeyupイベント(?)を取りこぼす模様。
滅多に起きないので再現するのに時間がかかった。

例えば、ブラウザでControlを押しながらリンクをクリックして別のタブで開きつつ、マウスを動かしながらControlキーを離す場合。
Controlキーのkeyupを取りこぼしてControlが押しっぱなし状態のまま継続する。
USBキーボードとUSBマウスなら結構な頻度で再現する。MacBook Proのキーボードとトラックパッドなら滅多に起きない。

特にEmacsだとCtrl押しっぱなしで無意識にマウスも動かしていたようで、酷いときは一時間に何度かは遭遇する。

macOS Sierraではこの現象は起こらなかった。
VMware Fusion 8.5 から 10 にアップグレードしても解決しなかった。

一応VMware設定の「Mac OS ホスト キーボード ショートカットを有効化」にチェックを入れるとおそらく解決する。この設定はVMwareのキーボード関連の問題は大抵解決するんだけど、Alt-TabがMacに取られるので出来ればやりたくない。

ゲストOSはLinuxでもWindowsでも再現したので、これはホスト側の問題のようだ。


未解決だけれどメモとして投稿。
MongoDBに関する備忘録

忘れそうなので。。。
先人の写経がほとんど

##インストール
[windows - 公式document](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/)
[mac - 公式document](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)

##説明書
細かい仕様は下のノートが有名です。
[英語: The Little MongoDB Book](http://openmymind.net/mongodb.pdf)
[日本語: MongoDBの薄い本](http://www.cuspy.org/diary/2012-04-17/the-little-mongodb-book-ja.pdf)

##参考書
windowsの場合下記参考になりました
認証設定や起動、切断に関数事が書いてある
[Windows で MongoDB を動かすメモ](https://qiita.com/t-koyama/items/9b8804cbec59b3c93eb0)
macはdocumentのbrew欄を参考
[Install MongoDB Community Edition on macOS](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)


##起動
設定ファイルは通常以下にある
/usr/local/etc/mongod.conf
そこからログパスも確認してバックエンドで起動する

```shell
sudo mongod --fork --dbpath /data/db  --logpath /usr/local/var/log/mongodb/mongo.log
```

コンソール上で起動するなら以下だけでOK

```shell
sudo mongod
```

##動かしてみる

```shell
mongo
```
これだけ
##CRUD

###Database一覧

```js
> show dbs
admin  0.000GB
local  0.000GB
```
###Database作成

```js
> use testDB
switched to db testDB
```
###Database削除

```js
> db.dropDatabase()
{ "dropped" : "testDB", "ok" : 1 }
```
###collection作成

```js
> db.testCollection
testDB.testCollection
```
###collection一覧

```js
> show collections
> 
```
返事がない。。。
###insert
```js
> db.testCollection.insert({first_name: 'taro', last_name: 'sato', dob: new Date('2000-01-01'), gender: 'm'})
WriteResult({ "nInserted" : 1 })
> show collections
testCollection
```
insertした事によって、~~テーブル~~collectionが作成される
###ちょっと見てみる
```js
> db.testCollection.find()
{ "_id" : ObjectId("5a1294be8785a7f7da2bd618"), "first_name" : "taro", "last_name" : "sato", "dob" : ISODate("2000-01-01T00:00:00Z"), "gender" : "m" }
```

###update
```js
> db.testCollection.update({"_id" : ObjectId("5a1294be8785a7f7da2bd618")}, {$set: { first_name: "jiro"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.testCollection.find()
{ "_id" : ObjectId("5a1294be8785a7f7da2bd618"), "first_name" : "jiro", "last_name" : "sato", "dob" : ISODate("2000-01-01T00:00:00Z"), "gender" : "m" }
```
####条件指定で検索
```js
> db.testCollection.find({gender: "f"})
>
> db.testCollection.find({gender: "m"})
{ "_id" : ObjectId("5a1294be8785a7f7da2bd618"), "first_name" : "jiro", "last_name" : "sato", "dob" : ISODate("2000-01-01T00:00:00Z"), "gender" : "m" }
```
条件のオプションは以下

|演算子|意味|
|:-:|:-:|
|$lt|未満|
|$lte|以下|
|$gt|より大きい|
|$gte|以上|
|$ne|否定|

###data削除
```js
> db.testCollection.remove({ "_id" : ObjectId("5a1294be8785a7f7da2bd618")})
WriteResult({ "nRemoved" : 1 })
> db.testCollection.find()
> 
```
###collection削除
```js
> db.testCollection.drop()
true
> show collections
> 
```

###mongoサーバー停止
```js
> db.shutdownServer()
server should be down...
```
###db操作終了
```js
> exit
bye
```

###他にも参考したもの
[HomebrewでMacにMongoDBをインストールした時のメモ](https://qiita.com/Frog_woman/items/f8a70286c7f1c4d5fc02)
Office UI Fabricでアイコンを表示するにはinitializeIcons()を呼ばないといけない

[Office UI Fabric](https://developer.microsoft.com/en-us/fabric#/components) のちょっとしたハマりどころの共有です。

[Office UI Fabric](https://developer.microsoft.com/en-us/fabric#/components) で、チェックボックスのチェックマークとかプルダウンの下向き括弧とかのアイコンが表示されなくてなんでかなーと思ったら、initializeIcons() を呼ぶ必要がありました。

![スクリーンショット_112017_060804_PM.jpg](https://qiita-image-store.s3.amazonaws.com/0/529/1f2d3b2c-4c4a-f023-7227-cc943d389efd.jpeg)

チェックしても色がつくだけでチェックマークが表示されない。

https://developer.microsoft.com/en-us/fabric#/get-started

ここに initizelizeIcons() を呼ぶようにと書いてました。

コードサンプル

```ts
"use strict";

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Fabric } from 'office-ui-fabric-react/lib/Fabric';
import { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';
import { Dropdown } from 'office-ui-fabric-react/lib/Dropdown';
import { initializeIcons } from '@uifabric/icons';

initializeIcons();

class MyPage extends React.Component {
  render() {
    return (
      <div style={{width: '200px'}}>
        <Fabric>
          <Dropdown
              defaultSelectedKey='A'
              options={
                  [
                      { key: 'A', text: '田中' },
                      { key: 'B', text: '山田' },
                  ]
              }
              disabled={false}
          />
          <Checkbox
            label='checkbox'
            ariaDescribedBy={'descriptionID'}
          />
        </Fabric>
      </div>
    );
  }
}

ReactDOM.render(<MyPage />, document.getElementById("app"));
```

![スクリーンショット_112017_061206_PM.jpg](https://qiita-image-store.s3.amazonaws.com/0/529/5ac3c43a-e220-a366-55f6-3f4ca5184d0a.jpeg)

表示されました。