OmniAICreator/Qiita-1.07M huggingface dataset:
C++ Builder XE4 > TeeChart > 軸 > 主目盛と副目盛 > [長さ]と[間隔]と[太さ]を変更する

```txt:動作環境
C++ Builder XE4
```

### 概要

- 主目盛と副目盛の表示長さと間隔を変更する

### 実装

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <DateUtils.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
	Chart1->Series[0]->XValues->DateTime = true;
	Chart1->BottomAxis->DateTimeFormat = L"nn:ss";

	TDateTime dt;

	dt = Now();

	double yval;
	for (int idx=0; idx < 10; idx++) {
		yval = (1+ idx) % 2;
		Series1->AddXY(dt, yval, "", clRed);
		dt = IncSecond(dt, 1);
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Chart1->LeftAxis->TickLength = 10;
	Chart1->LeftAxis->MinorTickLength = 20;

	Chart1->LeftAxis->Increment = 0.2;
	Chart1->LeftAxis->MinorTickCount = 3;

	Chart1->LeftAxis->Ticks->Width = 8;
	Chart1->LeftAxis->MinorTicks->Width = 4;
}
//---------------------------------------------------------------------------
```


### 動作例

ソフト起動時
![2019-01-09_16h41_10.png](https://qiita-image-store.s3.amazonaws.com/0/32870/d82cd726-1e0b-1f53-f134-260bad7cc4bf.png)

Button1押下後
![2019-01-09_16h54_59.png](https://qiita-image-store.s3.amazonaws.com/0/32870/d6ad8e68-2774-1ba5-b490-04b502c153ba.png)

- 主目盛の長さが10に
- 副目盛の長さが20に
- 主目盛の間隔が0.2に
- 副目盛の間隔は主目盛に対して(3+1)等分に
- 主目盛の太さを8に
- 副目盛の太さを4に
Ionic 3とAWS Amplifyを使ってみる (その1: S3へのデプロイ編)

Amazonが発表して久しい[Amplify](https://aws-amplify.github.io/)ですが、解説書の類が散逸していてわかりにくいので自分でいじくって、暇があったらまとめていきたいと思ってます。まずは[Ionic](https://ionicframework.com/) 3との連携で、今回はIonic Web Appを[Amazon S3](https://aws.amazon.com/s3/)にデプロイする部分までです。

### 前提
- Ionic開発環境が設置されていること
- AWS CLIがインストールされていること
- AWSのAdmin権限を持っていること 
- AWS Admin権限をもったアカウントのプロファイルがAWS CLI環境に登録されていること

### Ionic側準備
今回は大したアプリケーションを開発するわけではないので、Blank雛形で良いでしょう。

```bash
ionic start myApp blank
cd myApp
ionic serve
```

この時点でブラウザが起動し、http://localhost:8100/にてIonicアプリが表示されるはずです。

### Amplifyインストール
今回の「肝」であるAmplifyをインストールします。

```bash
npm install --save aws-amplify
npm install --save aws-amplify-angular
npm install --save ionic-angular
```

### Amplify設定
まずはIonicのWebアプリをAmazon S3上にデプロイすることをゴールとします。amplify initでいろいろ聞かれますが、AWS CLIで登録してあるAdmin権限を持ったアカウントを指定することさえ忘れなければなんとかなるでしょう。あと、利用するエディタを聞かれます。Typescript関連のライブラリを設定していると思われます。

```bash
npm install -g @aws-amplify/cli
amplify init
amplify push 
```

最後のamplify pushでAWS側のバックエンドを設定するコマンドが走り、開発環境側にはaws-exports.jsというJavascriptファイルが生成されます。.jsのままだとTypescriptから扱いにくいので、aws-exports.tsに名前を変えます。でも絶対に作業漏れが発生するので、package.jsonの中身を以下のように更新すると良いでしょう。

```json:package.json
  "scripts": {
    "start": "[ -f src/aws-exports.js ] && mv src/aws-exports.js src/aws-exports.ts || ionic-app-scripts serve",
    "clean": "ionic-app-scripts clean",
    "build": "[ -f src/aws-exports.js ] && mv src/aws-exports.js src/aws-exports.ts || ionic-app-scripts build",
    "lint": "ionic-app-scripts lint"
  },
```

main.tsに以下を追記。このエントリを書く時点では、[Amazonのドキュメント](https://aws-amplify.github.io/docs/js/ionic)は間違ってますね。

```typescript:main.ts
import Amplify from 'aws-amplify';
import amplify from '../aws-exports';

Amplify.configure(amplify);
```

app.module.tsにAmplify関連エントリを追加。

```typescript:app.modules.ts
import { AmplifyAngularModule, AmplifyService } from 'aws-amplify-angular';

@NgModule({
  ...
  imports: [
    ...
    AmplifyAngularModule
  ],
  ...
  providers: [
    ...
    AmplifyService
  ]
  ...
});
```

### S3へのホスティング

```bash
amplify hosting add #...開発ではDEVを選択　S3環境が設定される
amplify hosting publish #...S3へのアップロード
```

amplify hosting addで、S3側の環境が設定されます。開発中はDEV環境を選択するほうが良いでしょう。DEV環境はIonic WebアプリをS3にデプロイします。（かつてはionic cordova build webappコマンドを流して、できあがったwww/以下をS3にコピーしていた作業がamplify hosting publishコマンド一発になります)

amplify hosting addでPROD環境を選ぶと、S3だけではなくAmazon Cloudfrontを使った環境にデプロイしてくれますが、Cloudfrontは修正にえらく時間がかかるので、開発〜テストはS3のみを使うDEV環境のほうが良いでしょう。

この状態で、aws-exports.tsにある　aws_content_delivery_url　で示されるURLをブラウザで開けると、おなじみのIonic Blank画面が表示されるはずです。また、以後はionic serveコマンドを実行しても、localhost:8100ではなくS3上のコンテンツが表示されるはずです。

### 今回のまとめと次回予告

IonicにしてもAmplifyにしても「面倒な」作業をいろいろ自動化してくれているのはありがたいことです。特にサーバレスなモバイルアプリを開発する場合、これらの「面倒な作業の自動化」は開発者により多くのTweet時間を与えてくれます。ありがたや。

もちろん、Amplifyの機能はS3へのデプロイだけではありません、次回はAwS Cognitoを使った認証機能実装を紹介します。
Macのプログラミング環境を引っ越しするためのまとめ

Macをグレードアップすることになったので、引っ越し作業を見据えてこの機会にMacのプログラミング環境を棚卸ししたいと思います。
この記事は、その時に実施した内容のメモです。

(平成が終わるまえに、作業環境の大掃除!)

# 諸注意

普段　Go言語と Node.js を中心に使用しているため、それらに関係するものが大量に含まれています。
また、シェルは fish shell を使用しています。
使用しない技術やツールの部分については参考程度にして下さい。

# 今の環境を棚卸する

## dotfiles

`.bashrc` など、 $HOME ディレクトリに存在するドット( `.` )付きファイルをGitHubで管理してしまいます。

dotfiles リポジトリを作成します。
(私が結果として作成したリポジトリはこちら <https://github.com/yoskeoka/dotfiles>)

dotfiles リポジトリの作成については、こちらを参考にしました。(とても参考になりました！)

* [dotfilesをGitHubで管理](https://qiita.com/okamos/items/7f5461814e8ed8916870)
* [ミニマルに始めるDotfiles自動化計画](https://qiita.com/okamos/items/40966158d0271ae7198b)

## brew

brew でインストールしたものは `brew bundle` を使えば一発で棚卸し出来ます。

```sh
# brew でのインストール結果を Brewfile に書き出す
brew bundle dump

# Brewfile を元にインストール
brew bundle install
```

## fisher

今まで `fisher install` でインストールしたものを一覧化しておきましょう。

```sh
fisher list -l
```

## npm

今まで `npm i -g` でインストールしたものを一覧化しておきましょう。

```sh
npm ls -g --depth=0
```

## yarn

今まで `yarn global add` でインストールしたものを一覧化しておきましょう。

```sh
yarn global list --depth=0
```

## Visual Studio Code

[Settings Sync](https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync) を使うのが一番ですが、使いたくない時は以下でインストールコマンド形式で一覧化出来ます。

```sh
code --list-extensions | xargs -L 1 echo "code --install-extension"
```

`TODO:` 他の棚卸しについても、棚卸し作業の進行に従って随時更新していきます。

# 環境構築編

## dotfiles, brew, go, npm, yarn, fish
作成した [dotfiles リポジトリ](https://github.com/yoskeoka/dotfiles) を Clone してきて、コマンドを実行するだけ。

```sh
# 0. XCode Command-Line Tools がまだなければインストールが必要
xcode-select --install

