OmniAICreator/Qiita-1.07M huggingface dataset:
WordPressで表示内容を投稿者がセットした文章を表示

- WordPressで投稿者が画面に表示される内容を変更可能にします
- この記事の内容はWordPress 4.9.8での稼働を確認しています

#1. 画面を用意します
- []()でBootstrapを使用した画面を用意しました

#2. コードを記入します
- 対象のページ（例：frontpage.phpなど）に以下を記入します

```php:投稿者が表示内容をセットする
<div class="b1">
  <?php
  if ( current_user_can('administrator') || current_user_can('editor') || current_user_can('author') ):
    $text = "";
    $t = filter_input(INPUT_GET, "input_text");
    if ( $t != "" ):
      $text = filter_input(INPUT_GET,"input_text");
      // set_transient( 'transient_text', $text, 12 * HOUR_IN_SECONDS );
      set_transient( 'transient_text', $text );
      // echo "transient_text is set to ";
      // echo $text;
    else:
      // echo "transient_text was not set in this pass";
    endif;
    $selection_html = '';
    $selection_html .= '
      <form method="get">
        <input type="text" name="input_text" size="30" maxlength="20">
        <input type="submit" value="doit">
      </form>';
    echo $selection_html;
  endif; ?>
</div>
```

```php:上記の選択に従い表示される画面
<div class="b2">
  <?php
  $t2 = get_transient( 'transient_text' );
  if ( $t2 != "" ):
    $text2 = get_transient( 'transient_text' );
    // echo "transient_text was received as ";
    echo $text2;
  else:
    // echo "transient_text was not received in this pass";
  endif;
</div>
```

#3. 表示を確認します
- 期待通りに表示されることを確認します
- 投稿者でログインし、表示するテキストを入力します
<img width="851" alt="スクリーンショット 2018-10-25 9.22.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/26b4ca56-67e0-3a15-e079-9464acb6b099.png">

- 他のブラウザで「購読者（Subscriber)」でログインすると、投稿者がセットしたテキストが表示されます

<img width="1140" alt="スクリーンショット 2018-10-25 9.22.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/3b17d7c9-9cf0-ceb1-6678-727115449cb4.png">
macOS10.14のpyenvで3.7.0がインストール出来ない場合の対処

```
$pyenv install 3.7.0
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
python-build: use readline from homebrew

BUILD FAILED (OS X 10.14 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/15/rp2m1vg91glcqqh0hfd7pfd00000gn/T/python-build.20181025085539.41080
Results logged to /var/folders/15/rp2m1vg91glcqqh0hfd7pfd00000gn/T/python-build.20181025085539.41080.log

Last 10 log lines:
  File "/private/var/folders/15/rp2m1vg91glcqqh0hfd7pfd00000gn/T/python-build.20181025085539.41080/Python-3.7.0/Lib/ensurepip/__main__.py", line 5, in <module>
    sys.exit(ensurepip._main())
  File "/private/var/folders/15/rp2m1vg91glcqqh0hfd7pfd00000gn/T/python-build.20181025085539.41080/Python-3.7.0/Lib/ensurepip/__init__.py", line 204, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/15/rp2m1vg91glcqqh0hfd7pfd00000gn/T/python-build.20181025085539.41080/Python-3.7.0/Lib/ensurepip/__init__.py", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/15/rp2m1vg91glcqqh0hfd7pfd00000gn/T/python-build.20181025085539.41080/Python-3.7.0/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip._internal
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
```
と表示されてインストールが止まってしまった。

```
% xcode-select --install
```
これを忘れているのではという記事をよく見ますが、それも出来ているのに上手くいかない人は、以下の設定を行ってからインストールをしてみてください。

```
export CFLAGS="-I$(xcrun --show-sdk-path)/usr/include"
```

参考記事 https://github.com/pyenv/pyenv/issues/993

どうもライブラリのパスが上手く取っていないようです。
自分のエラーの場合は、brew周りは問題無く見えていてzlib周りだけでしたので、参考記事のzlib部分の設定だけ組み込んでみたところ、上手くいきました。


その後再度インストールを行うと以下の様に通った。

```
$pyenv install 3.7.0
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
python-build: use readline from homebrew
Installed Python-3.7.0 to /Users/HOGEHOGE/.pyenv/versions/3.7.0
```
pythonの多倍長整数からbitの話まで

#はじめに
色々とコーディングをする中で、すごくメモリを食うなあと思った際に、ふとpythonの多倍長整数のことを投稿しようと思ったので記載します。

#多倍長整数とは

プログラムを作った時に、整数がどれくらいの大きさになっているか(どれくらいのメモリを使うか)、事前にわかっている場合と、わかっていない場合があるかと思います。

事前にわかっている場合は、それに応じてメモリの使い方を指定することで処理パフォーマンスは向上できます。

一方で
巨大な数の素因数分解などの計算では、整数がどのくらい大きいものかなかなかわかりません。
こういう事前にわからないものを扱うのために、好きなだけメモリを使えるようにするという指示ができるのが**多倍長整数**です。
自動でメモリの不足分を確保しに行ってくれます。

#(メモリってよく聞くし、使うけどなんなの)

メモリとは、CPUが処理を行う時に、必要なデータを一時的に保存しておく場所を指します。
※料理をする時のキッチンスペースみたいな感じでしょうか。同時に何品も作ると、材料が置けなくなって、料理が進まないみたいな。


###PCのメモリ

メモリの容量が大きければ大きいほど、一時的に置いておけるデータが大量になります。
つまりCPUが同時にこなせる仕事の量は大きくなります。

ここで大事なのは
メモリが大きい≠パソコンの処理が速い
メモリが大きい=同時にできる処理が増える
ということです。