# 1. Git Clone
git clone https://github.com/yoskeoka/dotfiles.git ~/dotfiles

# 2. Install
bash ~/dotfiles/setup.sh initialize

# 3. dotfiles を ~/ 以下に反映
bash ~/dotfiles/setup.sh deploy
```

# まとめ
コマンドライン周りの環境は手軽に確実に環境を再現できるので、棚卸しをしてみましょう！

公開したくない情報がdotfilesに含まれている場合は 2019年01月08日 から無料で使用できるようになったGitHubのプライベートリポジトリを使用すると良いと思います。
追伸。やっとの思いでstationでオンプレミス（社内）のMattermostやRedmine、GitLabをSlackと一緒に管理できました。業務系ＳＥより

## stationについて

WEBアプリの一元管理ができるツールです。

詳しくは、以下URLを参照ください。
[追伸。そろそろおまえもstationでslackやWebアプリを一括管理をするように。　母より](
https://qiita.com/shojimotio/items/77678d55a2d1557f5e68)

## 困ったこと

- クラウドのサービスしかない。
- 利用したいのはオンプレミスのサービスがほとんど。

## オンプレミス（社内）のサービスも追加する

調べたら、下記URLがありました。
英語でごにょごにょしているので、手順を載せていきます:confounded:
https://community.getstation.com/t/custom-url-support-support-any-web-app/363

### 手順

#### GitLab

1. アプリの追加ボタンでGitLabを追加
![image.png](https://qiita-image-store.s3.amazonaws.com/0/97070/56e99b58-f778-ea96-e38c-79b75739ba35.png)

2.GitLab.comが開きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/97070/7a1f6476-5362-1645-7983-6235492ed2e0.png)

3. メニュー「View」→「Developer」→「Toggle Page Developer Tools」をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/97070/bb03808b-f47a-b146-a2b2-6ba80c7532ba.png)

4.開発ツールの「Console」で以下のコマンドを打ちます。

`location.href="社内GitLabのURL";`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/97070/375892d2-107b-ac44-3156-e632224502f7.png)

5.社内GitLabに接続します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/97070/16d18848-0210-e785-244e-840221fbd524.png)

以上です。（再起動後も問題なく社内GitLabを見ています）


#### Mattermost

手順はほぼ、GitLabと同じですが、Mattermostがないんですよね。
「Mint」がアイコンが似ていて、頭文字が「M」なので利用しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/97070/ba4c7f61-0241-7de1-b4a4-083815a51ce4.png)

Redmineやグループウェア等も同様にそれっぽいアプリを代用で利用して

`location.href="社内アプリのURL";`　で設定します。



## まとめ・感想

PC起動時に業務で利用するアプリをクラウド、オンプレミス関係なくいっぺんに開いてくれるので、Chrome君がちゃんとWEBブラウザとしての役目を果たしてくれるようになって気持ちが軽くなりました。

ちょっと裏技っぽいですねｗ、Stationの質問サイトに記載してあった方法ですが、正規の使い方とは違うと思いますのでご留意ください。

https://community.getstation.com/t/custom-url-support-support-any-web-app/363
【Linux】crontabの使い方

#crontabとは
コマンドを指定したタイミングで実行する機能です。
指定した日時での実行だけでなく、一定間隔で実行することもできます。

#コマンド

##crontabが動作しているかを確認
```
service crond status
```

##crontabを起動
```
service crond start
```

##crontabの設定
```
crontab [ -u ユーザ名 ] { -l | -r | -e }
```

・-l：設定内容を一覧で表示
・-r：設定を全て消去　※編集時のオプションeの隣のキーなのでタイプミスに注意
・-e：編集


#設定方法（書式）
[分] [時] [日] [月] [曜日] [コマンド]

|項目|定義域|
|:--|:--|
|分|0-59|
|時|0-23|
|日|1-31|
|月|1-12|
|曜日|0-6　　*0=日曜 *環境によっては7=日曜も使用可|

##実行タイミングの指定方法
||書式|意味|
|:--|:--|:--|
|範囲|x-y|xからyまで実行|
|複数|x, y, z|xとyとzに実行|
|間隔|*/x|x間隔で実行|

##設定例
月曜日～金曜日、1分間隔で/home/user/sample.jarを実行する。

```
*/1 * * * 1-5 /usr/bin/java -jar /home/user/sample.jar
```

#ログの確認
`/var/log/cron`にcronの実行結果のログが出力されています。

```
cat /var/log/cron
```
Macに anyenv で Python3.x をインストール

## 流れ

1. anyenv をインストール
1. pyenv をインストール
1. Python をインストール


### 1. anyenv をインストール

1. Homebrewでインストール

```zsh
brew install anyenv # インストール
anyenv init         # シェルにanyenvを設定
exec $SHELL -l      # シェルを再起動
```

#### マニフェストディレクトリがないと、警告が表示されるようになってたので設定

```zsh
anyenv install --init
```
> y を入力するとすすむ

![img](https://camo.githubusercontent.com/8f589836f023744eabada91553bc24b944ab0527/68747470733a2f2f616e79656e762e6769746875622e696f2f6173736574732f696d672f64656d6f2f696e7374616c6c2d696e69742e676966)


#### anyenvのアップデートするプラグイン

[anyenv-update](https://github.com/znz/anyenv-update)というanyenvのプラグインでanyenvが管理している`*env`たちを一括でアップデートする

```zsh
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
anyenv update
```



### 2. pyenv をインストール

```zsh
anyenv install -l     # pyenvやrbenvなど、入れられるものが一覧で出る
anyenv install pyenv　 # 入れたいものをインストール
exec $SHELL -l        # シェルの再起動
```



### 3. Python をインストール

```zsh
pyenv install -l     # いろんなバージョンがいっぱい出る
pyenv install 3.6.6  # 入れたいものをインストール
pyenv versions       # 入ったか確認
```


<details><summary>インストールしたいバージョンがないときanyenvをアップデートしてみる</summary><div>

```zsh
pyenv install -l  # インストールしたいバージョンが表示されないとき
anyenv update     # アップデート
pyenv install -l # インストールできるバージョンが増えてるか確認
```

</div></details>

<details><summary>Pythonをインストールできない場合</summary><div>

- （必要に応じて）[Pythonを入れるのに必要なパッケージ](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)をインストール

```zsh
brew install openssl readline sqlite3 xz zlib
```
</div></details>


## 作業ディレクトリで、使用するPythonのバージョンを設定する

```zsh
pyenv local 3.6.6    # 作業ディレクトリで実行すると、その中で指定したバージョンを使える
```

カレントフォルダに`.python-version`が生成される（隠しファイル）  


<details><summary>ディレクトリごとじゃなく全体でバージョン設定する場合</summary><div>

```zsh
pyenv global 3.6.6
```
</div></details>
Storybook (React) をIE対応にする


2019.1.10現在の情報です。

create-react-app で構築したアプリに

```shell
create-react-app storybook1
```

Storybookを入れた後にIE11でも表示する必要がある場合。

```shell
npx -p @storybook/cli sb init
```



# IE11対応

`@babel/polyfill`を入れる

```shell
yarn add @babel/polyfill
```

`.storybook/addons.js`の先頭に以下を追記

```js:.storybook/addons.js
import "@babel/polyfill";
```


参考

[Storybook not working in IE11 · Issue #4099 · storybooks/storybook](https://github.com/storybooks/storybook/issues/4099#issuecomment-428190677)
OniVimが「Uh oh! Unable to launch Neovim」と表示されるとき

## 前提条件
```sh:console
% sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.2
BuildVersion:	18C54

% brew --version
Homebrew 1.8.6
Homebrew/homebrew-core (git revision 91f9; last commit 2019-01-08)
Homebrew/homebrew-cask (git revision 366f9; last commit 2019-01-07)

% vim --version
NVIM v0.3.3
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -Wconversion -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/tmp/neovim-20190105-188-1grgj0y/neovim-0.3.3/build/config -I/tmp/neovim-20190105-188-1grgj0y/neovim-0.3.3/src -I/usr/local/include -I/usr/local/opt/gettext/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include -I/tmp/neovim-20190105-188-1grgj0y/neovim-0.3.3/build/src/nvim/auto -I/tmp/neovim-20190105-188-1grgj0y/neovim-0.3.3/build/include
Compiled by brew@Mojave.local