以下参照。参照元は[こちら](https://chimolog.co/bto-ram-storage/)

| メモリー容量 | 用途 |
|:--|:--|
| 2GB | 本当に必要最低限の容量。Chromeをつけすぎると「重たい」と感じやすい。 |
| 4GB | 少なめ。ネットサーフィン、Office系なら範囲内だが、割りと簡単に90%くらいまで使い切れる。 |
| 8GB | 標準的な容量。Chrome大量、Office系、軽めのゲームなど、割りといろいろ出来る。 |
| 16GB | ちょっと多め。重たいゲーム、Chrome大量、Adobe系など、16GBあればほとんど困りません。 |
| 32GB | かなり多い、少数派です。Photoshopなどで解像度の大きいデータを扱う、といった特定の条件なら有効。 |
| 64GB | すごく多い。高度なCAD系ソフトのレンダリングなど、業務向けの用途じゃないと大抵の場合は「宝の持ち腐れ」で終わります。 |
参照元は[こちら](https://chimolog.co/bto-ram-storage/)


#(言わずもがなですがbitとかbyteについて)

言わずもがなbit、Byteは単位です。
KB、MB、GB、TBの方が生活では見かけることが多いでしょうか。このBはByteです。説明不要ですね。
※転送速度ではbit単位がよく使われます。

###bitとは
前回[こちら](https://qiita.com/hiroyuki_mrp/items/f0b497394f3a5d8a8395)でPCは0と1の二進法で計算されていることを一瞬説明しました。

bitはその0or1を収めるマスの数です。
1bitなら1マス分、0or1を入れられるので、表せるのは`2パターン`。
8bitなら8マス分、0or1を入れられるので、表せるのは`256パターン`になります。

###byteとは
1byte＝8bitです。
この1byteは半角英数字1字分のデータ量になります。

例えばアルファベットAは01000001で表せます。
ちなみに日本語全角文字は2byteです。


ここから1000倍ずつしたものが

1000byte=1KB
1000KB=1MB
1000MB=1GB
1000GB=1TB
※1024倍の場合もあります。


#話は戻ってpythonへ

一番最初に記述した多倍長整数ですが
Python2系ではlong、Python3系ではintになっています。
python3系の場合は、整数はintにまとめられているので意識しないですが、多倍長整数は、多倍長ではない整数を使う場合よりもメモリを大量に使うことを覚えておいた方がよさそうです。

#参考
http://www.altima.jp/column/fpga_edison/bit_number_signed.html

#おわり
雑多な記事になりました。
pandasでtsvを読み込む

pandasでcsvを読み込むときは`pandas.read_csv('pass/to/csv')`を使用する。
ところが、tsvを読み込むには`pandas.read_tsv('pass/to/tsv')`ではなく以下のようにする。

```python
pandas.read_csv('pass/to/tsv', delimiter='\t')
```

ちょっと紛らわしいので注意。

参考: http://www.mwsoft.jp/programming/numpy/pandas_csv.html
islefield WordPressまとめ

islefieldでのWordPressコンテンツのまとめです。

#1. WordPressでちょっといろいろやってみる
1. [WordPressでBootstrapをベースにしたテーマを使う](https://qiita.com/egplnt/items/154f910923f8bd5c39b9)
2. [WordPressでBootstrapを使ってみる](https://qiita.com/egplnt/items/bde8457cf2b5b8bfdf73)
3. [WordPressで権限によって表示する内容を変える](https://qiita.com/egplnt/items/3ce044df8a76460a1e42)
4. [WordPressで表示内容を投稿者が変更可能にする](https://qiita.com/egplnt/items/b37f6e857bdd51832966)
5. [WordPressで表示内容を投稿者がセットした文章を表示](https://qiita.com/egplnt/items/6bc680c19f8b12171d81)
6. [WordPressでデータベースの内容を表示](https://qiita.com/egplnt/items/9b94a4416cd6dc8c4f98)
7. [管理画面に新しいメニュー項目を追加する](https://qiita.com/egplnt/items/2510f21d5837040302e9)
8. [カスタム投稿タイプを登録する](https://qiita.com/egplnt/items/a662b47a0069c7b1e5db)
[参考にさせていただいたサイト](https://qiita.com/egplnt/items/6100bbac9e74852a2252)
ApacheをインストールしてHTMLファイルを表示させてみる（Linux権限）

#前提条件
前回の記事、 [さくらのVPSを使ったサーバの初期設定(一般ユーザ作成とrootアクセスの禁止)](https://qiita.com/shuthimaru/items/cecfcd0cef24979ae90b) が終わっていること

#Apacheをインストールする
httpサーバ、webサーバと呼ばれるものの大半はイコールこいつである。
```
yum install httpd #httpサーバをダウンロードする

Is this ok [y/d/N]:  #ここでyを入力、Enterを押す。
```
Complete！が出ればOK.

しゅてぃまる　は　Apache　を　てにいれた　！

Apache「Apacheは装備していかないと意味がないぜ」
```
systemctl restart httpd #httpサーバを再起動する
```

#FireWallを無効化する
デフォルトではCentOS7はFWでHTTP通信等は拒否されているらしいので、それを許可に変更する必要がある。

```
#http通信を許可
firewall-cmd --add-service=http --zone=public --permanent 
#https通信を許可
firewall-cmd --add-service=https --zone=public --permanent 
```

`success`と出ればOK.これでhttp,httpsの通信を許可する準備ができた。

```
systemctl restart firewalld
```

するとなにやら怖い文章が出てくるがそのままrootのパスワードを打ち込む

```
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password:
```
```
==== AUTHENTICATION COMPLETE ===
```
と出てコマンドが入力可能な状態になればOK.

# サーバがダウンしたときにHTTPサーバが自動で再起動するようにする

でも、このままではサーバがダウンしたときに再起動を行ってもhttpサーバは死んだままになる。なのでサーバが復旧すると同時にHTTPサーバも復活するように設定を行う。

```
systemctl enable httpd
```

先ほどのように警告とrootのパスワードが求められるので入力する。


# 設定を見返してみよう
下記を入力するとサービスの有無がわかる
アルファベット順に並んでいるのでhttpを探してみよう。enableになっていたらOK.
```
systemctl list-unit-files -t service
```


# htmlを自分の作ったページに置き換えてみよう
先ほど表示されたページはサーバ内のスタートページだ。そのファイルをWinSCPを使って自作のhtmlファイルに置き換えよう。
WinSCPはダウンロードをしてNEXTを連打していたら使えるようになる。
基本情報としてサーバの一般ユーザとパスワード、SFTP(ssh）のポート番号を指定してやる必要がある。

ログインを押したらパスワードを入力し、接続しよう。
あとはドラッグ&ドロップで投入できるのだが、Permission Deniedとでるはず。
なぜか？
これはファイルの書き込み権限がユーザにないからだ。

# 一般ユーザが読み書き実行ができるようにする

```
cd /var/www # var以下のwwwに移動
ls -l # フォルダ内ファイルの詳細情報を見る
```

上記を実行すると、

```
drwxr-xr-x 2 root root 6 Jun 27 22:49 html
↑↑↑権限↑↑↑　 ↑作成者 ↑ｸﾞﾙｰﾌﾟ　　　　　　↑ファイル名
```
という一文がいるはず。
この一文だけでこのファイルの所有者や他人がこのファイルにどれだけ干渉できるかがわかる。
注目すべきは
d`rwxr-xr-x`の「権限」。
前から3文字ずつが所有者、グループ、他人の権限を表しており、この場合だと


|対象ユーザ|権限|
|:-:|:-:|
|所有者|rwx|
|グループ|r-x|
|他人(others)|r-x|

とわけることができ、それぞれの意味は


|文字| 略なし | 意味 |
|:-:|:-:|:-:|
|r|read|読み込み|
|w|write|書き込み|
|x|execute|実行|
|-|-|なし|
となる。
よって、上記の権限は作成者は全ての権限を持っており、グループと他人は読み込みと実行ができ、書き込みはできないことになる。

WinSCPでの処理は書き込みに当たり、一般ユーザには所有者ではなく、rootグループにも属していないため、他人の扱いになっている。
よってhtmlフォルダに一般ユーザでwrite(書き込み)できる権限をつけることで解決できる。

```
su - #rootユーザに移行
cd /var/www #wwwに移動
chown apache:[一般ユーザ名] html #所有者をapche,グループを[一般ユーザ]に変更
chmod 775 html # htmlフォルダの権限をrwxrwxr-xに変更する
```

※775はr=4(2^2),w=2(2^1),x=1(2^0)と2進数で表されておりその足し算の数字となる。

変更が終わったら再度WinSCPでアップロードしてみる。


<img width="424" alt="03.png" src="https://qiita-image-store.s3.amazonaws.com/0/171011/68d3945a-df2a-bd6f-2469-e90e3e65baf3.png">

移動できた！


ブラウザを更新してみると、
<img width="810" alt="04.png" src="https://qiita-image-store.s3.amazonaws.com/0/171011/b6f3c04f-e801-9c74-8f67-e15029a2f037.png">

こんな感じでWebページが自分の指定したhtml
ファイルの内容に書き換わった。（ファイル名はindex.htmlじゃないとだめみたい。）
CloudFormationでSecurityGroupを作るときにYou may not define rules between a VPC group and a non-VPC groupとエラーが出るときの対応

CloudFormationでSecurityGroupを作るときにYou may not define rules between a VPC group and a non-VPC groupとエラーが出るときの対応

解決まで地味に30分程度掛かったのでメモ。

CloudFormationで次のような感じでSecurityGroupを作ろうとすると、`You may not define rules between a VPC group and a non-VPC group`とエラーが出てSecurityGroupが作れない。

```yaml
  DBEC2SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: "Allow access from specific SecurityGroup"
      SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: '3306'
        ToPort: '3306'
        SourceSecurityGroupId: !Ref 'EC2SecurityGroup'
```

これはSourceSecurityGroupにVPCのSecurityGroupが指定されているのに、（VpcIdが指定されていないため）EC2 Classic環境にSecurityGroupが作られようとしているため出たエラーである（言葉にするとややこしい）。

[ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-vpcid)にもあるが正しくはこんな感じ。

```yaml
  DBEC2SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !Ref VPC
      GroupDescription: "Allow access from specific SecurityGroup"
      SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: '3306'
        ToPort: '3306'
        SourceSecurityGroupId: !Ref 'EC2SecurityGroup'
```

ドキュメントは見ていたけど眠かったのとエラーメッセージに惑わされて解決まで時間掛かってしまった…。
WordPressで表示内容を投稿者が変更可能にする

- WordPressで投稿者が画面に表示される内容を変更可能にします
- この記事の内容はWordPress 4.9.8での稼働を確認しています

#1. 画面を用意します
- []()でBootstrapを使用した画面を用意しました

#2. コードを記入します
- 対象のページ（例：frontpage.phpなど）に以下を記入します

```php:投稿者が表示内容をセットする
<div class="b1">
  <?php
  if ( current_user_can('administrator') || current_user_can('editor') || current_user_can('author') ):
    $lang = "";
    $t = filter_input(INPUT_GET, "selected_lang");
    if ( $t != "" ):
      $lang = filter_input(INPUT_GET,"selected_lang");
      // set_transient( 'transient_lang', $lang, 12 * HOUR_IN_SECONDS );
      set_transient( 'transient_lang', $lang );
      // echo "transient_lang is set to ";
      // echo $lang;
    else:
      // echo "transient_lang was not set in this pass";
    endif;
    $selection_html = '';
    $selection_html .= '
      <form method="get">
        <select name="selected_lang">
          <option value="日本語">日本語</option>
          <option value="English">English</option>
          <option value="Francais">Francais</option>
        </select>
        <input type="submit" value="doit">
      </form>';
    echo $selection_html;
  endif; 
  ?>
</div>
```

```php:上記の選択に従い表示される画面
<div class="b2">
  <?php
  $t2 = get_transient( 'transient_lang' );
  if ( $t2 != "" ):
    $lang2 = get_transient( 'transient_lang' );
    // echo "transient_lang was received as ";
    // echo $lang2;
  else:
    // echo "transient_lang was not received in this pass";
  endif;
  echo $lang2 . "での挨拶：";
  if ($lang2 == "日本語"): ?>
    <p>こんにちは!</p>
  <?php elseif ($lang2 == "English"): ?>
    <p>Hello!</p>
  <?php elseif ($lang2 == "Francais"): ?>
    <p>Bonjour!</p>
  <?php endif; ?>
</div>
```

#3. 表示を確認します
- 期待通りに表示されることを確認します
- 投稿者でログインし、表示する言語を指定します

<img width="849" alt="スクリーンショット 2018-10-25 8.42.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/46ca9b0d-4b49-ee87-38e4-332c3baf783a.png">

- 英語（"English")にセットすると

<img width="451" alt="スクリーンショット 2018-10-25 8.42.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/37d24b2e-b6e5-cea2-b58d-be0918bc6a2f.png">

- 英語での挨拶が表示されます（プルダウンメニューは初期値の「日本語」に戻って表示されています）

<img width="850" alt="スクリーンショット 2018-10-25 8.43.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/fc5354cf-51ad-c036-7e84-f328e74472af.png">

- 他のブラウザで「購読者（Subscriber)」でログインすると、投稿者がセットした情報のみが閲覧できます

<img width="1143" alt="スクリーンショット 2018-10-25 8.43.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/536af2fa-d3db-7611-3a65-5cb573e539fe.png">
ReactNativeでQRやBarcodeを生成する


ReactNativeでQRとBarcodeの生成をしてみます。どちらも便利なモジュールがあるようです。感謝。

## 準備

モジュールをインストール。

```bash
npm install react-native-qrcode --save
npm install react-native-barcode-builder --save
```

## 実装

非常に簡単です。

```js:App.js
import React from 'react';
import { StyleSheet, Text, View, Button, Alert } from 'react-native';
import QRCode from 'react-native-qrcode';
import Barcode from 'react-native-barcode-builder';

export default class App extends React.Component {

  state = {
    text: 'hoge'
  }

  render() {

    return (
      <View style={styles.container}>
        <Text>Generate QR and barcode.</Text>
        <QRCode
          value={this.state.text}
          size={200}
          bgColor='black'
          fgColor='white'
        />
        <Barcode value={this.state.text} format="CODE128" />
        <Button
          title='QRとバーコードの内容を変更'
          onPress={() => this.setState({text: 'foo'})}
        />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

```

## 完成イメージ

こんな感じ。

![スクリーンショット 2018-10-25 7.50.35.png](https://qiita-image-store.s3.amazonaws.com/0/55188/28ea8c39-fa30-170b-95c3-67da92167f03.png)
Windows バッチファイル記法


ググるのも面倒なバッチファイル記法についての忘備録です｡

■ 年月日やを時刻を取得する方法

````
rem @echo off
REM YYYY,MM,DDを設定
set YYYYMMDD=%date:~-10%
set YYYYMM=%YYYY%%MM%
set YYYY=%YYYYMMDD:~0,4%
set MM=%YYYYMMDD:~5,2%
set DD=%YYYYMMDD:~8,2%
set YYYYMMDD=%YYYYMM%%DD%


REM HHMMを設定
set timetmp=%time: =0%
set HHMM=%timetmp:~0,2%%timetmp:~3,2%
set HH=%HHMM:~0,2%
set MM=%HHMM:~2,2%
````
wordで左右に表を２つ並べる方法

完成イメージは、変更前の表と、変更後の表を横に並べて２つの表の間に矢印図を置くイメージを想定しています。

まずは縦に２つ表を作成します。そして、
空白行　＋　1つ目の表　＋　空白行　＋　2つ目の表　＋　空白行　を選択した状態にします。

![表を並べる_1.png](https://qiita-image-store.s3.amazonaws.com/0/71427/f17f506d-a6a7-ebee-bddd-b769104bbee0.png)
メニューにある「ページレイアウト」→「段組み」→「2段」を選択すると、

![表を並べる_2.png](https://qiita-image-store.s3.amazonaws.com/0/71427/30d80848-f15a-52b0-cc22-065416a377de.png)
最後は、２つ表の間に矢印の図形を挿入して、はい出来上がり！

![表を並べる_3.png](https://qiita-image-store.s3.amazonaws.com/0/71427/180d0f9f-4945-2140-8e3e-4ed9fa54f580.png)
楽天のECサイト制作について

楽天のECサイトを制作する際の懸念事項を調べたので、備忘録として。

## 楽天ショップのデザイン制作をする方法
楽天ショップのコーディングには、テンプレートデザインで構成する場合は、RMS。
オリジナルページを作成したい場合は、楽天GOLDというサーバ領域でhtmlデータ等をアップロードする。

* RMS（Rakuten Merchant Server）
* GOLD

### RMSとは
楽天市場の店舗運営システム。

#### RMSだけでデザインカスタマイズをするには
制限多くて、デザインカスタマイズが大変

カラーミーのようにブラウザ上で編集していく。

### GOLDとは
楽天市場が提供しているサーバ領域。
レンタルサーバで言うweb領域の事を指す。
楽天ではGOLDと言う名称。

GOLDを使う事で

* 外部スタイルシートを読み込める
* javascriptが使えるようになる
* オリジナルのページ作成ができる
* オリジナルのスマホ用ページ作成ができる
* 商品ページ・カテゴリページはオリジナルデザインが出来ない
* PDFファイルなどをアップロードできる（RMS内ではgif、JPGのみ）

仕様についてはこちらを参照
[【RMS】楽天GOLDの導入～仕様](http://otayori.hatenablog.com/entry/2018/04/22/092633)

[楽天コーディングあるある](https://c-rocketz.com/ec/rakuten-aruaru/)

仕様についてまとめると

* 基本料金は無く、無料
* 容量は1GBまで無料（100MBごとに 月額に対して5000円費用発生　）
* 容量追加がされるのは申請後10営業日。いきなり増やせない
* PHPは使えない
* javaScriptは使える
* 外部リンクの設定が使えない

[GOLD使用時の注意点](https://www.renovas.co.jp/blog/20180413rakutengold/)


### コーディングの方法
FTPで楽天GOLDにデータをアップする。
独自タグはない。
制約が多いが、詳細はRMSにログインしないと確認できない。

### テスト環境の有無
テスト環境はある。

テスト環境の構築は、RMSのメニュー内からする。
**但し1ヶ月かかる。**


### 本アップの手順
本番環境の楽天GOLDに、データをアップロードする。
**反映には最短30分要するとの事**　

## 通常のwebサイトとの違い
*　HTMLタグに制約がある
*　データの反映に３０分

#### 気になった事
こちらで見ると反映に１時間以上と書かれていますが、サポートでは３０分と言っていた。
[簡単！楽天RMSの画像反映が遅いときの対処法！](https://nuconeco.net/rakuten-cabinet-picture/)
## 思った事

* 制作ノウハウを公開する事を楽天が禁止している為、不透明な点が多い。
    * その為、経験ない場合は事故る可能性が高そうに感じた。個人的には、楽天RMSを専門とする制作会社に振った方が良いように思えた。

* 楽天GOLDの部分はローカルで開発してアップロードしたらいいかと思ったが、制約がある為、どんなエラーがあるか予想出来ない。

* テスト環境で開発するにしても、htmlやcssの反映に３０分かかるみたいで、現実的な開発フローに思えない。
ProxmoxでCoreOS起動中にDISK拡張した後CoreOSをrebootするとCoreOSがbootしなくなったが復旧できた

GPT形式のDISKをProxmoxでゲストOS起動中に拡張した時後ゲストOSをrebootするとゲストOSが起動しなくなった。

## 原因

`GPTゲストOSが起動している状態で`以下のようにResizeした。

![0.png](https://qiita-image-store.s3.amazonaws.com/0/25728/705e6017-48ba-6195-dc20-833c480d1df3.png)

ゲストOSの`CoreOS`をOS再起動すると以下のように起動しなくなった。

![stop.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3dee7cfe-2a32-f0c0-594a-ba049fadcfc9.png)

```
error: invalid GPT signature.
error: no such partition.
```

* https://github.com/coreos/bugs/issues/356

## 対処

* CoreOSのISOでboot起動

![2boot.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c6521835-5242-5754-0ace-8bef7555be27.png)

* fdiskで赤字で怒られていることに気がつく。

![スクリーンショット_2018-10-25_06-29-08.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8f200021-52a7-ade7-af04-32770374a8fd.png)

```sh
sudo -s

gdisk /dev/vda
```

![mm.png](https://qiita-image-store.s3.amazonaws.com/0/25728/5f1dd825-543b-a069-33cc-44bf266cbf30.png)

![スクリーンショット_2018-10-25_06-30-31.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e85e4669-b7fa-5c01-1e5e-2aea72c2a59b.png)


```
poweroff
```

* DISKからブートさせて、起動することを確認。(途中DISK拡張される)
VueとVuexを使った簡単なCRUD

## 概要

vueとvuexを使った簡単なCRUDを作りました。
vueを初めてさわる方とかの参考になれば嬉しいです。

## 使用モジュール

vueで使われる必須のものです。

* vue
* vuex
* vue-router
* vuex-router-sync


---

[実装物](https://codesandbox.io/s/38q0203z5q)
ReactNativeでTabにStackを入れ子にする


react-navigationでTabにStackを入れ子にしたい。

## 準備

```bash
npm install --save react-navigation
npm install
```

## イメージ

動画にしたかったけどうまく録画できず・・・。

![スクリーンショット 2018-10-25 7.08.46.png](https://qiita-image-store.s3.amazonaws.com/0/55188/bc949231-264f-5eaf-d359-5fbfdfc1cb3b.png)


## 実装

レイアウト？自体はそんなに難しくはない。Stackを作って、Tabでページとして指定するだけ。

```js:App.js
import React from 'react';
import { Text, View, Button } from 'react-native';
import { createBottomTabNavigator, createStackNavigator } from 'react-navigation';
import { Entypo, Ionicons, Feather, FontAwesome } from '@expo/vector-icons';

//Home
class HomeScreen extends React.Component{
  render(){
    return (
      <View style={{flex:1, alignItems: 'center', justifyContent: 'center'}}>
        <Text>Home</Text>
        <Button
          title='Link to About'
          onPress={() => this.props.navigation.navigate('About')}
        />
      </View>
    );
  }
}

//About
class AboutScreen extends React.Component{
  render() {
    return (
      <View style={{flex:1, alignItems: 'center', justifyContent: 'center'}}>
        <Text>About</Text>
      </View>
    );
  }
}

//Setting
class SettingsScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <Text>Settings!</Text>
      </View>
    );
  }
}

//Stack
const RootStack = createStackNavigator(
  {
    Home: {
      screen: HomeScreen,
    },
    About: AboutScreen,
  }
  ,
  {
    initialRouteName: 'Home',
  }
);

//tab icon設定 
RootStack.navigationOptions = {
  tabBarIcon: ({ tintColor }) => <Entypo size={24} name="home" color={tintColor} />,
}

SettingsScreen.navigationOptions = {
  tabBarIcon: ({ tintColor }) => <Ionicons size={24} name="md-settings" color={tintColor} />,
}

//Tab
export default createBottomTabNavigator({
  Home: RootStack,
  Settings: SettingsScreen,
});
```

## 今後の課題

* データ連携関連全般。特にReduxをどう統合すればいいのだろうか。調べて随時更新します。
UNITYでOutlineシェーダ

UNITYのビルトインシェーダーのコードよめばいいよ！

アウトラインの描き方はいろいろあるけど、その中で最も簡単で実績があるものは
レンダリングの裏面のポリゴンをカリング反転させ 少し拡大し 黒色でレンダリング
すると、オブジェクトより少し大きいところに黒いラインができる

そのオーソドックスな手法

https://github.com/YukiMiyatake/UnityLesson/tree/Outline_1
#プロパティー

```cpp
_OutlineWidth("Outline Width", Range(0.0002, 0.01)) = 0.001
_OutlineColor("Outline Color", Color) = (0.0, 0.0, 0.0, 1.0)

```

アウトラインの太さと色の設定をする


#ヘッダ部分

```cpp
Name "OUTLINE"

Lighting Off
Cull Front
ZWrite On
ColorMask RGB

CGPROGRAM

#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"


uniform float _OutlineWidth;
uniform float4 _OutlineColor;


struct appdata
{
	float4 vertex : POSITION;
	float3 normal : NORMAL;
	float2 texcoord	  : TEXCOORD0;
};

struct v2f
{
	float4 pos : SV_POSITION;
	fixed4 outlineColor : COLOR;
};

```

特に変わったことはない。outlineColorを フラグメントシェーダにわたしているが、太さは渡してないのは気まぐれ
気にしないでほしい


#コード部分

```cpp
v2f vert(appdata v)
{
	v2f o;
	//UNITY_INITIALIZE_OUTPUT(v2f,o);
	float3 norm = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, v.normal));
	float2 offset = TransformViewToProjection(norm.xy);


	o.pos = UnityObjectToClipPos(v.vertex);
	o.pos.xy += offset  * _OutlineWidth;

	o.outlineColor = _OutlineColor;
	return o;
}

fixed4 frag(v2f i) : SV_Target
{
	return i.outlineColor;
}
```

法線方向にポジションを拡大すればいいのですが
法線はモデル座標系なので、View座標系にし、さらにProjection座標系にする
そこで法線方向に引き延ばす

説明すれば簡単な事なんだけど
いがいに　Projection座標での法線を計算するのが面倒だけど
それらが　組み込まれているのは便利ですね


![SnapCrab_NoName_2018-10-25_5-21-21_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/13916/77244525-5881-8a92-cb25-1e275161eb42.png)
UNITY古典シェーダ Rampシェーダ（トゥーンシェーダ）

写実的なリアルなグラフィックをフォトリアルといいますが
その反対のアニメ的なグラフィックをノンフォトリアル NPRといいます
今回は　NPRの基本のトゥーンシェーダーを

https://github.com/YukiMiyatake/UnityLesson/tree/Ramp_1

#トゥーンシェーダーとは
アニメでは色の塗りをなめらかにグラデーションさせず、光、影を塗り分けます
それを　カートゥーン、トゥーン　と呼びます
その中の手法の1つの　ランプシェーダを作ります

##ランプシェーダ
プロパティーは今回は2個。ランプテクスチャと そのかかり具合

```cpp
		_RampTex ("RampTexture", 2D) = "white" {}
		_ToonPower("ToonPower", Range(0.0, 1.0)) = 0.5

```

計算ですが、ここは今は適当にして、動くことだけを確認します

ランプシェーダの基本は、陰の強さ（diffuse）により通常はなめらかに変化する陰の色を
2値などに離散させるためにテクスチャを使います

![SnapCrab_NoName_2018-10-25_3-26-7_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/13916/68d7b550-e94e-eeaf-8b46-867421544e55.png)

たとえば　このようなテクスチャを考えます
diffuseが0＝光源から90度側面 のときは左端の真っ黒で
diffuseが1＝光源に面しているときは真っ白
その間は　なめらかではなくテクスチャのように離散する
というのを表現させるには　単純に
diffuseの値を テクスチャのu座標としてマッピングすればいいですね！
また　今回はテクスチャは1次元しかつかってないけど
t座標に　スペキュラ入れたり、外部パラメータを入れて複雑な表現も可能だし
場合によっては　輪郭線を書くことも出来ます

Rampの計算は　今回は標準のブレンドにしてみます
ランプテクスチャが白黒なので　計算式にあってませんけどね・・

```cpp
float4 tex = tex2D(_MainTex, i.uv);

// Diffuse(HalfLambert)
float NdotL = dot(N, L);
float diffuse = (NdotL*0.5 + 0.5);
float4 ramp = tex2D(_RampTex, float2(diffuse, 0));
				
return float4(saturate( (tex*(1 - _ToonPower) + ramp*_ToonPower ) ), 1.0);


```

diffuseをランプテクスチャのu座標にマッピングすれば

![SnapCrab_NoName_2018-10-25_3-58-43_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/13916/3deb076b-59b8-cbb4-aba4-ee6bc738b6ad.png)

わかりにくい＆ゾンビ　だけど、ちゃんとトゥーンになったのがわかると思います


##トゥーンシェーダ
ランプテクスチャ以外にもいろんな方法があるが
その中でもメジャーな方法として
陰色をパラメータで設定行い、シェーダーで2階調にわけます

具体的には、陰色と　スレッショルドを入力し
diffuseの値が スレッショルドを超えたら陰だと判断し陰色にします
今回は2階調だが、とうぜんコードを改良すれば3階調やn階調にすることも出来る

パラメータは2つ

```cpp
_ToonColor("ToonColor", Color) = (0.0, 0.0, 0.0, 0.0)
_ToonThreshold("ToonThreshold", Range(0.0,1.0)) = 1.0
```

計算式はとりあえず参考までに・・
今回は スレッショルドのパラメータにより2値にするので三項演算子で 白とトゥーン色に離散させます

そのあとは何となく計算

```cpp
float4 ramp2 = (diffuse.x >= _ToonThreshold) ? float4(1.0, 1.0, 1.0, 1.0): float4(_ToonColor.xyz, 1.0);

return float4(saturate( (tex*(1 - _ToonPower) + ramp*_ToonPower ) * shadowTex * ramp2 ), 1.0);

```

![SnapCrab_NoName_2018-10-25_4-30-7_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/13916/4c90b203-8661-d6b7-94d5-98cdab2ed5c7.png)

これでRampテクスチャを設定もできるし、陰色を指定し　スレッショルドで2値にすることも可能になった
IMEの単語登録を使い入力を楽にする

#IMEの単語登録を使った入力改善案
日本語でIT用語や外国語由来の言葉を含む文字を書いていると、
単語が長くなりがちで、また使用頻度が多いとさらにタイプが大変です。
そこで、少しだけ速度を改善できる案を考えてみました。

● 改善前
(タイプ時)
IMEの「ひらがな」入力で文字をタイプ後、F7や変換を使って、カタカナを入力します。

いんたーねっと→インターネット

● 改善後
(事前準備）
IMEの単語に読みを「ひらがな」を選択した状態で文字をタイプし登録します。

| 読み       |       語句 |パターン|
|:-----------------|:------------------|:-:|
| いんｔｎ             |              インターネット |②|
| いんｔｆ           |       インターフェイス      |②|
| ｐｒｊ           |            プロジェクト |②|
| ｓｆｔ           |          ソフトウェア   |②|
| ｍｄｒｗ           |      ミドルウェア       |②|
| ｔｒｎ           |       トランザクション      |②|
| こｍ           |        コミュニケーション     |③|
| あｒｃ           |        アーキテクチャー     |①|
| あｃ           |        Alt+Ctrl+     |③|
| ｓｃ           |        Shift+Ctrl+     |③|


登録する時の「読み」は、
例として以下の3パターンを考えましたが、他の方法もあるかと思いますので、好きなようにしてください。

①英単語の先頭の数文字とする(3-4文字程度）
②カタカナをタイプするときと同じようにするが子音＋母音は子音のみ、またーは除いて数文字(3-4文字程度）とする。
③使用頻度が多いものは自分がわかりやすければなんでもOK。

（タイプ時）
IMEの「ひらがな」入力でIMEに登録した「読み」をタイプ後、Spaceキーで変換しカタカナを入力します。
※タイプの少ないものは、改善前と同じようにタイプします。

いんｔｎ→インターネット

以上。
oF のアドオン ofxFft が正常に動かなかった話

# 使用環境

* macOS High Sierra
* Xcode 10.0.0
* ofxFft : https://github.com/kylemcdonald/ofxFft 【18.10.25 現在】


# 背景

最近触り始めた openFrameworks で、音を視覚化するアプリを作ってみようと思い立った。折角なので、周波数空間（フーリエ空間）を表現してみたい。でも、ぶっちゃけ FFT を自力で組むのが面倒...。
で、ググってみたら、案の定作っている先人がいらっしゃった（[kylemcdonald/ofxFFT](https://github.com/kylemcdonald/ofxFft)）。どうやら oF で簡単かつ基本的な周波数解析（FFT）が計算できるアドオンらしい。特に細かいカスタマイズする気もなかったから、今回はありがたく拝借することに。

だが、実際動かしてみたらおかしなことが。なぜか、特定の処理を `draw()` で実行しないと正常な値が得られない様子。
最終的には”初歩的なミス”というオチだったが、原因の特定やら対処やらで手こずったので、備忘録を残しておく。

>注意：
本稿は、アドオンの詳細についての説明を省略しております。あらかじめご了承ください。
使い方自体は GitHub に記載されておりますので、そちらをご参照ください。


# 症状

今回行った処理は下記の通り。マイク入力に対して FFT を行い、値を標準出力する。
なお`fft.drawDebug()`は、計測した値を画面にビットマップ出力する。`fft.drawBars()`は、計測した値をグラフで描画する。

```c#:ofApp.h
#include "ofxProcessFFT.h"

class ofApp : public ofBaseApp{

	public:
		...
		ProcessFFT fft;
};
```

```c#:ofApp.cpp
#include "ofApp.h"

void ofApp::setup() {
    ...

    // FFT setting
    fft.setup();
    fft.setNumFFTBins(16);
    fft.setNormalize(true);

    ...
}

void ofApp::update() {
    fft.update();

    // Output values
    float lowVal = fft.getLowValue();
    float midVal = fft.getMidValue();
    float highVal = fft.getHighValue();

    std::cout << "ofApp : " << "Low value : " << lowVal << endl;
    std::cout << "ofApp : " << "Middle value : " << midVal << endl;
    std::cout << "ofApp : " << "High value : " << highVal << endl;
}

void ofApp::draw() {
    fft.drawDebug();
    fft.drawBars();
}
```

主な症状は下記の通り。

* 上記のプログラムでは、正常な計測値が得られる。
* `fft.drawDebug()`をコメントアウトすると、急に正常な値が得られなくなる。
* `fft.drawDebug()`の内部でも各行をコメントアウトしてみたが、特定の処理が影響している様子ではない（むしろ、"処理の数"が影響しているような...？）
* `ProcessFFT`の内部パラメータを全て観察してみたところ、パラメータの1つである`avgMaxSoundOverTime`の値が増加し続けてしまうことに原因があるっぽい（正常時には増え続けていなかった）。
* さらに細かくみると、`avgMaxSoundOverTime`を求めるときに使う値`accumMaxSounds`が増え続けていることが根本的な原因である様子。


# 原因

下記のように、`ofxProcessFFT.cpp`で`accumMaxSounds`が初期化されていなかった。

```c#:ofxProcess.cpp
...

void ofxProcessFFT::calculateFFT( ... ) {
    ...

    float accumMaxSounds;  /* It is not initialized! */
    for (int i = 0; i < graphMaxSound.size(); i++) {
        accumMaxSounds = accumMaxSounds+graphMaxSound[i]; // ...
    }
    
    avgMaxSoundOverTime = accumMaxSounds/graphMaxSound.size(); // ...

    ...
}
```


# 対処

`accumMaxSounds`を初期化してやれば良い。

```diff:ofxProcessFFT.cpp
...

void ofxProcessFFT::calculateFFT( ... ) {
    ...

-   float accumMaxSounds;  /* It is not initialized! */
+   float accumMaxSounds = 0;
    for (int i = 0; i < graphMaxSound.size(); i++) {
        accumMaxSounds = accumMaxSounds+graphMaxSound[i]; // ...
    }
    
    avgMaxSoundOverTime = accumMaxSounds/graphMaxSound.size(); // ...

    ...
}
```


# まとめ

うーん、しょーもない（失礼）。
ただ、結果的に見ると単純な話、初歩的なミスで良かった。おそらく「処理の数が影響してる様子」だったのも、変数のアドレスが関係していたと思われる（偶然ゼロになっていた、またはその逆）。
今回の件を GitHub で直接 issue に出そうかは検討中。

この手のエラーは意外と忘れがちかも...。


# Reference

None
開発中にいきなり503Error

#とりあえず、落ち着いてください。
Google先生に確認をすると、大体高負荷という検索結果がでると思います。
でも、まだリリースしてないのになあ・・

そんな時は、ファイルの所有者を確認してみましょう。

ls -la
でファイルの所有者がroot:root等になっていると、503Errorが出る可能性があります。
そんな時は下記コマンドで所有者とグループを変更しましょう。

sudo chown -R apache:apache {対象のディレクトリ}
※/var/html/www/hogehoge等

開発のミスって大抵うっかりなんですよ。
そういうミスって結構検索では出てきづらいので、少しでも助けになれば。。。
Amazon Linux で aws cliのエラー（import AliasedEventEmitter）

# 事象

複数台ある端末の一つ(Amazon Linux 2018.03)でaws-cliコマンド(例えば$ aws --version)を実行すると以下のエラーが発生。以前（それほど昔ではない）は使えていた。

```bash
Traceback (most recent call last):
  File "/usr/bin/aws", line 19, in <module>
    import awscli.clidriver
  File "/usr/lib/python2.7/dist-packages/awscli/clidriver.py", line 19, in <module>
    from botocore.hooks import AliasedEventEmitter
ImportError: cannot import name AliasedEventEmitter
```

# 環境

| 項目 | バージョン |
|:-:|:-:|
| OS   | Amazon Linux AMI release 2018.03  |
| aws cli   | 1.15.83-1.49  |
| (yumによる)botocore  | 1.10.82  |
| (pipによる)botocore  | 1.10.6  |

# 原因と対策

## (2018/11/08 追記) 正しい対処

どうしても aws cliを最新にしたかったので追加調査したところ以下で修正できました。
pipでインストールしていたbotocoreが古かったのが原因だったようです。

```bash
$ sudo pip install botocore==1.10.82
```

## ダウングレード（非推奨）
aws-cliとbotocoreのダウングレードでも解決できます。

```bash
$ sudo yum downgrade aws-cli python27-botocore
```
※aws-cliとbotocoreは相互に依存性があるので同時に指定しないとダウングレードできません。

## 参考

[AWS Developer Forums: AWS CLI not working on Amazon Linux ...](https://forums.aws.amazon.com/message.jspa?messageID=867548)
macOSのディスク空き容量に関するメモ

# ~/Library/Developer/CoreSimulator/Devices

- http://tech.andhandworks.com/2017/06/xcode.html
- 使わなくなったiOSシミュレータが消せる
- `xcrun simctl list`で使っていないiOSシミュレータを確認
- `xcrun simctl delete unavailable`で使っていないiOSシミュレータを削除
Amazon Linux （OS の基本設定）-Amazon EC2

とりあえず、いろいろ触ってみようという感じですね。

---
###1.タイムゾーンの設定###
EC2は、デフォルトでEDT(米国東部夏時間)となっているのでJST(日本時間)に変更します。

/usr/share/zoneinfo ディレクトリにある元ファイルを /etc/localtime に上書きすることで行えます。 
`cp /usr/share/zoneinfo/Japan /etc/localtime`
`date`
![スクリーンショット 2018-08-28 22.52.00.png](https://qiita-image-store.s3.amazonaws.com/0/280929/4e6f8c38-a2ad-419c-ade7-56f99281105d.png)


###2.言語の設定###

viコマンドで、「ja_JP」にします。
`vi /etc/sysconfig/i18n`
`LANG=ja_JP.UTF-8`
![スクリーンショット 2018-10-25 2.17.34.png](https://qiita-image-store.s3.amazonaws.com/0/280929/88f99b24-7020-d254-a1fa-5cd78b552814.png)
![スクリーンショット 2018-10-25 2.17.07.png](https://qiita-image-store.s3.amazonaws.com/0/280929/4ddf42c9-26e6-dbee-1c8c-c8b95c006e66.png)

catコマンドで中身を確認してみましょう。
`cat /etc/sysconfig/i18n`

通常のLinux サーバであればこの設定だけでいいです。
Amazon Linux の場合、AMI からインスタンスを復元すると今修正した「LANG=ja_JP.UTF-8」元に戻っていまいます。
そこで、以下のとおり設定していきます。

viコマンドで1行追加します。
`vi /etc/cloud/cloud.cfg`
`locale: ja_JP.UTF-8`
![スクリーンショット 2018-10-25 2.22.46.png](https://qiita-image-store.s3.amazonaws.com/0/280929/2861f1a6-95e4-325a-9d19-9c7a37fc9391.png)
![スクリーンショット 2018-10-25 2.22.19.png](https://qiita-image-store.s3.amazonaws.com/0/280929/5301e267-8f2e-65e9-7ae1-10937c4f6c51.png)

catコマンドで、中身を確認しましょう。
`cat /etc/cloud/cloud.cfg`


###3.historyの設定###

historyコマンドを実行した際に、いつ実行したかわかるように設定します。
viコマンドで2行追加します。
`vi /etc/bashrc`
`HISTTIMEFORMAT='%F %T '`
`HISTFILESIZE=2000`
![スクリーンショット 2018-10-25 2.27.35.png](https://qiita-image-store.s3.amazonaws.com/0/280929/d3ee5669-2b5f-5af6-060e-4cdb188b74a9.png)
![スクリーンショット 2018-10-25 2.27.26.png](https://qiita-image-store.s3.amazonaws.com/0/280929/a5ffbaa9-2f55-eda7-4ae6-6c80314f5ee7.png)

tailコマンドで確認、中身を確認してみましょう。
`tail -2 /etc/bashrc`

変更した設定を有効にするためには、リブートします。
`reboot`
オラクルマスターブロンズ12cまとめ

##はじめに
オラクルマスターブロンズを取るために学習中
SQLは全くの素人なので、それぞれの式とかコマンド？とか変数がどう動くかおさらいしながらまとめます。

###distinct
重複業の削除
フィールド名が複数あった場合は、それらを組み合わせて一意になるように重複行を省いて表示する。

```sql:distinct
select
distinct フィールド名[,フィールド名,・・・]
from テーブル名;
```

##SQL関数

###upper
アッパー。
引数に渡したものを全部大文字にする。

###lower
ロウアー。
引数に渡したものを全部小文字にする。

###initcap
イニットキャップ
引数に渡したものを頭文字大文字、ほか小文字と、いい感じに成型する。

```sql:
select upper(last_name),lower(last_name),initcap(last_name)
from hoge;

upper(last_name),lower(last_name),initcap(last_name)
---------------- ---------------- ------------------
AUSTIN           austin           Austin
GRANT            grant            Grant

```
Processingで外部のJavaクラスファイルからprintlnなどを呼び出す時

#はじめに
##概要
Processingでちゃんとクラス分けをして気持ちよく開発していたら、外部のJavaクラスファイルから`println()`などの標準的な関数（厳密には`processing.core.PApplet`以下で定義されているメソッド）が使えへんやん！って思ったので、少し調べて見ました。

##環境
今の自分の環境です。他の環境でも基本的には問題ないと思います。

* Processing
    * Processing3.3.7
* OS
    * macOS HighSierra

##Processingについて
Processingとは、ビジュアルアートなどにおいて、簡単にコーディングができたり学べだりする言語/環境です。2001年から開発が続いており、ビジュアルアートにおけるソフトウェアリテラシや、テクノロジにおけるアートリテラシの向上に貢献しています。現在ではたくさんの学生、アーティスト、デザイナー、研究者、一般人(hobbyists)がProcessingを用いて学んだりプロトタイピングをしたりしています。（[公式サイト](https://processing.org/)の説明文を適当に意訳）

つまりアートとかプロトタイピングがさっとできてとても楽しく素晴らしい環境ということです。
#結論
現状、自分の知識の範囲では、関数を使いたい外部Javaクラスファイルに`processing.core.PApplet`をインポートして、クラス内部でPAppletのインスタンス(ベースクラス/エントリーポイントのクラスのインスタンス)を保有し、そのインスタンスから関数をコールすると良いと思っています。つまり、`Test.pde`でプロジェクトを作って、`Human.java`というクラスファイルを同じディレクトリに作成したとすると、

```Java:Test.pde
void setup() {
  Human Oka = new Human();
}

void draw() { }
```

```Java:Human.java
public class Human {
  public Human() {
    println("ware umaretari"); //これだとprintlnが定義されていないと怒られる
  }
}
```

を、

```Java:Test.pde
void setup() {
  Human Oka = new Human(this);
}

void draw() { }
```

```Java:Human.java
import processing.core.PApplet;

public class Human {
  PApplet parent;
  
  public Human(PApplet p) {
    this.parent = p;
    this.parent.println("ware umaretari");
  }
}
```

とすると良いということですね！


#まとめ
今後もコアな使い方(?)ができるよう頑張ります。もう少しクレバーなやり方があれば教えていただけると幸いです。ちなみに、もともとベースクラス（今回の例ではTestクラス）からメソッドを呼び出すことができるのはわかっていたのですが、もっと一般的なやり方ができるのでは？というのは[ControlP5](https://github.com/sojamo/controlp5)のコンストラクタで自分のインスタンスを渡すことになっているということから気づきました。

#参考文献
[PAppletのJavadocs](http://processing.github.io/processing-javadocs/core/processing/core/PApplet.html)
[ControlP5のgitリポジトリ](https://github.com/sojamo/controlp5)
findチートシート

findコマンドでよく使う構文をメモ代わりにどんどん書いていきます。

### 再帰的なgrep

```shell-session
$ find ./ -name '*' | xargs grep hogehoge
```

拡張子がphpのものだけならばfindの時点で絞ってあげます。

```shell-session
$ find ./ -name '*.php' | xargs grep hogehoge
```

よく使うのに忘れがちな構文です。

### 「1年前～現在」までのファイルの合計容量(GB)
過去のファイルを消してディスクの容量削減をする際に、削除後どのぐらいの容量になるかを試算するために使います。
以下のパターンだと、「過去1年間分のファイルだけ残す場合、どれだけの容量まで減るか?」という試算になります。

```shell_session
$ find ./ -mtime -365 -type f -printf "%s\n" |awk '{sum += $1; printf("\r%d",sum/1024/1024/1024) }; END{print""};'
```

### 1年前以前のファイルを削除
まずは該当ファイルを表示して確認

```shell-session
$ find ./ -mtime +366 -type f
```

さらにどれぐらいの容量か確認

```shell-session
$ find ./ -mtime +366 -type f -printf "%s\n" |awk '{sum += $1; printf("\r%d",sum/1024/1024/1024) }; END{print""};'
```

そしてrmコマンドで本当に削除

```shell-session
$ find ./ -mtime +366 -type f -exec rm {} \;
```

### 更新日が最近のファイルを検索する

カレントディレクトリ内で更新日が最近の5日以内のファイルを見つける。-lsで詳細情報を付加。

```shell-session
$ find ./ -mtime -5 -ls
```

更新日が最近の5日以上前のファイルを見つける（こう書くと古い方を見てしまう）

```shell-session
$ find ./ -mtime +5
```

更新日がちょうど5日前のファイルを見つける

```shell-session
$ find ./ -mtime 5
```

### ファイル名のみ表示

```shell-session
$ find ./ -type f -printf "%f\n"
```

### UID,GID を一括置換

```shell-session
$ find / -uid ${OldUID} -print0 | xargs -0 chown {対象ユーザ名}
$ find / -gid ${OldGID} -print0 | xargs -0 chgrp {対象グループ名}
```
GIPHYとgifsicleでgifアニメーション作成＆最適化

qiitaを見ているとgifアニメーションを使った表現を見かけます。
文字に起こすより画像や動画での表現がわかりやすい場面もあると思うので、gif作成アプリの紹介と作成したファイルサイズが大きかったので最適化を行ってみます。

環境はmacOSX。

# GIPHY Capture
<https://itunes.apple.com/jp/app/giphy-capture-the-gif-maker/id668208984?mt=12>
デスクトップのキャプチャアプリ。
キャプチャー後に開始と終了のトリムや画像の品質の指定が手軽に行える。
![Oct-25-2018 00-17-31.gif](https://qiita-image-store.s3.amazonaws.com/0/298766/6f5d0245-fd91-20f7-882b-46561be9fef0.gif)

[ストア](https://itunes.apple.com/jp/app/giphy-capture-the-gif-maker/id668208984?mt=12)からインストールできるのでちゃちゃっと。
アプリは直感で使えたので説明は省略。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/298766/d6869358-da6c-fda3-94d8-34af99ea1f3b.png)

気になったのは中間地点で不要な部分の切り取りができない。
手間取ってるとはじめから撮り直しなのでドキドキしちゃう。

冒頭のgifでも品質を`Low`に設定しているが、1.9MBもあるので最適化を行ってみる。

# gifsicle
<https://www.lcdf.org/gifsicle/>
コマンドラインでgifファイルの編集ができる。
ループの設定やコマ送りの速度なんかを変えられるもの。
このツールでgifの最適化を行う。

homebrewでインストールできるのでちゃちゃっと。
![Oct-25-2018 00-52-19.gif](https://qiita-image-store.s3.amazonaws.com/0/298766/1294724b-d534-9c86-88df-5fd470a6efad.gif)

```terminal
$ brew install gifsicle
```

## 最適化
オプション`--optimize[=LEVEL]`の指定で最適化が行える。
`man gifsicle`でオプション内容をみると、1から3の指定ができる。

```terminal
-O1  Stores only the changed portion of each image. This is the default.
-O2  Also uses transparency to shrink the file further.
-O3  Try several optimization methods (usually slower, sometimes better results).
```
余程問題がでない限り、`3`で問題なさそう。

```terminal
$ gifsicle --optimize=3 input.gif > output.gif
```
* 圧縮前 1.9MB：
![Oct-25-2018 00-17-31.gif](https://qiita-image-store.s3.amazonaws.com/0/298766/6f5d0245-fd91-20f7-882b-46561be9fef0.gif)
* 圧縮後 848KB：
![output.gif](https://qiita-image-store.s3.amazonaws.com/0/298766/74da1c57-8656-a661-ad32-0d55b690ab78.gif)

コード程度なら違いは分からないです。
サイズは半分になるのでやっておくと取扱いも楽になりそうですね。
vue-routerでログインしていない場合はログインページに戻す処理

ログインしているかどうかはvuexを使ってisLoggedというstateに持っている。
ポイントは一度routerという変数にrouterオブジェクトを入れて、から`router.beforeEach`を使って各ルーティングの前にリダイレクト条件を追加するところです。

これはNG:frowning2:

```javascript
export default new Router({
  routes: [
//
  ],
});
```

これが正解:relaxed:

```javascript

import Vue from "vue";
import Router from "vue-router";
import Login from "@/views/login";
import Mypage from "@/views/mypage";
import store from '@/store/index';

Vue.use(Router);

const router = new Router({
  routes: [
    {
      path: "/",
      name: "top",
      component: Login,
      beforeEnter: (to, from, next) => {
        next('/login');
      }
    },
    {
      path: "/login",
      name: "login",
      component: Login
    },
    {
      path: "/mypage",
      name: "mypage",
      component: Mypage
    },
  ]
});

router.beforeEach((to, from, next) => {
  if (to.name === "top" ||to.name === "login") {
    if(store.state.auth.isLogged){
      next('/mypage');
    }else{
      next();
    }
  } else {
    if(store.state.auth.isLogged){
      next();
    }else{
      next('/');
    }
  }
});

export default router;
```
Xcodeで実機のみThread 1: signal SIGABRT

#事象
Xcodeで作成したプログラムがシミュレータでは正常に動くが、実機（iphone6 IOS12.0.1)ではThread 1: signal SIGABRTが出力され真っ白な画面に

コード自体は以前テストをした時からは全く編集もしていなかった


#原因
DeploymentTargetを11.4から12.0に変更していたため、11.4に変更することでエラーが消えた。
DeploymentTargetは実行可能な最低のOSの定義であるため、ここを変更する必要は無かった。
（それでも実機はIOS12.0.1なのでここでエラーが起こる想定はしていなかったが）

むやみに変更する必要のないところは変更しない方がいいってことですね
自動で拡大縮小するメッセージウィンドウの作り方【Unity】【C#】

#概要
拡大して表示され、一定時間表示をしたら今度は縮小して消えるメッセージウィンドウの作り方を紹介します。
やり方としては、CoroutineとDoTweenの合わせ技です。

#コード

```C#:MessageWindow.cs
using System.Collections;
using UnityEngine;
using DG.Tweening;
using TMPro;

//メッセージウィンドウにアタッチして使います
public class MessageWindowCtr : MonoBehaviour
{
    [SerializeField] float messageScaleTime = 0.3f;
    [SerializeField] float displayTime = 2.5f;
    [SerializeField] TextMeshProUGUI MessageText;

    public IEnumerator TimeForDisplay(string message)
    {
        MessageText.text = message;
        transform.DOScale(Vector3.one, messageScaleTime);
        yield return new WaitForSeconds(displayTime);
        transform.DOScale(Vector3.zero, messageScaleTime);
    }

    //アタッチされたScript上で右クリックを押して動作確認できます
    [ContextMenu("testMessage")]
    public void testMessage(){
        StartCoroutine(TimeForDisplay("これはテストです！"));
    }
}
```

#エディタ画面
<img width="325" alt="ScreenShot 2018-10-25 0.36.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/237014/d141b40e-b3b5-3f41-1880-c93e63718684.png">



#デモ
![messageWindowDemo.mov.gif](https://qiita-image-store.s3.amazonaws.com/0/237014/1bcde232-fab6-5cf0-d6bc-254845be0b2b.gif)
git reset でコミットをやり直す

# 環境

- Git: 2.19.0

# コマンド

まずはコミットする

```bash
git commit -m "commit 1"
```
で、またコミットする

```bash
git commit -m "commit 2"
```
間違えたから最初のコミットに戻す。
HEAD何某のところは`git log`で確認する。
`--soft`を付けると、変更内容は維持したまま、HEADの位置だけ戻る。

```bash
git reset --soft HEAD@{1}
```
んで、もっかいコミットする。

```bash
git commit -m "commit 3"
```
`git log`で確認してみると、commit 2 が commit 3 で上書きされている。

おわり
Rails-tutorial初心者（４章）（自分メモ） 

＠2018/10/21
開始します

基本的に、２周目のときにブラッシュアップできたらなぁっておもっています。

### 開発環境
下記vagrantにて構築して利用しています。
OS:CentOS release 6.10 (Final)
ruby :ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
rails :Rails 5.1.6


## ゴールイメージ
>4.5.1 本章のまとめ
Rubyは文字列を扱うためのメソッドを多数持っている
Rubyの世界では、すべてがオブジェクトである
Rubyではdefというキーワードを使ってメソッドを定義する
Rubyではclassというキーワードを使ってクラスを定義する
Railsのビューでは、静的HTMLの他にERB (埋め込みRuby: Embedded RuBy) も使える
Rubyの組み込みクラスには配列、範囲、ハッシュなどがある
Rubyのブロックは (他の似た機能と比べ) 柔軟な機能で、添え字を使ったデータ構造よりも自然にイテレーションができる
シンボルとはラベルである。追加的な構造を持たない (代入などができない) 文字列みたいなもの

Rubyではクラスを継承できる
Rubyでは組み込みクラスですら内部を見たり修正したりできる
「deified」という単語は回文である

# 開始
ここはrubyについての扱う章のようです。

サクッとおわらせたいところ。



### 4.1.2 カスタムヘルパー

・あたらしくつくったメソッドのことです。

***ヘルパーとは？***

`app/views/layouts/application.html.erb`
と
`app/helpers/application_helper.rb(ヘルパー)`

で、ヘルパーを編集することで、よりHTMLをシンプルにできるってことかな？

ヘルパーは動的なHTMLを作成するのに、必要なメソッド・・・・？

viewで個別の設定をもたせて、共通部品や動的な要素の処理をヘルパーに持たせるイメージ。


***そもそもrubyのmoduleとはなにか？***




### 4.3.2 ブロック〜
 @2018/10/23

ブロックについての理解・・・・これは難しい！！

```ruby:each{}のパターン
>>(1..5).each { |i| puts 2 * i } 
2
4
6
8
10
=> 1..5
```

```ruby:do~endのパターン
>>(1..5).each do |i|
>>  puts 2 * i
>> end
2
4
6
8
10
=> 1..5
```



```ruby:
>> 3.times { puts "Betelgeuse!" }   # 3.timesではブロックに変数を使っていない
"Betelgeuse!"
"Betelgeuse!"
"Betelgeuse!"
=> 3
```
↑これは.「timesメソッド」

#### timesメソッドについて

```ruby:
オブジェクト.times{|変数|
  //繰り返したい処理 
  //変数に0から対象のオブジェクトが持つ数値から1引いた数を順番に代入しながら、繰り返し処理を行います。
}

or

オブジェクト.time do |変数|
  //繰り返したい処理
end


```
これ、変数に0から順番に代入とあるが、ブロック内に変数やdoのあとに変数がない場合はどうなっているんだろうか？
下記の様な場合・・・

```ruby:変数なしバージョン
オブジェクト.times{
  //繰り返したい処理 
}

or

オブジェクト.time do 
  //繰り返したい処理
end
```
`A.XXXXXXXXXあとで調べよう`

それ以外の疑問点は、
 ・ そもそもdo end について
   →これはブロック？{}と同じ意味か？
 ・ ブロック｛｝とはなにか
 ・ ....


（まずは前にすすめること重視でいきます。というか、たくさんコード見ればだいぶ動きがつかめる気がします。）


### 4.3.3 ハッシュとシンボル

inspectとは・・・・・

Hash.mergeｍとは
>hash.merge(other_hash)
mergeメソッドは、2つのハッシュを統合します。レシーバhashと引数other_hashのキーと値を集め、新しいハッシュに入れて返します。重複するキーがあるときは、other_hashの値が使われます。

 { "a" => 100, "b" => 200 }.merge({ "b" => 300 })
→ハッシュ と ハッシュをマージします。
 キーはがかぶっていたら、マージの引数が優先です。
 なので左の”ｂ”のキーの値が右のbのキーの値にうわがかれます。

### 4.3.4 CSS、再び



### 4.4 Rubyにおけるクラス
@2018/10/24



・ハッシュとシンボルがいまいちパッと頭が理解してくれない
・attr_accesser :name, :email
→なぜアクセッサのところでシンボルがでてくるのか？
 @name,@email のインスタンス変数のほうではないのか？

次の週でもうすこし詳しく調査します。



以上.
GithHub Pagesのユーザ/組織ページとプロジェクトページの違いまとめ@2018年10月

## はじめに
GitHub Pages聞いたことはあったけど、一から自分で作ったことなかった人の
2018年10月時点のまとめです:raised_hand:

割と古めの記事が多かったので、改めて今の情報を整理してみました。

## まとめ
- GitHub Pagesには大きく分けて2種類ある（ユーザ/組織 or プロジェクト）
- それぞれできることが微妙に違う
- 手早く簡単に作って、楽して運用するならプロジェクトのタイプで作ると楽

:information_source: 組織というとピンときにくいかもしれませんが
GitHubのorganizationのことです。

## ざっくり比較表
先に一覧で見てから個別にフォローしていきます。

|  | ユーザ/組織 | プロジェクト |
|:-:|:-:|:-:|
| リポジトリ名 | `<username or org>`.github.io | 任意のモノが可能 |
| 公開ブランチ | masterのみ | master/masterのdocsディレクトリ/gh-pages |
| 生成されるURL | https://`<username or org>`.github.io | https://`<username or org>`.github.io/`<projectname>` |
| カスタムドメイン | 利用可能 | 利用可能 |

## リポジトリ名
▼ユーザ/組織の場合
フォーマットの沿ったリポジトリ名にする必要があります。

このフォーマットに沿った名前の場合はGitHub Pagesとして公開するとして、
ページ公開設定も自動で入ります。

▼プロジェクトの場合
お好きなリポジトリ名で大丈夫です

## 公開するブランチ
▼ユーザ/組織の場合
masterのみです。masterの直下を公開することになります。
:warning: HUGOなどで特定のディレクトリに吐き出す系だと、masterの直下にいろいろ展開される必要があり、あまりおもしろくありません...

▼プロジェクトの場合
リポジトリにファイルが登録されたら,3つの選択肢から選べます。

- master（これはユーザ/組織の場合と同じ）
- masterのdocsディレクトリ（masterブランチの特定のディレクトリのみ公開できる）
- gh-pages（masterブランチでなく違うブランチで公開内容を管理したい時）

:information_source: HUGOなどの静的ファイルのgeneratorと組み合わせる場合、
特定のディレクトリを公開できたほうがルートディレクトリにファイルがあふれなくて都合がよい

## 生成されるURL
▼ユーザ/組織の場合
以下のような感じです。ポートフォリオなど、個人にフォーカスをあてるならこのURLがよいと思う。
`https://<username or org>.github.io`

▼プロジェクトの場合
以下のような感じです。特定のリポジトリの説明とかにはこの形式がよさそうですね
`https://<username or org>.github.io/<projectname>`

## カスタムドメイン
これはどちらの場合も設定できるようです。

## 雑なまとめ
個人のポートフォリオ程度を簡単に作成・運用するならプロジェクトページで
masterブランチのdocsディレクトリ公開の設定がいいと思います。

URLはプロジェクト名が入る分、長くなるのが微妙ですが、
HUGOなどと合わせた時も、ルートディレクトリに直接展開するのは避けたい。

## 参考
https://help.github.com/articles/user-organization-and-project-pages/
マイページと他の人のページの条件分岐法

#アプリケーションでマイページと他の人のページの条件分岐のやり方
**マイページには編集のボタンがあって、今までお気に入りした投稿一覧があって、、、などと条件分岐したいときがあるはず...**

**ルーティングでresousesを使ってるので、一括で書いており、条件分岐するしかないや...**

そんなあなたに意外と盲点な条件分岐の方法を伝授します！！
**1)ユーザーはイベントを投稿できる**
**2)ユーザーのホームページの内容は全てusers/show.html.erbに書かれている**
**3)ログインしているユーザーが自分のuser_idのページを見るときだけ、マイページに飛ぶ**
ポイントはこの３つです。

#条件分岐は...
```erb
:view/users/show.html.erb
<% if user_signed_in? && current_user.id.to_s == params[:id] %>
<!--マイページ(編集や削除ができる)-->
<!--例えば、誰のホームページなのかわかりやすくするためにそのユーザーの名前を表示するとき-->
<%= current_user.name %>
<% else %>
 <!--他の人のページ(編集や削除はできない)-->
<!--投稿されたイベントをクリックしてそこから他の人のページに飛んだ場合-->
<%= event.user.name %>
<% end %>
```

で条件分岐することができます。
#※注意
```ruby

current_user.id == params[:id]
```

ではエラーが起きてしまいます。
これは、current_user.id は　Fixnum型なのに対し、params[:id]は　　String型で異なる型のなので、型を統一しなければならないからです。

あと、

```ruby

user_signed_in?
```

も忘れないようにしましょう！
これがないユーザーとしてログインしてないときにcurrent_userってなに？！とエラーを吐かれてしまいます

慣れないと条件分岐って難しいですよね、最初は僕もベン図（小学校の時に習ったやつ)を書きながら条件分岐を考えてりしていました笑
ここが慣れるともっとたのしめると思います!


ではでは、、、
【もくじ編】忙しい人のためのPower BI Desktop Update

忙しい人のためのPower BI Desktop Update

2018年1月以降のアップデート情報の目次です。


# 注意事項

- 毎月の[Power BI Blog(公式)](https://powerbi.microsoft.com/ja-jp/blog/)のPower BI Desktop Update紹介記事の目次です。
- アップデート内容の網羅はしていません。詳細は公式ブログをご確認ください。
- 英語が不自由なので、内容に誤りがある場合があります。ご容赦ください。


# もくじ

## [2018年1月](https://qiita.com/h_kobayashi1125/items/9eb4ac99b2f707364eab)

- ページの表示と非表示
- グラフのデータラベルの背景色の変更
- 軸ラベル領域の調整
- 棒グラフの幅の調整
- フィールドリストへの日付階層の表示（プレビュー）
- 相対日付の基準日選択
- Q＆Aで上位N項目の選択
- クイックメジャーで相関係数

## [2018年2月](https://qiita.com/h_kobayashi1125/items/f0bcfd5eda090fcd325f)

- 複数チャートでのフィルタリング
- 複数ページへのスライサーの同期
- 数値スライサーの改善（プレビュー）
- ジオコーディングの高速化（WEBプレビュー）
- チャート外へのデータラベル表示
- 書式設定＆分析ウインドウの検索
- 日付テーブルのマーク
- クイックメジャーの正式機能化
- UTCNOW(),TUTCODAY()関数の追加


## [2018年3月](https://qiita.com/h_kobayashi1125/items/4137bfe95fcb1b6d106b)

- レポートページツールヒントの導入（プレビュー）
- ブックマークの正式機能化
- テーブル・マトリクスの書式設定の改善
- ビジュアルヘッダーの非表示化
- デフォルトのビジュアル作成時の位置改善


## [2018年4月](https://qiita.com/h_kobayashi1125/items/0b836a74e4f5c77534e5)

- アクションボタン
- Q＆Aエクスプローラー（プレビュー）
- 複合チャートのライン書式
- 規定のソート条件の改善
- 数値スライサーの正式機能化
- 言語スキーマのアップデート
- 新しいDAX関数の追加：COMBINEVALUES()



## [2018年5月](https://qiita.com/h_kobayashi1125/items/31867fa00c8b33d206e9)

- 異なるフィールドでの条件付き書式
- 高度なスライサーの同期
- Logスケールの改善
- ファネルチャートのデータラベル
- 折れ線の幅ゼロ指定
- ドリルスルー


## [2018年6月](https://qiita.com/h_kobayashi1125/items/86b01e13e3dfb0442b50)

- ハイコントラストへの対応
- ドーナツチャートの半径制御
- 円グラフ・ドーナツチャートのラベル位置変更
- 複合チャートのラベル調整
- モバイル用レイアウトの改善
- データビューでのフィルタ・ソート


## [2018年7月](https://qiita.com/h_kobayashi1125/items/35e054be5365ed76d6ed)

- 複合モデル
- ビジュアルヘッダーの改良
- 壁紙の書式設定
- ビジュアルプロパティのカスタマイズ
- テーブル・集計表へのツールヒント適用
- 各ビジュアルのツールヒントのオン・オフ制御
- スライサーのアクセシビリティの向上
- 書式設定画面の改善
- 複合グラフへのステップラインチャートのサポート
- 複合グラフの系列値の非表示
- ソートしやすさの改善
- 分布要因の分析

## [2018年8月](https://qiita.com/h_kobayashi1125/items/dc62adc401bd5a3697a2)

- レポートページのPDFでのエクスポート
- ブックマークのグループ
- テーマ設定の一般機能化
- スライサーの修正
- 値による条件付き書式設定
- Python統合（プレビュー）
- Q＆Aの改善
- メジャーのデータカテゴリ
- 統計DAX関数の追加


## [2018年9月](https://qiita.com/h_kobayashi1125/items/a7622e42cc551654296a)

- ドットプロットレイアウトのサポート
- テーブル、集計表からのコピー
- 組み込みのレポートテーマ
- ツールヒントの一般機能化
- 分析・書式設定フィールドのアクセシビリティの向上
- 集計の管理
- PDFファイルコネクタ
- M言語インテリセンス


## [2018年10月](https://qiita.com/h_kobayashi1125/items/74e2bee44c7aa9399344)

- フィルターカードによる検索
- ArcGISマップのパフォーマンス向上
- DAXエディターの改善
- Power BI Serviceでの複合モデル・集計のサポート
- 合計・カウント以外のデータの増減説明の対応
- クエリエディター上のデータプロファイリング機能
- あいまい結合（プレビュー）
- データエクスポートのオプション
create-react-app + firebaseRDB

# create-react-app

とりま

```
create-react-app myapp
```

Happy hacking!!!

# firebaseでプロジェクト作る

https://console.firebase.google.com/

# firebaseをinstallして初期化

```
npm install firebase --save
firebase login
firebase init
```

メタルっぽい炎が出てくる。
適当に使うもの選んでエンター
さっき作ったプロジェクトを選択する

# srcの下にfirebaseの設定ファイル置いとく

firebaseのページから設定情報取ってくる

```src/firebase/index.js
import firebase from 'firebase';
import { firebaseConfig } from './config.js';

export const firebaseApp = firebase.initializeApp(firebaseConfig);
export const firebaseDb = firebaseApp.database();
```

```src/firebase/config.js
// Initialize Firebase
export const firebaseConfig = {
    apiKey: "xxxxxxxxxxx",
    authDomain: "xxxxxxxxxxx",
    databaseURL: "xxxxxxxxxxx",
    projectId: "xxxxxxxxxxx",
    storageBucket: "xxxxxxxxxxx",
    messagingSenderId: "xxxxxxxxxxx"
};
```
# App.jsでDB情報読み込む

```src/App.js
import { firebaseDb } from './firebase/index.js'
```

# ビルドしてデプロイ

```
npm run build
firebase deploy
```