Features: +acl +iconv +jemalloc +tui
See ":help feature-compile"

      システム vimrc: "$VIM/sysinit.vim"
       省略時の $VIM: "/usr/local/Cellar/neovim/0.3.3/share/nvim"

Run :checkhealth for more info
```

Oniのバージョンは`0.3.6`。

## 現象
Onivimを起動すると、Neovimがインストールされてないなどと言われる。
https://github.com/onivim/oni/issues/2662

実行してもCmd+Qで終了できなかったりする。

## 解決方法
一度Oniを落として、コマンドラインから実行する。

```sh:console
% open /Applications/Oni.app
```
これで起動するとタイトルのような警告は出なくなる。
次回以降はランチャーから起動しても問題なく開く。
PATHとか関係あるのかな？

## 雑感
原因がいまいち不明。
公式でも似たIssueがあり、それには`config.tsx`をいじるらしいが、特に変わらなかった。
C#でTripleDESで暗号化と複合


今更ですが、TripleDES。
Macでdotnet coreで作成。

```bash
dotnet new console -o testdes
cd testdes
dotnet restore
```

```cs
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            //準備 =================================================================================

            //key, iv
            byte[] key = Encoding.UTF8.GetBytes("123456789012345678901234"); //半角24文字 196bit
            byte[] iv = Encoding.UTF8.GetBytes("12345678"); //半角8文字 64bit

            //3DES
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

            //文字列
            string srcStr = "hogehoge";
            //出力
            Console.WriteLine("元の文字列: " + srcStr);

            //暗号化処理 ============================================================================

            //byte変換
            byte[] srcByte = Encoding.UTF8.GetBytes(srcStr);

            //MemoryStream
            MemoryStream ms = new MemoryStream();
            //CryptoStream
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);

            cs.Write(srcByte, 0, srcByte.Length);
            cs.Close();

            byte[] encData = ms.ToArray();
            ms.Close();
			　
			　//普通に出力すると文字化け？するので、Base64でエンコード。
            string encStr = System.Convert.ToBase64String(encData);
            Console.WriteLine("暗号化+Base64: " + encStr);

            //複合処理 ============================================================================
            byte[] encByte = System.Convert.FromBase64String(encStr);

            MemoryStream ms2 = new MemoryStream();
            CryptoStream cs2 = new CryptoStream(ms2, des.CreateDecryptor(key, iv), CryptoStreamMode.Write);

            cs2.Write(encByte, 0, encByte.Length);
            cs2.Close();

            byte[] decByte = ms2.ToArray();
            ms2.Close();

            string decStr = Encoding.UTF8.GetString(decByte);
            Console.WriteLine("複合: " + decStr);
        }
    }
}

```

```bash
dotnet run

元の文字列: hogehoge
暗号化+Base64: cadNJMDQ934XJDU8Tx7b/g==
複合: hogehoge
```
MacOS MojaveにTeXStudioを導入

Macbook ProにTeXStudioをインストールした時に色々つまづいたのでメモ．

# 環境
- Macbook Pro (15-inch, 2018)
- macOS Mojave
- MacTeX 2017
- TeXStudio 

# インストール
Homebrewがあるなら一発です．

```bash
brew cask install texstudio
```

# TeXStudioの設定
[ここ](https://texwiki.texjp.org/?TeXstudio%2F設定)を参考に環境設定をいじります．

### ビルド
- ビルド & 表示：`DVI->PDFチェーン`
- 既定のコンパイラ：`LaTeX`
<img width="945" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/251371/dca1e4ab-4834-3420-0520-266da9952ee8.png">

### コマンド
変えるのは次の4つ
- LaTeX : `"/Library/TeX/texbin/uplatex" -synctex=1 -interaction=nonstopmode %.tex`
- DviPdf  : `"/Library/TeX/texbin/dvipdfmx" %.dvi`
- BibTeX : `"/Library/TeX/texbin/upbibtex" %`
- Biber : `"/Library/TeX/texbin/biber" --bblencoding=utf8 -u -U --output_safechars %`
<img width="961" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/251371/d7c8fc05-20e7-f483-2362-dbbc2845336d.png">


### 詳細なエディタ設定
ここからは高度なオプションをにチェックを入れてください．
#### ハック/回避策
- 最適なディスプレイオプションの自動選択 : `OFF` 
- 描画モード : `Qt`
<img width="940" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/251371/5bd56035-2f92-3682-ef5c-116d49b2773d.png">

#### 外観
- 行番号を表示 : `すべての行番号`
<img width="643" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/251371/f69a7a3b-59c0-17c3-73fd-a45e19de4fb5.png">


以上で設定は完了です．

# ビルドでエラーが起こる
ヒラギノフォントが悪さをしているらしい．下記コマンドで解決．

```bash
sudo kanji-config-updmap-sys ipaex
sudo mktexlsr
```

# TeXStudioのPDFビューワーに日本語が表示されない
TeXStudioに日本語のフォントがないよう．poppler-dataを配置する必要があるとのこと．
poppler-data を配置する場所は下記で調べることができます．

```bash
strings -a /Applications/texstudio.app/Contents/Frameworks/libpoppler.??.dylib | grep poppler
```
次のように返ってきました．

```
/usr/local/Cellar/poppler/0.61.0-texworks/share/poppler
%Produced by poppler pdftops version: {0:s} (http://poppler.freedesktop.org)
```
`/usr/local/Cellar/poppler/0.61.0-texworks/share/poppler`がpopplerを置くべき場所です(多分皆さん同じ)．
ここにpopplerを配置します．次のコマンドを入力．

```bash
cd ~
curl -kO https://poppler.freedesktop.org/poppler-data-0.4.9.tar.gz
tar xvf poppler-data-0.4.9.tar.gz
sudo mkdir -p /usr/local/Cellar/poppler/0.61.0-texworks/share/poppler
sudo cp -pR ~/poppler-data-0.4.9/* /usr/local/Cellar/poppler/0.61.0-texworks/share/poppler
```

TeXStudioを再起動すると，日本語が表示されるようになりました．

# (おまけ)TeXStudioのカラーテーマを変える
TeXStudioは白いので，暗めにカラーテーマを変えます．
[ここのサイト](https://tex.stackexchange.com/questions/108315/how-can-i-set-a-dark-theme-in-texstudio)に色々テーマが載ってます(`[formats]`で始まる長いコードです)．

1. お好きなものをコピーしてきて，`*.txsprofile`形式で保存します．
2. TeXstudioを起動して，`オプション` → `プロファイルの読み込み` で先ほどのファイル(`*.txsprofile`)を選択
3. TeXStudioを再起動．自分の好みのカラーテーマに変わっているはずです．
4. `オプション` → `プロファイルを保存` で正しい場所に`*.txsprofile`を保存し直します．


また，文字入力中の背景が見にくいため背景をなくしてアンダーラインに変更します．
環境設定の**構文の強調表示**のフォーマットで
1. 事前編集の色を右クリックでなくす
2. 真ん中の`u`(underline)にチェックを入れる
<img width="867" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/251371/b5b87b80-e7a7-bcf5-ed5b-416dc961b6d9.png">


以上で設定は全て完了です．
GitPitchを使ってみた

GitPitchを使ってマークダウン形式でのスライドショーを作成


## VSCODEのextensionを追加
* Markdown All in One
* Markdown Preview Github Styling


## GitPitch特有のマークダウン

### マークダウンを書く場所

PITCHME.md　内に記載



### 画像表示方法

まず、/assets/img　内に画像を保存しておく。

```
![logo名](assets/img/logo.png)
```
のように記載すると画像が表示される
logo名の部分はhtmlで言うところのalt属性か。

### スライド切り替え部分

切り替えたい部分に入れるだけ。

```
---
```

### CSSの調整

/assets/css/PITCHME.css
内で調整ができる


## 公式サイト参照

https://gitpitch.com/docs
PHPUnitの@dataProviderはforループの40倍遅い

PHPUnitにはテストデータを駆動してテストケースを実行するData Providerという機能があるが、それは一つのテストケースで`for`ループするより40倍遅い。

## テストコード

検証のために次のようなテストコードを用意した。完全版は[GitHub](https://github.com/suin/php-playground/tree/master/PhpUnitDataProviderPerformance)に置いてある。

```php:UsingDataProviderTest.php
final class UsingDataProviderTest extends TestCase
{
    /**
     * @dataProvider trues
     */
    public function test_true(bool $value): void
    {
        self::assertTrue($value);
    }

    public function trues(): iterable
    {
        for ($count = 1; $count <= 1000; $count++) {
            yield [true];
        }
    }
}
```

```php:UsingLoopTest.php
final class UsingLoopTest extends TestCase
{
    public function test_true(): void
    {
        foreach ($this->trues() as $value) {
            self::assertTrue($value);
        }
    }

    public function trues(): iterable
    {
        for ($count = 1; $count <= 1000; $count++) {
            yield true;
        }
    }
}
```

## 実行結果

* UsingDataProviderTest: 474ms
* UsingLoopTest: 12ms

40倍くらい速さが違う

## なぜdataProviderは遅いか？

dataProviderの遅さの原因仮説としてはこう考えられる。dataProviderはデータごとに1テストのサイクルを回す。そのサイクルの中には、テストオブジェクトの生成や`setUp`、`tearDown`、レポーティングなどさまざまな処理がある。ひとつのメソッドの中で`for`ループするテストは、そういうオーバヘッドがないぶん早くなる。

## forとdataProviderは置き換え可能というわけではない

dataProviderはデータごとに独立したテストになるので、ひとつ前のデータがFAILになっても次のデータのテストは実行される。一方、forでループした場合は、FAILになったデータでテストが止まる。こういう違いがあるので、両者は置き換え可能というわけでない点は注意する。

## 結論

* 遅いと言っても、前後のデータにテスト実行計画が依存しないdataProviderのほうが普通はいい。
* ただ、沢山のパターン(数万パターン等)を網羅してテストしたい場合は、dataProviderだと体感的につらくなるので、そういう場合はforを使ってもいいかもしれない。
[Rails5]wicked_pdfってなんぞ？　続き

# はじめに

[前回](https://qiita.com/betti/items/8b65146903cce1ff739c)の続きです。

## なぜ続いたの？

前回の締めに

>多分ここから先は、
>日本語入れたり、出力時のレイアウト調整等、
>いろいろ更に大変なことがあるとは思うけど、
>まずはひと段落として一旦ここで区切ります。

と言ってましたが、

![cap1.png](https://qiita-image-store.s3.amazonaws.com/0/335844/294179d4-a8cf-ca2d-9681-f03dd00b8f1e.png)

日本語入れたら予想通り化けちゃったから。
(フラグビンビンでした。)

## 検証環境

前回と同様ですが、
以下の環境で実施しました。

```
[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0

[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1
```

ご参考までに。

# wicked_pdfの掘り下げ

**1.文字化け対応**

早速文字化けの解消をしていきます。
対応としてはIPAから日本語フォントを仮想環境に突っ込みます。

```
$ yum install -y ipa-gothic-fonts
$ yum install -y ipa-mincho-fonts
```

後はコントローラーにエンコーディング指定を追加します。

```ruby:posts_controller.rb
def show
  # とりあえず愚直に
  respond_to do |format|
    format.html
    format.pdf do
      render pdf: "sample",   # PDF名
             template: "posts/show.html.erb", # viewを対象にする
             encoding: "UTF-8" # 日本語に対応させる
    end
  end
end
```

そしたら画面をリロードして、

![cap2.png](https://qiita-image-store.s3.amazonaws.com/0/335844/ca23103d-4b78-ccd3-769f-9e6752226ec1.png)

日本語が表示されましたね。
良かった良かった。

**2.気づきと再調整**

日本語の表示問題を解決して、
画面のキャプチャを見てふと気づいてしまった。

![cap3.png](https://qiita-image-store.s3.amazonaws.com/0/335844/fcad7d37-32ee-fa3c-95e9-1f2356a50e95.png)

※画像はChromeブラウザ。

`/posts/show.pdf`で開いているせいか、
画面上に表示されるPDF名はタブも含めて、formatで指定したオプションは適用されないのね。
ちゃんとダウンロード時には"sample.pdf"となってたから気づかなかった。

公式READMEのオプションを見ていたところ、
"title"オプションの指定で解消出来るようなので早速やってみます。

```ruby:posts_controller.rb
def show
  # とりあえず愚直に
  respond_to do |format|
    format.html
    format.pdf do
      render pdf: "sample",   # PDF名
             template: "posts/show.html.erb", # viewを対象にする
             encoding: "UTF-8", # 日本語に対応させる
             title: "sample.pdf" # ブラウザ上のファイル名も合わせる
    end
  end
end
```

![cap4.png](https://qiita-image-store.s3.amazonaws.com/0/335844/b3a907ba-26d4-d0d6-7c54-37dde312a485.png)

タブのほうも指定通り"sample.pdf"になってくれました。
クエストクリアー！

# 所感

またハマるかと思ってヒヤヒヤしながら着手しましたが、
特に滞りなく解決出来て良かった。(小並感)

# おわりに

何かお気づきの点がありましたら、
ご指摘やアドバイス等頂けると大変助かります！
Google BigQuery のコストを考える

オンラインサービスを利用する際に気になる点の一つがコストだと思います。BiguQueryでもたまに「xx万円溶かした」的な話を聞き、BigQuery怖いと思っている方もいるかもしれません。私なりに考えていることをまとめてみました。

## BigQueryのQueryのコスト構造

BigQueryのコスト構造は非常にFairで、データ量と計算量に関係しています。すなわちコストを下げるに読む必要のないデータを小さくしたり、無駄な計算を少なくすればよいのです。さらにこれはそのままパフォーマンスにも直結します。安いQueryは早いのです。逆にBigQueryのパフォーマンスを向上させるにはこれ以外ありませんし、逆説的にはこれ以上考える必要もありません。

## Queryするデータの減らすためのテーブル設計

必要なデータ「だけ」にアクセスするようにします。データの選択方法にはカラム方向(列)とロー方向(行)があります。

### カラム方向

```sql
SELECT * FROM table
```
とせずに、

```sql
SELECT column FROM table
```

と必要なカラム名を明示するようにします。

### ロー方向

データが増えていくのは避けられませんが、トレードオフにしない方法があります。アクセスする行を減らす方法はいくつかあります。

BigQueryが提供している方法としては、

- [ワイルドカードアクセス](https://cloud.google.com/bigquery/docs/querying-wildcard-tables?hl=JA)
- [パーティションテーブル](https://cloud.google.com/bigquery/docs/partitioned-tables?hl=JA)
- [クラスターテーブル](https://cloud.google.com/bigquery/docs/clustered-tables?hl=JA)

がありますが、さらに

- サンプリングしたテーブル

も選択肢に入ります。サンプリングテーブルは集計ロジックも入れれば、

- 中間テーブル(データマート)

ということもできます。

つまり、基本的にはQueryに必要のデータの凝集性を活用して、テーブルを設計(テーブルを分割、パーティショニング等)し、アクセス時にその部分だけにアクセスすることでコストを最適化しましょう。また、Queryの設計時＝トライアンドエラーの際にはサンプリングテーブル等を活用すればアクセスするデータの量は減り、コストも下がり、トライアンドエラーのパフォーマンスも上がります。

中間テーブルは、生データから計算結果を保持するキャッシュとして機能し、さらにアクセス権の制御や途中の計算量を削減することにも役立つなど、コスト以上の話にはなりますが、結果としてコスト削減になっているのは間違えありません。

## 必要なコストを把握する

前述したようにBigQueryのQueryコスト構造は比較的単純なため（今後BigQueryML等で複雑になりつつありますが）、把握も可能です。Queryを書けばアクセスするデータ量がわかるので、 [BigQuery Mate](https://chrome.google.com/webstore/detail/bigquery-mate/nepgdloeceldecnoaaegljlichnfognh) などで簡単にQueryごとのコストを事前に予測することは可能ですし、注意して使うべきです。

実際に使ったコストは、auditlogをstackdriverからbigqueryにload(sink)し、処理したByte数等を確認することで、概算することも可能です。

## Queryの読み込みサイズにリミットをかける

`Maximum Bytes Billed` オプションで 一つのQueryが読み込むサイズに制限をかけることができます。しかし、残念ながらこの方法だけでは、プログラム等で何度もQueryを繰り返すようなケースでは制限できません。プログラムに問題があって必要以上にQueryを繰り返してしまうような場合は、あとで気づくしかありません。（幸い、BigQueryとしてプロジェクト単位の制限はあります）

## Googleさんにお願いしたいとすると

Queryごとの Maxium Byteに加えて、Query単位に加えて、月間単位で、 Budget Bytes を設定するようなことができたらありがたいかもしれません。それをアカウント単位（ユーザーアカウント、サービスアカウント）、プロジェクト単位といった粒度で簡単に設定、Budget消化状況を確認、などできると嬉しいです。また、Budgetを超えたQueryも簡単に承認して動かすなどできるととても安心できます。

とはいえ、そんなことをするより、 flat rate 契約（使い放題, 3-400万円/月という噂）してくれ、ってお話だとは思いますが、、ぜひfeedbackさせてください。

## 最後に

項目から公式ページにリンクを貼ろうと思って検索していたら、すでにGoogleさんがBestPracticeをまとめてくれていました。まずはここをご確認ください!!

[BigQuery のおすすめの方法: 費用を抑える](
https://cloud.google.com/bigquery/docs/best-practices-costs)

まずは公式ドキュメントを読んでもらうのが一番でしたね。とはいえ、一番言いたかったことは、

コストも、設計して使いこなしましょう 

ということでした。
終わり
Intellij IDEAのgradleプロジェクトビルド時に Command line is too long が出る場合の対処

ビルド環境によっては、表題のエラーがビルド時に出るケースがある。
その場合は、プロジェクトの `.idea/workspace.xml` を開き、component要素：PropertiesComponent に以下の一行を追加する。

```xml
<property name="dynamic.classpath" value="true" />
```
【ハマった】jqGridの最大行数は20！

データベースから取得した値をjqGridで表示しようとした所、いくつか足りない。。
なんと、1ページ当たりの行数は最大２０行でした、、、

 //テーブルの作成
        $("#hoge").jqGrid({
            data:date,  //表示したいデータ
            datatype : "local",            //データの種別 他にjsonやxmlも選べます。
                                               //しかし、私はlocalが推奨です。
            colNames : colNames,           //列の表示名
            colModel : colModelSettings,   //列ごとの設定
            rowNum : 10,                   //一ページに表示する行数
            rowList : [1, 10, 20],         //変更可能な1ページ当たりの行数
            caption : "Sample Display",    //ヘッダーのキャプション
            height : 200,                  //高さ
            width : 500,                   //幅
            pager : 'pager1',              //footerのページャー要素のid
            regional : 'ja',               //日本語
            shrinkToFit : true,       //画面サイズに依存せず固定の大きさを表示する設定
            viewrecords: true             //footerの右下に表示する。
        });

最大20行なので、ページャー要素のidを指定してあげましょう！
Pythonでクラスをコーディングする書き方

この内容は勉強したことをメモする用となっています。

##クラスの基本の書き方
###例
クラス名　動物
フィールド　目、耳、足
メゾット　泳ぐ、歩く、跳ぶ

子クラス名　カワウソ
フィールド　しっぽ、ひげ
メソッド　鳴く、食べる

###Pythonの型
```python
#クラス定義
class　クラス名:

    def __init__(self):
        self.フィールド名=値 #フィールドの定義

    def メゾット(self):#メゾットを定義
        print('メソッドに関すること')
#作ったクラスを使う
インスタンス名=クラス名()#インスタンスを作る
インスタンス名.メソッド()#メゾットを呼び出す
```
###例を当てはめると

```python

class Animal:#クラス名のみ先頭は大文字
    eyesight=1.2 #インデント(半角空白４つ分)
    ear_place='ちょっと上'
    shoe_size=2
    name=''

  def swim(self):
     print('泳ぐ')
  def walk(self):
     print('歩く')
  def jump(self):
     print('跳ぶ')

doubutu=Animal()
doubutu.swim()
doubutu.walk()
doubutu.jump()
```


##子クラスの継承の書き方
###Pythonの型
```python
 #子クラス名の横に(親クラス名)を加えると継承になる
class 子クラス名(親クラス名):
    def __init__(self):
        self.フィールド名=値 #フィールドの定義
    def メゾット(self):
        print('メゾットに関すること')

インスタンス名=クラス名()
インスタンス名.メソッド()
```
###例を当てはめると

```python
class Kawauso(animal):

    def __init__(self):
        self.tail=15
        self.hige=20
    def bark(self):
        print('鳴く')
    def eat(self):
        print('食べる')
hana=Kawauso()
hana.bark()
hana.eat()
```

##コンストラクタの書き方
コンストラクタとはインスタンス化したとき１回だけ動きを処理するものです。

```python
def __init__(self): 
    self.name='表示したいクラスの名前'
    print(self.name+'表示したい言葉')
```
書き方は上記の処理をメソッド定義の一番上に書きます。

###例を当てはめると
```python
class Animal:

    def __init__(self):　#コンストラクタ
        self.eyesight=1.2
        self.ear_place='ちょっと上'
        self.shoe_size=2
        self.name='ほにゅうるい'

        print(self.name+'産まれました')

   def swim(self):　#メソッドの定義
     print('泳ぐ')
------------------省略------------------

class Kawauso(Animal):　#子クラスの定義


    def __init__(self):　
        self.name='かわうそ'
        self.tail=15
        self.hige=20
        print(self.name+'産まれました')

   def bark(self):
     print('鳴く')
-------------------省略-------------------
```

##インスタンスのメソッドを呼ぶ書き方
クラスの定義の後に

```python
インスタンス名.呼びたいメソッド()
```
を追加するとインスタンスのメソッドを呼べる

###例を当てはめると
```python
-------------------省略-------------------
hana=Kawauso()
hana.bark()
hana.eat()
hana.jump()
```
LaTeXでハイパーリンクに色を付ける:  ジャーナル論文や学会テンプレートへの対応

# LaTeXでハイパーリンクに色を付ける

LaTeXでハイパーリンク文書を作るときは, 一般には以下のようにする. (dvipdfmxを使う場合)

```latex:日本語文書の普通の場合
\usepackage[dvipdfmx]{color, hyperref}
\usepackage{pxjahyper}
\usepackage{cite}
```


##[本題] ジャーナル論文や学会テンプレートへの対応
しかし, ジャーナル論文や学会のテンプレートでは, デフォルトでハイパーリンク対応しているにもかかわらず, 次のように**色が付かない**ことがある:

<img width="597" alt="link0.png" src="https://qiita-image-store.s3.amazonaws.com/0/294661/2559578f-b303-e1eb-1dd5-3b164f5b279e.png">


その場合, `\begin{document}`より前に, 次を書いておくと良い. 

```latex
\usepackage{xcolor}
\hypersetup{
	colorlinks=false,
	citebordercolor=green,
	linkbordercolor=red,
	urlbordercolor=cyan,
}
```

こうすることで, 次のようにハイパーリンクに色がつく. 

<img width="609" alt="link1.png" src="https://qiita-image-store.s3.amazonaws.com/0/294661/81eac12f-6e1f-2186-6834-5928e9e53ff1.png">


その他オプションは, [こちら](ftp://tug.ctan.org/pub/tex-archive/macros/latex/contrib/hyperref/doc/options.pdf)を参照. 

文字自体に色を付ける場合は, 次のようにする. 

```latex
\usepackage{xcolor}
\hypersetup{
	colorlinks=true,
	citecolor=blue,
	linkcolor=red,
	urlcolor=orange,
}
```

<img width="601" alt="link2.png" src="https://qiita-image-store.s3.amazonaws.com/0/294661/9d36552b-ca1c-d322-45f6-a15eb95bde2f.png">

### ACM Paper Formatの場合
`\documentclass[sigconf]{acmart}`のように`acmart`を使っている場合は, 上記のようにはいかない. 
[こちら](https://docs.racket-lang.org/scribble/ACM_Paper_Format.html)を参考に`\documentclass[sigconf,screen]{acmart}`と書くと, ハイパーリンクに色が付く. 
(`screen`がハイパーリンクの色付けオプション)

## Beamer
Beamerでハイパーリンクに枠をつけるには, 以下のコマンドを書くとよい. 

```latex
\hypersetup{pdfborder={0 0 1}}
```

- 枠を付けたい部分にのみ書くことで, 一部のみに適用することも可能
- 数値をいじることで枠の太さを変えられる: `\hypersetup{pdfborder={0 0 0.5}}`
Amazon Linux WorkSpaces デスクトップ系 Tips

Amazon Linux WorkSpaces を使っていると、デスクトップまわりのことが分からなくて調べることがよくあります。やり方をすぐ忘れるので随時メモしていきます。

## MATE パネルを更新する[^2]

```
killall mate-panel
```

## システムのアイコンキャッシュを更新する[^1]

```
sudo gtk-update-icon-cache /usr/share/icons/hicolor
```

## スクリーンショットをとる

```
mate-screenshot --interactive
```

※ メニューの "Take Screenshot" のランチャーを実行しても OK

## ウィンドウクリックアクション[^3]の修飾キーを無効化する

dconf-editor などで次のキーの値を空白にする。

* org.mate.Marco.general.mouse-button-modifier

[^1]: アイコンファイルはあるのに有効にならない場合などに
[^2]: アプリをインストールしたのにメニューにランチャーが反映されない場合などに
[^3]: 修飾キーを押しながらウィンドウをクリックするとウィンドウの移動やリサイズなどができる機能
VBA : 文字列が特定の文字だけからなるかを判定

フォームの入力内容チェック（いわゆるバリデーション）などで、値が特定の文字種（たとえば半角数字と半角コンマ）だけからなるかどうかを判定したい場合があります。

VBAでは正規表現を使うことも可能ですが、参照設定などがやや面倒です。`Instr` 関数を文字種の数だけループしてもいいのですが、ここでは `Like` 演算子だけで判定する関数を作ってみました。

```vb:ConsistsOnlyOf.bas
Function ConsistsOnlyOf(str As String, chars As String) As Boolean

    ConsistsOnlyOf = Not str Like "*[!" & chars & "]*"

End Function
```

`str` には判定対象の文字列、`chars` には含まれる文字を列記します。`0123456789` のかわりに `0-9` のような形が使えます。たとえば半角数字と半角コンマのみであれば `0-9,` とします。

```vb:Example_ConsistsOnlyOf.bas

ConsistsOnlyOf("1,2,3", "0-9,")    'True
ConsistsOnlyOf("1,２,3", "0-9,")   'False

```
Unity:マイクの音量を取得する(1)

Unityで音に合わせて何かをしたい場合、下記の手順でリアルタイムにマイクの音量を取得できます。

- Hierarchyタブで右クリック>空のゲームオブジェクトを作る
![2019-01-09_140631.png](https://qiita-image-store.s3.amazonaws.com/0/59911/9962de3b-2f24-6ab8-fdcf-44314d983555.png)

- 作ったオブジェクトに[AddComponent]>AudioSourceでオーディオソースをつける
![2019-01-09_140719.png](https://qiita-image-store.s3.amazonaws.com/0/59911/643e0e8c-4be7-a69a-8e85-91f0caf55ffe.png)

- AudioSource>Loopにチェックを入れる
![2019-01-09_141034.png](https://qiita-image-store.s3.amazonaws.com/0/59911/1d9ab246-e9ce-d9d9-e99a-11b4193db75d.png)

- Project>Create>C#Scriptでスクリプトを作成し、MicVolumeSample.csという名前を付けて下記をコピペする

```MicVolumeSample.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MicVolumeSample : MonoBehaviour {
    [SerializeField, Range(0f, 10f)] float m_gain = 1f; // 音量に掛ける倍率
    float m_volumeRate; // 音量(0-1)
    // Use this for initialization
    void Start () {
        AudioSource aud = GetComponent<AudioSource>();
        if ((aud != null)&&(Microphone.devices.Length>0)) // オーディオソースとマイクがある
        {
            string devName = Microphone.devices[0]; // 複数見つかってもとりあえず0番目のマイクを使用
            int minFreq, maxFreq;
            Microphone.GetDeviceCaps(devName, out minFreq, out maxFreq); // 最大最小サンプリング数を得る
            aud.clip = Microphone.Start(devName, true, 2, minFreq); // 音の大きさを取るだけなので最小サンプリングで十分
            aud.Play(); //マイクをオーディオソースとして実行(Play)開始
        }
    }

    // Update is called once per frame
    void Update () {
        Debug.Log(m_volumeRate);
	}

    // オーディオが読まれるたびに実行される
    private void OnAudioFilterRead(float[] data, int channels)
    {
        float sum = 0f;
        for (int i = 0; i < data.Length; ++i)
        {
            sum += Mathf.Abs(data[i]); // データ（波形）の絶対値を足す
        }
        // データ数で割ったものに倍率をかけて音量とする
        m_volumeRate = Mathf.Clamp01(sum * m_gain / (float)data.Length);
    }
}
```

- 音量がログに表示される
  - （ログウィンドウが表示されていない場合はWindow>General>Consoleを選択）
![2019-01-10_194501.png](https://qiita-image-store.s3.amazonaws.com/0/59911/5d331107-af90-dda0-9c3d-aeca10b11a33.png)

![2019-01-09_141213.png](https://qiita-image-store.s3.amazonaws.com/0/59911/2359d8d5-ae7b-b6b7-3524-44aa840bf3ad.png)


・・・のですが、このままだとマイクの音をそのままオーディオソースに流すのでハウリングを起こしてしまいます。かといってオーディオソースのボリュームを０にすると今度はマイクの音が拾えなくなります。そこで、


- Projectタブで右クリック>Create>AudioMixer でオーディオミキサーを作る
- オーディオミキサー>Groups>+マークをクリックし、Dummyという名前のグループを作る
- できたDummyのボリュームを最小(-80)にする
 
![2019-01-09_141456.png](https://qiita-image-store.s3.amazonaws.com/0/59911/59eac10a-583d-f8e2-24dd-ee4e09b2274b.png)

- 最初に作成したGameObject>AudioClip>OutputにDummyを指定する
![2019-01-09_141552.png](https://qiita-image-store.s3.amazonaws.com/0/59911/b3e6815d-2c9d-abc9-824d-ff252cb119af.png)

これでマイクで拾った音を出力しないようになり、ハウリングが起きなくなります

[Unity:マイクの音量を取得する(2)](https://qiita.com/ELIXIR/items/4a647b2d450246cfd3d4)
大事なことはすべて先輩エンジニアから教わった

## はじめに
先輩エンジニアとペアプロを**2時間**実施したので気づいた２つのことについて簡単に紹介したいと思います。
とても初心者むけの記事になっていますのでご了承ください:bow:

## ２つの意識で仕事の質が変わる
先輩エンジニアと自分では決定的に違う点が2つ存在していた。
１つ目のキーワードは**「効率化」**
２つ目のキーワードは **「一つ一つ確実に」**

## 効率化
Uluruでは主に統合開発環境（IDE）PhpStorm（JetBrains社開発）を使用しており、
PhpStormの開発の効率化を意識していました。つまり**最強の開発環境**を目指していました！
ここでおすすめの設定を紹介します。(PhpStorm)

- [Xdebug](https://pleiades.io/help/phpstorm/configuring-xdebug.html)
- [PHPUnit](http://d.hatena.ne.jp/yk5656/20160321/1461206312)  ← テスト実装がとても早くなる
- [keymap変更](https://qiita.com/Vexus2/items/fc328619deac316c3ff5)  ←自分のやりやすいように設定
- [PhpStormでGitを使用する](http://tech-blog.rakus.co.jp/entry/2017/09/14/112033)  ← PhpStormでGitの作業を完結させたらとても効率があがります

このような設定をしていくと開発効率が上がっていきます。
少なくとも[Xdebug](https://pleiades.io/help/phpstorm/configuring-xdebug.html)と[PHPUnit](http://d.hatena.ne.jp/yk5656/20160321/1461206312)は設定しとくべきです。
これだけでも格段に効率があがります！

## 一つ一つ確実に
一つ一つ確実に実装することで余分なコードを書かなくてすむそうです。
主に２つのことについて意識していました。

1. コードで記述する前に、これから書くコードの内容をコメントアウトで記述
2.  一つの機能を加えたら、その都度テストを作る

**１について**:
こちらは人によってやり方は違ってくると思いますが、大事なこととして自分がどのようなコードを設計していくのかを
コードにする前に決め、まとめることが大事だと思います。
なので先輩エンジニアは１番見やすいところにコメントアウトで書いていたのだと思います。

下記のように[Todo](https://qiita.com/shosho/items/04e5bc28a6b95c6d205b)を使用するのもオススメです。
Todoで書いた場合左下に書いた内容がでてくるのでわかりやすいです:star:

```
// Todo コードの内容
```

**2について**: 
驚いたのがrouteを定義したら、routeがちゃんと通っているのかのテストをすることです。
このように一つ一つテストをしていくので、無駄なコードを全く書かないようにしているそうです。
因みに先輩エンジニアはこのやり方で**実装部分**と**テスト部分**を同時に書き終えるようにしています。

この1と2の内容を意識することでミスが減り、開発スピードも向上しました。
少しめんどくさい２つの作業ですが、是非意識して実施してみてください。

## おわりに
**効率化**と**一つ一つ確実**に実装するということは、わかっているようでできている人は少ないです。
この先輩エンジニアのオススメを実践することでエンジニアとしてレベルアップすると思いますので
まだ実践していない人は一つからでも何か実施してみてください。
自分にとっての**最強の開発環境**を整えていき一つ一つ確実に実装をしていきましょう:sparkles:
運用時にもgit diff: ログなど一行が長い差分を見るなら--word-diff

例えばログのある二行を比較したい時、ログは一行が長いことが多いので、単純に`diff lineA lineB`しても差分の有無はわかるが差異がどこかは探しにくい

git diffなら`--word-diff`をつけるだけで色付きで表示してくれる

```bash
$git diff --word-diff lineA lineB
diff --git a/lineA b/lineB
--- a/lineA
+++ b/lineB
@@ -1 +1 @@
（結果は色付けのため下に記載）
```

<font color="Red">[-[09/Jan/2019:05:04:35-]</font><font color="Green">{+[09/Jan/2019:05:04:36+}</font> +0000] "GET /favicon.ico HTTP/1.1" 404 938 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 <font color="Green">{+Hello+}</font> Safari/537.36"

git diffはGit管理されていないディレクトリでGit管理されていないファイルに対しても実行できる
(もしGit管理されているパスで同じことをしたい場合は、`--no-index`をつければ良い)

またdiffで差分を色付けしたい時は`colordiff`が必要だが、Macだと標準では入っていない一方、git diffは標準で色付けしてくれる
MacでiOS絵文字一覧を表示するショートカット

MacでiOS絵文字を入力したい。
メッセンジャーなどのコミュニケーションツールで絵文字を使いたい…、
MacからLINE送る際に絵文字を使いたい…。

ショートカットで絵文字一覧を表示する方法がありました。
知らなかったのでメモを残しておきます。

##絵文字一覧のショートカット

`Cmd`+`Ctrl`+`space` 
これで一覧が表示されます、便利 😀

![スクリーンショット 2019-01-09 14.30.59.jpg](https://qiita-image-store.s3.amazonaws.com/0/29272/a8507ba9-a5ad-b16b-4e96-5e18aed44891.jpeg)

##参考URL
絵文字、アクセント記号付きの文字、記号を Mac で入力する方法 - Apple サポート
https://support.apple.com/ja-jp/HT201586
DeepLearningのモデルをWebから呼び出せるように‼

TensorFlowでいろいろとモデルを考える前に、まずはWebから呼び出せるようにしたい！！！
一通り動かせる状態にしてから、そこから調整したい。と言う性格であるため、まずは一通り動かせる環境を作ることに注力‼

次は、DeepLearningのモデルを、Webから呼び出せるようにする‼
その次は、それをオンラインで公開する、、、の予定です。

と言うことで、早速調査。

# Flask
Flask( http://flask.pocoo.org/ )。これが今回の環境には合いそう。
そもそも、現在、構築している環境がPythonを前提としてきているため、同じPythonで作られているこの環境は親和性が良い、、、と書かれているww
ちなみに、現時点でPython環境で構築していることについては、特段触れないで置こう、、、（私はJavaのエンジニアなので、Pythonはこれから勉強、、、）

# では、環境構築
といっても、実はAnacondaで環境を作ってしまいました。
Anacondaで探すと、「Flask」がインストールできる状態でしたので、そちらからインストール

# いつもいらんときに発生するエラー
その後、
https://yukituna.com/841/
こちらを参考に、サーバ側のプログラムを用意したのですが、
最初にFlaskのサーバ起動時にエラーが発生、、、
「Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.」
なんじゃこりゃー!!

で、調べて見ると、上記のサイトで紹介されていたときは、「hello.py」と言う名前でメインモジュールを作りましたが、これを「app.py」と変更することで解決。
サイト内で記載されている[set FLASK_APP=hello.py]がうまく聞いていない感じだった。

これで、無事、ローカル環境のWEBブラウザで「Hello, Wordl!」を表示できた‼

# では本題‼
サーバ周りの準備ができた！と言うことで、では実際に自分で生成したモデルをWeb経由で呼び出せるようにしました。
といっても、ほぼ、こちらのサイトにかかれている内容を実践したのみ、、、
https://qiita.com/KeisukeToyota/items/c1c626c9efc816932a96

丁寧に、参考となるコードを記載いただいているので、ほぼコピペで環境構築。
あっと言う間に準備ができました。

実行する前に、モデルを生成する必要があり、早速実行！！！

。。。。。。。。。。

[train.py]を、[mode.h5]に変換するのに、CPUが大忙し、、、、
CPU温度は９１度まで上昇‼そのまま、１時間ちょっと過ぎた頃、、、、なんとか無事生還。

おかげで、そのモデルを使って、サーバを起動‼

**できた！！！**

なんか、今の仕事はマネージメントしかしておらず、やはりエンジニアあがりの私には少し刺激が足りない、、、もちろん、様々な問題が発生し、違う意味での刺激は受けているが、、、ものづくりがしたい、、、。

と言うことで、次回は、これをGAEにて公開したいと思います。

がんばろー！！！
メモ: 既存のdocker networkに後からコンテナを追加する

この記事は
===

* 完全に個人メモです

やりたかったこと
===

* docker-composeですでに作成されているコンテナ群にMySQLサーバがいました
* とあるデバッグ用にこのMySQLサーバに接続できるコンテナを後から追加したかったです

やりかた
===

* docker-composeでは自動的にdocker networkが作成されて定義されているコンテナ同士をそのネットワークに参加させています
* あとから手動でそのdocker networkに参加させれば、既存のコンテナに接続させることができます

詳細
===

* docker-composeで作成されたdocker network名を確認します

```
# docker network ls
NETWORK ID          NAME                    DRIVER              SCOPE
5eb6cbf4fc96        app_default             bridge              local
```

* 上記で見つけた対象のdocker-networkに参加させつつ、DBサーバへの接続を指定します

```
docker run --name new-container --link existing_app_db_1:existing_app_db_1 --network app_default -it new-container-image /bin/bash
```

終わりに
===

* おわります
デバッグ時に見やすいようにSQL文を書くには？

###### @をつけよう！

普段は、
SQLServerでSQL文書く　→　VSに張り付ける
って感じでやってるんで、これが一番楽に感じます。

おすすめあったら教えてください。

---　書き方

```c#
        private readonly string InsertQuery = @"INSERT INTO M_User
	(UserId
	,Password)
VALUES
	(@UserId
	,@Password)";
```
--- デバッグ時

```
INSERT INTO M_User
	(UserId
	,Password)
VALUES
	(@UserId
	,@Password)
```
（小ネタ）package.jsonのWARN : No repositoryの消し方


# npmのWARNが...

ちょいとnpmのパッケージ調査のためにフォルダを作って、```npm init -y```して、おもむろに```npm install --save hogehoge```とやると...

```
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN fugafuga@1.0.0 No description
npm WARN fugafuga@1.0.0 No repository field.
```

と、__WARN__から始まって毎回なえなえな思いをしているので消し方を調べました。

npmは6.5.0です。

## No repository field

package.jsonにrepository（[ドキュメント](http://liberty-technology.biz/PublicItems/npm/package.json.html#repository)）の設定が入ってないよというWARN。本来であればGithubなんかの設定が入るんですが、そこはそれ、ちょいとした調査なのでリモートのリポジトリなんかありません。ということでそんなときに使える設定方法を2個見つけました。

### privateフィールドをtrueにする

package.jsonのprivate（[ドキュメント](http://liberty-technology.biz/PublicItems/npm/package.json.html#private)）を使う方法です。

> "private": true を package.json に設定しておくと、publish コマンドを拒否します。

ということでpublishできなくなる = __repositoryフィールドの有無を確認しなくなる__ということのようです。

### 適当なrepositoryフィールドを設定する

repositoryフィールドに適当な文字列を設定すると、repositoryが設定されていることになるなるようです。

```"repository": "fugafuga"```

## No description?

個人的な調査用なので、```"description" : "hogehoge"```書いておけばいいと思ってます。

# おわりに

まあ調査用なんでそのうちまるごと消す運命ですし、WARNなんで気にする必要もないんですが…個人的にはprivateって設定が面白かったです。

小ネタというより、もはやネタ。
DeepLearningの環境構築(Anaconda + Keras + TensorFlow)

# DeepLearning用に環境構築
様々なサイトを参考にさせていただき、自分なりに環境構築をしてみました。

とりあえず、ローカルのMac(2014 Mid)にて環境を構築してみました。

以前、Windows端末でDeepLearing環境を構築したが、いろんなものをインストールして作ってしまったため、いまいち、よく理解できていないまま、環境ができてしまった。
おかげで、改めるとよくわからないため、今度は、Macにて環境を作ってみた。

https://qiita.com/yoshizaki_kkgk/items/4663148a2b3ca078ddbc

こちらを参考に、一通りインストールしてみた！！！
JupterNotebookは動いた！！！

そして気付いた、、、Chainerと言う国産Libraryを使った環境構築だった、、、。

## DeepLearningのFramework
DeepLearningを調べていると、いつもこの辺につまずく、、、一体、どのフレームワークを使えばよいのか、、、
https://www.hellocybernetics.tech/entry/2017/05/15/063753
この辺の記事を参考にすると、DeepLearningのFrameworkには大きく２種類あるという。
それは**Define and Run / Define by Run**だと。
https://cpp-learning.com/chainer_define-by-run/#Define_and_Run_Define_by_Run

今、インストールしたのは**Define by Run**で実行できる環境でした。

悩んだものの、深い意味はないが、「TensorFlow」で環境を構築したかったため、改めて調べ物‼

## Anaconda + Keras + TensorFlow
で、新たにTensorFlowを使った環境構築をするために調べていたら、こちらのサイトを発見しました。
https://qiita.com/takunkun/items/7b6a42f9fc9662a1dc86
Anacondaと言う仮想環境を使ったDeepLearning環境の構築
よく見ると、とても便利で最初からこれを使えばよかった、、、そう言えば、私のWindows環境でもこれを見た記憶が、、、ww

ってことで、こちらでTensorFlowの環境を構築！！！

その後、Jupyter Notebookまでインストール！！！
これで、とりあえずローカルにTensorFlowを使った環境を構築することができた。

さて、次は、どうやってWebからDeepLearningの環境を呼び出すか調べねば、、、、
目標がオンラインのWEB上でDeepLearningのモデルを呼び出すことなので、、、。
homebrewで導入したevinceでpostscriptのバックエンドを復活する方法

## 問題　
最近のevinceではpostscriptのバックエンドがデフォルトで無効化されてしまったので，homebrewで導入したevinceを利用してpsファイルやepsファイルの画像を見ることができない．

## 解決策
homebrewのFormulaを書き換えて，brewを使ってソースからビルドし直す．

-  `/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/`にあるevince.rbに`"--enable-ps"`を次の様に書き足す．

```diff
--- evince.rb.original
+++ evince.rb
@@ -42,6 +42,7 @@ class Evince < Formula
     system "./configure", "--disable-debug",
                           "--disable-dependency-tracking",
                           "--disable-silent-rules",
+                          "--enable-ps",
                           "--prefix=#{prefix}",
                           "--disable-nautilus",
                           "--disable-schemas-compile",
```

-  `brew reinstall evince --build-from-source`　としてバイナリーのインストールではなくてソースビルドを行う．

- evinceを使ってepsファイルなどが閲覧できればＯＫ．

## 参考
<https://texwiki.texjp.org/?Evince#i6e6a97a>
>Evince 3.30.0 で PostScript バックエンドがデフォルトで無効化されました。
Github のIssue / PR の編集でショートカットを使おう！ C+p で Write / Preview タブの切替とか。

Github のIssue / PR の編集でショートカットを使おう！ C+p で Write / Preview タブの切替とか。

[Using keyboard shortcuts - User Documentation](https://help.github.com/articles/using-keyboard-shortcuts/)

# Write / Preview 切替

- Control + Shift + P 
- Command + Shift + P 

![image](https://user-images.githubusercontent.com/13635059/50876389-225c0900-1410-11e9-8357-87773aad3895.png)

今までカーソルや、自力タブ移動していたのが嘘のようだ‥！

# コメント確定

Control + Enter

# Markdownリンク作成

C+k

`[](url)`

# Shift + ? でヘルプ表示

押してみるもんですね。

![image](https://user-images.githubusercontent.com/13635059/50876428-5a634c00-1410-11e9-99dd-c3c5e74774ec.png)


---

https://twitter.com/YumaInaura

https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/312








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
適当に思いついたTIP集

# 役に立つかもしれないTIPS集
最近知った小ネタを中心に集めてみました。
もしかすると役に立つかもしれません。

## 目次
1. Windows
2. Googleカレンダー
3. Excel
4. Slack
5. MarkDown

## 1. Windows
### アプリケーションの切り替えショートカット
windowsでアプリの切り替えるには
`ctrl + tab`
を押せば良いです。

というのは、よく知られていると思いますが、`ctrlを押したままで、カーソルキーを押下`すると自由に切り替えるアプリを選択できます。

### クリップボードの履歴から貼り付け（※win10限定かもしれません）
`ctrl + c`してからの`ctrl + v`は常識的ですが、`ctrl + v`の代わりに`win + v`を押すと、クリップボード履歴が表示され、選択して貼り付けることができます。

使うためには、Windowsの設定 > システム > クリップボードにある
「クリップボードの履歴」をオンにする必要があります。

## 2. Googleカレンダー
### 「他のカレンダー」の表示名を変える
他人の予定を見ようとして他のカレンダーに加えると、フルネームだったり、アドレスそのままだったりと、どこから取ってきたかも分からない表示名になります。
表示させたいカレンダーはよく切り替えるので、その時に名前が分かりづらいと少々不便です。

表示名を変えるには、他のカレンダーにある各項目にマウスオーバーした時に表示される「︙」から設定を選びます。
そして、表示される「カレンダーの設定」内にある名前を任意の名前に変更します。

## 3. Excel
### オブジェクトでセル参照を行う
オブジェクト内に任意のセルの値を表示させます。
やり方は、オブジェクトを選択状態で、数式バーに`=A1`等と入力します。
オブジェクトを右クリックして表示される、テキストの編集で`=A1`と入れても参照されないのでご注意ください。

## 4. Slack
### スターとピン留め
slackにはスターと呼ばれる機能とピン留めと呼ばれる機能があります。
スターには2つ種類があり、スター（チャンネル）とスター（メッセージ）です。

・スター（チャンネル）
この機能ではよく使うチャンネルにスターを付けてチャンネルを整理することができます。
チャンネルが多いとよく使うチャンネルが埋もれてしまいますが、スターを付けたチャンネルだけ一纏めにして表示できます。

・スター（メッセージ）
任意のメッセージにスターを付けて、後で簡単に参照できるようにします。
自分だけにしか影響しないので、覚えておきたいメッセージにスターをつけると良いです。

・ピン留め
メッセージをピン留めします。
ピン留めすると、該当のチャンネルのピン留めアイテムリストに表示されるようになります。
また、誰かがあるメッセージをピン留めすると、そのチャンネルに参加している他のユーザにも影響し、ピン留めアイテムリストに表示されます。
チャンネル内で残して置きたいメッセージに対して使うと良いと思います。

・トピック
ついでにですが、チャンネルのトピックを設定することで、そのチャンネルの用途を明示することができます。

## 5. Markdown
### VSCodeを使うと便利
いくつかの拡張機能を入れることで、とても書きやすくなります。

拡張機能一覧
* Markdown All in One
* Markdown Checkbox
* Markdown Preview Enhanced
* markdownlint

UMLの図を書いたりすることもできます。
SpringでMySQLを利用してみる（Part 2: DB及びフォームデータ用クラスを作成）

Part 1: [プロジェクトの作成](https://qiita.com/shoko93/items/99d95c292a78f3a77597)

このパート２では、Form.java、User.java、UserRepository.javaのコードを紹介したいと思います。
![directory.png](https://qiita-image-store.s3.amazonaws.com/0/326104/9e7114cd-61fc-23e5-ac54-070d0542782b.png)

###Form.java
フォームのデータを一時的に保存するためのクラスです。userName、userEmailがフォームのName、Emailフィールドに対応しています。

```java
package com.example;

public class Form {
	
	private String userName;
	private String userEmail;

	public String getUserName() {
		return this.userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserEmail() {
		return this.userEmail;
	}

	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}
}
```

###User.java
Hibernate用にテーブルの定義を指定するためのクラスです。このプロジェクトでは、id、name、emailという三つのカラムを持つテーブルを作成します。

```java

package com.example;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

//This tells Hibernate to make a table out of this class
@Entity 
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    private String name;

    private String email;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
}
```

###UserRepository.java
CrudRepositoryを継承するクラスでデータの保存、取得のために使用します。

```java
package com.example;

import org.springframework.data.repository.CrudRepository;

// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete

public interface UserRepository extends CrudRepository<User, Integer> {

}
```

これで、データを保存する準備が整いました。[次回](https://qiita.com/shoko93/items/106ae5d07fb406f46d1a)はコントローラとビューについて説明します。