OmniAICreator/Qiita-1.07M huggingface dataset:
Qiitaの書き方備忘録

#はじめに
- 自分用の備忘録としてまとめました。

#1.見出し
- `#`を付けることで出来ます。
- `#`の数で見出しの深さを下げられます。

>#見出し1
\#見出し1
>##見出し2
\##見出し2
>###見出し3.1
\###見出し3.1
>###見出し3-2
\###見出し3-2

#2.コードの挿入
- \`\`\`(バッククオート)3つで括ることで出来ます。
- \`\`\`の後ろに言語名を付けるとコードにシンタックスハイライトを付けれます。
- \`\`\`言語名:ファイル名でファイル名が挿入出来ます。

>\`\`\` java:Hello.java
public String Hello() {
return "Hello World!!";
}
\`\`\`
のように書くと

>```Java:Hello.java
public String Hello() {
  return "Hello World!!";
}
```

#3.インライン表示
- \`(バッククオート)で括ることで出来ます。

>
\`Hello World!!\`がインライン表示します。
\`int i = 0\`がインライン表示します。
のように書くと

>`Hello World!!`がインライン表示します。
>`int i = 0`がインライン表示します。

#4.文字の修飾(文字色、太字、イタリック、打ち消し線)

##4-1.文字色

- `<font>`で括ることで出来ます。

>```
<font color="red">テキスト(赤色)</font>
```
のように書くと 

><font color="red">テキスト(赤色)<font>

##4-2.太字

- `__`または`**`で括ることで出来ます。

>\_\_太字\_\_
\*\*太字\*\*
のように書くと

>__太字__
>**太字**

##4-3.イタリック

- `_`または`*`で括ることで出来ます。

>\_イタリック\_
\*イタリック\*
のように書くと

>_イタリック_
>*イタリック*

##4-4.打ち消し線

- `~~`で括ることで出来ます。

>\~~打ち消し線\~~
のように書くと

>~~打ち消し線~~

#5.リンクの挿入
- \[リンクテキスト](URL "タイトル")で出来ます。

> \[Qiita](http://qiita.com/ "Qiita")
のように書くと

>[Qiita](http://qiita.com/ "Qiita")

#6.画像の挿入
- \!\[代替テキスト](URL "タイトル")で出来ます。

> \!\[Qiita](http://cdn.qiita.com/assets/siteid-reverse-6044901aace6435306ebd1fac6b7858c.png "Qiita")
のように書くと

>![Qiita](http://cdn.qiita.com/assets/siteid-reverse-6044901aace6435306ebd1fac6b7858c.png "Qiita")

- 画像のサイズ指定は、`<img>`で括ることで出来ます。

```
<img width="200" alt="Qiita" src="http://cdn.qiita.com/assets/siteid-reverse-6044901aace6435306ebd1fac6b7858c.png">
```
のように書くと

> <img width="200" alt="Qiita" src="http://cdn.qiita.com/assets/siteid-reverse-6044901aace6435306ebd1fac6b7858c.png">

#7.リスト
- リストの上下に空白(改行)を入れないと正しく表示されません。
- 記号と文の間に半角スペースを入れる必要があります。

##7-1.順序無しリスト

- 文頭に`*`, `+`, `-`のどれかを付ければ出来ます。

>\*順序無しリスト
のように書くと
>* 順序無しリスト

##7-2.順序付きリスト

- 文頭に`数字. `を付ければ出来ます。

>1. リスト1
>2. リスト2

#8.引用
- `>`を付ければ出来ます。

>\>引用1です。
\>\>引用1のネストです。
のように書くと

>引用1です。
>>引用1のネストです。

#9.水平線
- `*`または`-`を3つ以上を1行に書くと出来ます。

>\*\*\*
\-\-\-
のように書くと
>***
---

#10.テーブル
- `|`で括ることで出来ます。
- 2行目のコロンの位置によってセル内の文字の配置が変わります。

>\|左揃え|中央揃え|右揃え|
|:---|:---:|--:|
|align-left|align-center|align-right|
|左揃え|中央揃え|右揃え|

>|左揃え|中央揃え|右揃え|
|:---|:---:|--:|
|align-left|align-center|align-right|
|左揃え|中央揃え|右揃え|

#11.注釈
- 注釈内容の前に半角スペースが必要です。
- 注釈内容はどこに記述しても文末に表示されます。

>注釈\[^1]
>\[^1]: 注釈内容1
のように書くと

>注釈[^1]
[^1]: 注釈内容1
>  

#12. ページ内リンク
##12-1.「捻りのない」場合

- `[表示文字](リンクURL)`で出来ます。
- `(リンクURL)`の部分に`#` + `見出し文字`と記述します。

> \[見出し1](#見出し1)
のように書くと

>[見出し1](#見出し1)

##12-2.「見出し深さが2以下」への場合
- 深さが2以下であっても、`#`の数は1つで出来ます。
 
> \[見出し2](#見出し2)
のように書くと

>[見出し2](#見出し2)

##12-3. 「見出し文字に`.`」が入っている場合
- (リンクURL)部分には`.`を無視して記述します。
 
> \[見出し3.1](#見出し31)
のように書くと

>[見出し3.1](#見出し31)

##12-4. 「見出し文字に`-`」が入っている場合
- (リンクURL)部分にはそのまま`-`を記述します。
 
> \[見出し3-2](#見出し3-2)
のように書くと

>[見出し3-2](#見出し3-2)

#13.マークダウンのエスケープ
- `\`を付けることでMarkdownを無効化出来ます。
- Macで`\`を入力する方法は、`option(alt) + ¥`で出来ます。

> \\\`インラインで表示されません。\`
のように書くと
\`インラインで表示されません。\`
ローカルブランチをコマンド一発で削除する

# ブランチの一括削除
ローカルのブランチが増えすぎた時、コマンド一発で一旦消して綺麗にしたくなる。
その時のコマンド

```
git branch | xargs git branch -D
```

# コマンドの内訳
## git branchでブランチ一覧の取得
```
git branch
```
## ブランチ名を引数にブランチの削除を実行
```
git branch -D <branch_name>
```
でブランチの削除が行える。
パイプとxargsを用いて、git branchで取得したブランチ名を引数に削除を実行する。

# 削除するブランチを絞り込みたい時
間にgrepを挟めば良い。
例えばfeatureブランチのみを削除したい時

```
git branch | grep feature | xargs git branch -D
```
で消せる。
SAS ViyaでJupyter notebookをはじめるまでの手順

SAS ViyaはAIプラットフォームです。PythonやJava、Rなどの言語を通して利用できます。そのSAS Viyaは無料で使えるトライアル環境を提供しています。実際にはじめるまでに幾つかのステップがありますので、今回はその紹介をします。

## [SAS for Developers](https://developer.sas.com/home.html)に行く

まずは[SAS for Developers](https://developer.sas.com/home.html)へ行きます。

<img width="1302" alt="Screenshot_ 2019-08-06 9.56.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/a9bd6507-103a-35a3-57b3-b67c8a7bae48.png">

その中にある `Get started on your SAS Viya Developer Trial` をクリックします。

<img width="500" alt="Screenshot_ 2019-08-06 9.56.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/75a4dcee-260c-68d4-3295-5a7f16700802.png">


## フォームを入力する

表示されたフォームについて全て入力します。なお、SAS Profileを使うこともできます。

<img width="1302" alt="Screenshot_ 2019-08-06 9.56.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/354ea00c-2718-033f-8143-e35dcc9c9d31.png">


すでに何らかのSASプロダクトを利用されている、またはトライアル環境を繰り返し試用する場合にはSAS Profileの登録をお勧めします。

[SAS Profileの新規登録はこちらから](https://www.sas.com/profile/)行います。

<img width="1302" alt="Screenshot_ 2019-08-06 9.56.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/5fe960a3-1737-7731-111a-02a220b613f1.png">

[SAS Profile](https://www.sas.com/profile/)

SAS Profileでログインしていると、フォームが自動入力されます。ただ、都道府県だけは選択状態にならないので注意してください。

トライアル申請が完了すると、以下のような画面になります。

<img width="1302" alt="Screenshot_ 2019-08-06 9.58.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/9f881416-fae9-c980-c72c-123fce7dd522.png">


## メールを確認する

少しするとトライアル環境が準備できたというメールが届きます。

<img width="1254" alt="Screenshot_ 2019-08-06 10.03.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/c26b4a46-8f4a-cc48-a0e2-39c7f968e2ea.png">

メールをクリックすると規約が表示されます。

<img width="1302" alt="Screenshot_ 2019-08-06 9.59.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/8a335abc-1681-1da1-cfec-7955d16c8f2d.png">

規約に同意し、SAS Profileでログインします。

<img width="1302" alt="Screenshot_ 2019-08-06 9.59.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/62b0dee4-b98b-c896-067c-e73d661b1057.png">

SAS ViyaのJupyter notebookが表示されるはずです。

<img width="1302" alt="Screenshot_ 2019-08-06 10.00.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274479/583417d2-9097-03ea-1f7e-7458b6bea9e0.png">

## まとめ

トライアル環境は14日間、途中で延長も可能です。ぜひSAS Viyaをお試しください。

[SAS for Developers](https://developer.sas.com/home.html)
Rails system specでのfroala editorを適用したフィールドへの値入力方法（fill in）

system specでfroala editorを適用したフィールドへの値入力方法のメモ

## 概要
普通に `fill_in` を使っても値が入らないので、domを指定して `set` を使って値を設定

特にversionに依存は無いと思うけど念の為以下記載。

- rails 5.2.3
- froala editor 2.9.3
- capybara 2.18.0

### froala editorとは
https://www.froala.com/wysiwyg-editor

・gem
https://github.com/froala/wysiwyg-rails

## コード

```spec/support/froala_editor_macros.rb
module FroalaEditorMacros
  def fill_in_froala_editor_field(text)
    find_froala_editor_field.set text
  end

  def find_froala_editor_field
    input_field_locator = ".fr-view"
    is_input_field_visible = false
    find(input_field_locator, visible: is_input_field_visible)
  end
end
```

```spec/rails_helper.rb
# こんな感じでsupport dirが読み込まれている前提
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }

~ 省略 ~
RSpec.configure do |config|
  ~ 省略 ~
  config.include FroalaEditorMacros, type: :system
end
```

```spec/system/hogehoge_spec.rb
# 通常のフィールドへの入力
fill_in 'title', with: 'rails system specでのfroala editorを適用したフィールドへの値入力方法（fill in）'
# froala editor適用しているフィールドへの入力
fill_in_froala_editor_field('system specでfroala editorを適用したフィールドへの値入力方法のメモ~')
```

## 注意
`input_field_locator = ".fr-view"` の指定なので1ページに複数froala editorを適用するフィールドがあった場合、この指定だとNGの予感。
slackやgmailなどのアカウントを一元管理できるFranzが超絶便利な件

チャットやメールなど種々のサービスがありますが、それらのアカウントを複数持っていて煩雑になっていたり、
用途によって１つのサービスのアカウントを２つ以上使い分けたりしていませんか？

そういう時にアカウントの切り替えが手間になります。
ブラウザを分けるなどの工夫もありますができれば一元管理できると嬉しいと思います。

そんな時に便利なのがこちらの**Franz**

## なにができるのか？
slackやGmailなどのサービスをタブ化してひとつのアプリ上で管理できます。
そして同一のサービスを２つ以上別のタブとして管理できます。
１つのサービスのアカウントを２つ以上持っている場合も、それぞれ同時にログインしてタブで管理できるのです。

## 対応サービスは？
- Slack
- ChatWork
- Gmail
- Office Outlook
- Messenger
- Skype
- GoogleCalendar
- Trello

など、これでも一部です。
お使いのサービスが１つくらいはあると思います。

私はかれこれ４〜５年使ってますがとても便利です。

現在はアカウント登録が必要になっているようですが、
基本無料でも使えます。有償版の開発支援もあるようです。

アカウント管理が煩雑になっている方は一度ぜひ使ってみてください。

DLはこちらhttps://meetfranz.com/

Mac版とWindows版の両方あります。
IntelliJ IDEAのターミナルバッファ行数の設定

IntelliJ IDEAのターミナルバッファ(コンソールログ)の最大出力行数の設定
下記の手順のように、レジストリから設定できる。

1. Shiftを２回(Search Everywhere)
2. registryと入力
3. terminal.buffer.max.lines.countを探して、好きな値に変更

デフォルト値は1000。
ES6+対応のminifyライブラリを探す

## 背景
JSのminifyにバージョンの古いuglifyJSを使っているため、ES6+が使えない。
ES6+を導入するための方法を調べました。

なお主な環境は以下の通り。

- node：v4.4.7
- webpack：v1.13.1
- backbone：v1.3.3

## 結論
- 工数かけずにES6+を使うなら、`uglifyJS`を外す（minifyしない）
- minifyを継続したままES6+を使うなら、nodeとwebpackのバージョンアップ、さらに`uglyfyJS`を廃止して`terserJS`を採用することを勧める

## 調査メモ

### minifyライブラリ候補
- [uglifyjs-webpack-plugin  -  npm](https://www.npmjs.com/package/uglifyjs-webpack-plugin/v/1.3.0)
- [terser-webpack-plugin  -  npm](https://www.npmjs.com/package/terser-webpack-plugin)

### uglyfyJSでES2015に対応できるか
* ⭕ 最新バージョンにすればES6+にも対応してる
	* [uglifyjs-webpack-plugin  -  npm](https://www.npmjs.com/package/uglifyjs-webpack-plugin/v/1.3.0)
	* node v6.9以上が必要
	* webpackのバージョンも上げる必要ありそう
* ❌ もうメンテされてない
	*  [https://github.com/mishoo/UglifyJS2/issues/3156#issuecomment-392943058](https://github.com/mishoo/UglifyJS2/issues/3156#issuecomment-392943058) 

### 代替ライブラリはあるか
* 代替ライブラリは[terser-js](https://github.com/terser-js/terser)
	* node v6.9以上が必要
	* webpackのバージョンも上げる必要ありそう

## まとめ
nodeのバージョンはすぐ上げられそう。
webpackのバージョンアップは大きな痛みを伴う予感あり（経験上）。

どちらのライブラリを採用するにしても、同じ痛みを伴いそうなので、メンテされてない`uglyfyJS`より`terserJS`を新規採用したほうが良さげ。
vue/require-valid-default-prop のESLint警告の解消方法

## 環境
- vue 2.6.10
- eslint 5.16.0
- ES7

## vue/require-valid-default-prop

```
export default {
  ...
  props: {
    propArray: {
      type: Array,
      default: []
    },
    propObject: {
      type: Object,
      default: {}
    }
  },
  ...
}
```

上記の様に書くと vue/require-valid-default-prop のESLint警告が出ます。

```
export default {
  ...
  props: {
    propArray: {
      type: Array,
      default: () => []
    },
    propObject: {
      type: Object,
      default: () => {}
    }
  },
  ...
}
```

こうすればok
Macのターミナルのhistoryコマンドの上限を拡張する

仕事でMac使うようになって、ターミナルをペチペチ叩いていて、historyコマンドって便利だな〜と思うようになりました。

```bash:入力結果
$ history
```

```bash:出力結果
    1  ls
    2  git status
・
・
・
（略）
```
訳も分からず言われるがままにうったコマンドもあるので、
何か問題があったときにこのコマンドログは問題解決のヒントになります。

# historyコマンドの上限
ただこのhisotryコマンド、困ったことに上限が500件となっています。
元インフラ屋としては、500件のログだと心配になってしまいます。

調べたところ、拡張はさほど難しくなかったので、拡張しました。
三日後にはどうやったか忘れそうなので、メモします。

# historyコマンドって何してるの？
仕組みはめちゃくちゃ簡単です。

```
~/.bash_history
```
上記に隠しファイルがあり、コマンド入力のたびに一行ずつ追加されていきます。
このファイルの中身を表示するコマンドがhistoryです。

クリティカルな処理しているLinuxサーバであれば、そもそも上記ファイルを日次バックアップするとか、
シェルスクリプトでhistoryコマンドうってファイルに残すとかすべきですが、
当方は開発用のMacなので、そこまで困らないかな、と思い、上限拡張のみにしました。

# bashrcを設定
初期設定を変えるためには、シェル起動のたびに読まれるbashrcというファイルに色々書くと実現できるらしい。

```
~/.bashrc
```
Macのデフォルトだと、ホームディレクトリ配下に下記ファイルがないようなので、新規作成する。

[コマンド履歴の達人を目指してみる](https://zariganitosh.hatenablog.jp/entry/20131028/history_master)

こちらのサイトを参考に、僕は下記の設定にしました。

```bash:個人設定
HISTSIZE=5000       # 現在使用中のbashが保持する履歴数
HISTFILESIZE=5000   # 履歴ファイルに保存される履歴数
# HISTCONTROL=ignoredups  # 同じコマンドが連続する場合は1回だけ記録する
# HISTCONTROL=ignorespace # コマンドの頭にスペースを付けて実行すると記録しない
HISTCONTROL=ignoreboth    # ignoredupsとignorespaceどちらも設定する
HISTIGNORE=history     # historyは記録しない。
HISTTIMEFORMAT='%Y/%m/%d %H:%M:%S ' #コマンド履歴に日時（例: 2013/10/26 12:34:56）を付加する
```

これで動くかな〜と再起動してみたのですが、読み込んでくれませんでした。
bash_profileも設定が必要でした。

# bash_profileも設定
Macのデフォルトだと、bash_profileも存在しないので、こちらも作成しました。
ログイン時に読み込まれるのがbash_profile、bash起動時に読まれるのがbashrcという使い分けみたいです。
分かれていて嬉しいケースがあんまり思い浮かばないですが、細かいユーザー設定はbashrcに書くのがGood Practiceっぽいです。

```bash:bash_profile
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
```
ここまでやると、こんな出力結果になります。

```bash:出力結果
  505  2019/08/06 10:23:09 hisotry
  506  2019/08/06 10:07:28 bash
  507  2019/08/06 10:23:09 exit
```

嬉しい！

# .bash_profileと.bashrcの作り方（シェル操作初心者向け）
下記を参照してください。

[.bash_profileと.bashrcのまとめ](https://qiita.com/takutoki/items/021b804b9957fe65e093)

# 参考
[コマンド履歴の達人を目指してみる](https://zariganitosh.hatenablog.jp/entry/20131028/history_master)
[Macターミナルの初期設定では~/.bash_profileと~/.bashrcはない？](https://it-ojisan.tokyo/mac-bash/)
Redmine REST APIでWikiページ生成時に親ページを指定する方法

# Redmine Rest API公式ドキュメント
https://www.redmine.org/projects/redmine/wiki/Rest_WikiPages

## ドキュメントを参考に、以下のようなXMLを作っても
```
<?xml version="1.0" encoding="UTF-8"?>
<wiki_page>
     <title>hogehoge</title>
     <parent title="hogehoge"/>
     <text>h1. hogehoge</text>
     <version>1</version>
     <author id="x" name="hogehoge"/>
     <comments></comments>
     <created_on>hogehoge</created_on>
     <updated_on></updated_on>
</wiki_page>
```
実際に送られるXMLは親ページ指定のタグ(parent title)が無視されます

```
<?xml version="1.0" encoding="UTF-8"?>
<wiki_page>
     <title>hogehoge</title>
     <text>h1. hogehoge</text>
     <version>1</version>
     <author id="x" name="hogehoge"/>
     <comments></comments>
     <created_on>hogehoge</created_on>
     <updated_on></updated_on>
</wiki_page>
```
<hr />

この現象について以下のページを参照
http://www.redmine.org/issues/14829
数年前にちゃんとパッチが当たっていました。
このページを参考にXMLを

```
<?xml version="1.0" encoding="UTF-8"?>
<wiki_page>
     <title>hogehoge</title>
     <parent_title>hogehoge</parent_title>
     <text>h1. hogehoge</text>
     <version>1</version>
     <author id="x" name="hogehoge"/>
     <comments></comments>
     <created_on>hogehoge</created_on>
     <updated_on></updated_on>
</wiki_page>
```
に修正します。
修正点は以下の部分です。

```
<parent title="hogehoge"/>
↓
<parent_title>hogehoge</parent_title>
```
<hr />

結果、XMLに親ページのタグである、

```
<parent_title></parent_title>
```

が含まれて親ページを指定できます。
Google Play Billing:定期購読の無料試用についてと、適用されるユーザーの判定方法

#はじめに
この記事では、定期購読についての簡単な説明と、無料試用が適用されるユーザーか事前に判定する方法について解説します。

Google Play Billing Library による課金実装については↓の記事をご参照ください。
[Google Play Billing Library を使ってみる](https://qiita.com/nyandroid/items/bc767b9d2f5a42cc7d04)

#定期購読とは
ユーザーの支払い方法に対して定期的に請求が行われるアプリ内アイテム。
定期購入の例としては、オンライン雑誌や音楽ストリーミング サービスなどがあります。
定期購入は、Google Play Billing Library内では「SUBS」と呼ばれます。

#無料試用期間について
請求されずにユーザーが定期購入にアクセスできる期間。
無料試用期間を設定すると、実際に購入を行う前に定期購入を試すようユーザーにすすめることができます。

- 対象
新規で購入したユーザにのみ適用されます。
（無料試用期間を設定する以前に購読履歴があって再度購入しても適用されません）

- 設定期間
無料試用期間は、3 日以上に設定できます。
また、期間を変更する事ができるが、利用できるのは新規の定期購入のみ


#無料試用が適用されるユーザーかコード上で判定する
無料試用が適用されるユーザーか事前に判定する事が出来ると、アプリ内で適切にユーザーに訴求する事が出来ます。（「¥0で登録しよう」, 「無料で体験しよう」など）

###判定方法
`BillingClient#queryPurchaseHistoryAsync` を使います。
`queryPurchaseHistoryAsync()` は、購入が期限切れ、キャンセル、または消費された場合でも、ユーザーによって行われた最新の購入を返します。
https://developer.android.com/reference/com/android/billingclient/api/BillingClient

購入履歴が返ってくるため、この履歴が空だったら `一度も買ったことがない` ということで、無料試用を未体験とみなすことが出来ます。

``` kotlin
/**
 * 無料試用訴求対象ユーザーなら true を返却
 */
fun isFreeTrialTarget(): Single<Boolean> {
  return Single.create { emitter ->
    // リスナーを用意
    val purchaseHistoryResponseListener = object :PurchaseHistoryResponseListener{
      override fun onPurchaseHistoryResponse(
        responseCode: Int,
        purchasesList: MutableList<Purchase>?
      ) {
        if (responseCode != BillingClient.BillingResponse.OK) {
          emitter.onError(Exception("error!! responseCode:$responseCode"))
        }
        emitter.onSuccess(
          when {
            // 購読履歴が無いので、無料試用対象ユーザーである
            purchasesList.isNullOrEmpty() -> {
              true
            }
            else -> {
              false
            }
          }
        )
      }
    }
    // SkuTypeとリスナーを渡して呼び出し
    billingClient.queryPurchaseHistoryAsync(
      BillingClient.SkuType.SUBS,
      purchaseHistoryResponseListener
    )
  }
}
```

#関連リンク
https://developer.android.com/google/play/billing/billing_library_overview
https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchasehistoryasync

以上です。
Cognos Query Studio で列幅の指定など細かなカスタマイズをする

#Query Studioで列幅など細かな指定をする
CognosのQuery Studioは昔から使われている自由分析ツールですが、以下のような感じにクエリーアイテムを配置すると簡単にリスト形式のレポートができます。
しかしながら自由分析だけに「レポート」の機能のプロパティでセルサイズを指定するような、細かな設定が行えません。

例えば以下のようなQuery Studioの表示を見ると、右半分の「製品ラインコード」より右は、列のタイトルが二行に折り返して表示されているけど、1画面に無理やり納めずに、スクロールバー出して横に広げて列タイトルは一行にして欲しい、と思ってもイマイチやり方がわかりません。
<img width="960" alt="001.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/c743b403-d0f7-01ef-4004-7a4d22febf2d.png">

というお悩みは、Query Studioの「テンプレートを適用」機能を使用する事で解決できます。

#手順
まず、テンプレートを作成するために、「レポート」を新規に開きます。※Query Studioではなく「レポート」を開く。
赤枠のプルダウンから「テンプレートに変換」。
<img width="255" alt="002.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/e6af9f90-cff5-d02a-3eac-a9b717486707.png">

「ページ」アイコンから「クラス」を選択し、「リストの表」のプロパティから下記のように「サイズおよびオーバーフロー処理」を指定します。
<img width="960" alt="003.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/7910597e-e84e-7677-46d5-ae37c2366f14.png">

同様に、「リストの列タイトルのセル」「リスト列の本体のセル」に関して、下記のように「サイズおよびオーバーフロー処理」を指定します。
<img width="960" alt="004.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/eee4ce1b-1cfb-b7ce-2859-d6b3a608e20f.png">

レポートを保存します。
<img width="395" alt="005.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/c34723fd-1758-9f26-1e89-d545b79467c8.png">

Query Studioに戻ります。「レイアウトを変更」→「テンプレートを適用」で、先ほどのレポートを指定します。
<img width="960" alt="006.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/fc4857f1-5681-6ec3-36ea-26eb91150323.png">

以下のように、横方向のスクロールバーが表示され、各列のタイトルは一行で表示されるように変更されます。
<img width="960" alt="007.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/aa7bc01e-706a-7655-9b5b-9b4f2e7ec5c2.png">

この状態でQuery Studioを保存しておけば、再度開いた際にもテンプレートが適用された表示となります。

#こちらも確認
**Cognos Query Studio でテンプレートの適用をしてもタイトルやフィルター内容を表示する**
https://qiita.com/shinyama/items/ba0d22b685715c47b81a
シェルスクリプトとアップルスクリプトで自動化

いつもRailsとReactで開発しています。
エディターはVimでiTerm2です。OSはMacOS Mojaveです。

毎日複数のプロジェクトを切り替えるのが面倒くさかったので、自動化させました。

やりたいことは、ターミナルを立ち上げた時に、`v`リターンするだけで、バババッとローカル開発環境が立ち上がってくれるというものです。

具体的には、pumaとwebpack-dev-serverとvimがそれぞれ３つのタブで開いてくれるというものです。毎回同じ操作をしていたので、とても便利です。

ホームディレクトリで`vim v`でv(victoryのv)という新規ファイルを作成しその中に下のコードをコピーします。

```vim

#!/bin/bash

# ここはご自身のアプリの場所を指定してください。
cd /Users/hikaru/rails6-project
mysql.server start

osascript <<EOF
tell app "Terminal"
  tell application "System Events" to keystroke "t" using command down
    tell application "System Events"
      delay 0.5
      keystroke "bin/webpack-dev-server"
      delay 0.5
      keystroke return
    end tell
  end tell
EOF

osascript <<EOF
tell app "Terminal"
  tell application "System Events" to keystroke "t" using command down
    tell application "System Events"
      delay 0.5
      keystroke "vim"
      delay 0.5
      keystroke return
    end tell
  end tell
EOF

rails s  
```  
注意点：keystrokeで、"bundle exec rails s"とか打つと、スペースが日本語IMEに変換されて、その後の文字が変になります。なので、スペースを意味する`key code 49`を入れてやります。


```vim
      keystroke "bundle"
      key code 49
      keystroke "exec"
      key code 49
      keystroke "rails"
      key code 49
      keystroke "s"
```

実行権限をつけてやる。  

```
$ chmod 777 v
```

普通に実行するとカレントディレクトリは変化しない.
source をつけるとカレントディレクトリはそのままになります。
そこで、初期設定ファイルにエイリアスをつける。
これは、作ったファイルの数だけ設定する。x y zと増えたらその分aliasも作ります。

```.zshrc/.bashrc

alias v='source v'
```
実行する！

```
$ . v
```
（ピリオドとvの間には半角スペースが必要）
この、ドットすら打つの面倒くさいので、/user/local/bin に作ったシェルスクリプトを入れましょう。パスが通っているはずなので、v エンターで、実行できるようになります。

```
mv ~/v /usr/local/bin/v
```


以上です。
シェルスクリプトとアップルスクリプトの組み合わせで色々自動化できそうです。
bundleとかgit pullとかyarnとか

追記20200206
Catarinaからbashじゃなくて、zshになったので、シェルスクリプトを書くときは、`#!/bin/bash` ではなく、`#!/bin/zsh`なのでご注意。
`. v` で起動ではなく、`./v`　で起動になります。/user/local/bin に入れちゃえば`v`リターンするだけで関係ないですけど。。念のため。

お読みいただきありがとうございました。
Kali LinuxにWingIDE(Python統合開発環境)インストール

Pythonプログラミング言語専用に開発された、統合開発環境であるWingIDをKali Linuxにインストールする手順を記載します。

たぶんKali LinuxでWingIDEを使いたいなんて方は以下の書籍を試したいのでは。
[サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考](https://www.amazon.co.jp/%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%8F%E3%83%83%E3%82%AB%E3%83%BC%E3%81%AE%E6%80%9D%E8%80%83-Justin-Seitz/dp/4873117313)
オライリーの書籍ですがPythonビギナーでも出来ますしかなり面白い内容です。


## バージョン
Kali Linux version 2019.2
Wing Personal - Version 7.1.0 - Released 2019-07-25

## WingIDEダウンロード
[WingIDEのサイト](https://wingware.com/)より右上Downloadをクリックします。
<img width="548" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/a32c5ec9-d15f-eedf-2c5b-c3ea1e17b99c.png">

すると以下3種類が選択できます。
Wing Pro ⇒ プロのプログラマーのためのフル機能が搭載されたPython IDE（有料）
Wing Personal ⇒ 学生や愛好家のための無料のPython IDE（無料）
Wing 101 ⇒ 初心者のための簡単に使用できる無料のPython (無料)

今回はこの中から無料であるWing Personalをダウンロードします。
左下でOSを選べる欄があるのでLinuxを選択すると以下の画面に遷移します。

<img width="816" alt="キャプチャ2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/1fc3098a-e455-271c-261c-15f2f904a137.png">

右下の「Linux(x86 64-bit)tar file installer 64-bit」をクリックすると、
自動でダウンロードが始まります。

## Kali Linuxにインストール
以下Kali Linux内、rootユーザでの作業です。
任意のディレクトリにダウンロードした wing-personal-7.1.0.2-linux-x64.tar.bz2 を配置してください。

```
解凍
# tar jxf wing-personal-7.1.0.2-linux-x64.tar.bz2

移動
# cd wing-personal-7.1.0.2-linux-x64/

インストーラ実行(最初対話形式で質問されます)
# python wing-install.py
Where do you want to install the support files for Wing IDE (default = /usr/local/lib/wingide7.1)? 
⇒そのままEnter
/usr/local/lib/wingide7.1 does not exist, create it (y/N)? 
⇒y
Where do you want to install links to the Wing IDE startup scripts(default = /usr/local/bin)? 
⇒そのままEnter

...

※最後に以下表示されれば成功です。
Done installing.  Make sure that /usr/local/bin is in your path and type
      "wing-personal7.1" to start Wing Personal.

```

## 起動
```
# wing-personal7.1
```
こちらでGUIが立ち上がります。
actix-webでリダイレクト


```rust:main.rs
use actix_web::{
    http::{StatusCode, Method, header},
    HttpResponse, Result, Error, HttpServer,
}

fn index() -> Result<HttpResponse, Error> {
    let q = "google";
    let request_uri = format!("https://www.google.com/search?q={}", q);

    Ok(HttpResponse::TemporaryRedirect()
        .header(header::LOCATION, request_uri)
        .finish()
    )
}

fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(
        web::resource("/").to(index))
    )
        .bind("127.0.0.1:8080")?
        .run()
}
```
Istio study #1 ~architecture~

# はじめに
先日参加したGoogle Cloud NextでIstioのことが好きになったので、勉強がてらIstioについてまとめてみることにしました。

## Istioを構成する各コンポーネント群について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101435/92b2babf-2848-8318-2563-b8e0b483e3ab.png)

### Envoy
* Sidecar proxy
* 通信はこいつが担う

### Mixer
* サービスメッシュ内のアクセスコントロールと利用ポリシーを司る
* Envoy proxyや他のIstioサービスからデータを収集する
* Envoyがリクエストからattributeを取得しMixerへ送信してくるので、Mixerが評価を行う

### Pilot
* Service Discovery(for Envoy)、Traffic Management(for intelligent routing)、resiliency(ex.timeout)を提供する
* Pilotは高レベルなrouting ruleをEnvoy向けのconfigurationへconvertし、実行時にsidecarへ伝達する
* Pilotはプラットフォーム特有のサービスディスカバリ設定を、Envoyがconsume可能な状態へ変更する
* 上記によりKubernetesやConsul、Nomadなど複数プラットフォームで共通的に動作できる

### Citadel
* サービス間、もしくはユーザ間の強力な認証を行う
* Citadelはサービスメッシュ間の通信制御を、L3・L4ではなくアプリケーションレイヤーで行うことができる

### Galley
* Istioのconfigurationをpodへ分配する
Android10でMediaStore.Images.Thumbnails()が変？

前まで、MediaStore.Images.ThumbnailsでExif付Jpegを取得すると、
元画像(※)のサムネイルが取得できていたので、その後に、ExifInterface使って、
回転情報を元に自前で回転処理入れていた。

Android10で試すと、すでに回転処理されたサムネイル画が返ってくるんだけども。。。
仕様？バグ？


※ほとんどの写真表示アプリは、元画像に対してExifのRotation情報を元に
　回転処理後の絵を表示しています
　マイクロソフトのペイントでさえ元画像でなく、回転済みという・・・
　元を開いて欲しい時もあるんだが・・・・

2019.08.08 Update

Beta6が出てきたので試してみるも変わらず。
このAPI使って、Thumbnail画像取得しているアプリたくさんあると思うんだけど、
話題になってないなー。
試しに、「File Commander」って、メジャーなファイル管理アプリでJpeg写真を
見てみたら、サムネイル画像回転処理がとち狂っててワロタ
Oracle DeveloperでDate型の表示書式を変える方法

# 環境
Oracle 12c 1.0

# 手順
1. Developerの上部メニューから[ツール]を選択
2. [プリファレンス]を選択してダイアログを開く
3. 画面左のメニューツリーから[データベース]→[NLS]を選択
4. 画面に「データベース：NLS」が表示されたら、[日付書式]項目を任意の書式に書き換える。

<img width="344" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403060/c92ecefa-33f1-5f55-2ff4-b982a689450e.png">


# 書式の指定例
下記クエリ実行時

```
select sysdate from dual;
```

デフォルト：RR-MM-DD
　⇒ `19-07-18`
ハイフン区切り：YYYY-MM-DD HH24:MI:SS
　⇒ `2019-07-18 13:20:27`
スラッシュ区切り：YYYY/MM/DD HH24:MI:SS
　⇒ `2019/07/18 13:20:27`
区切りなし：YYYYMMDDHH24MISS
　⇒ `20190718132027`

※しかしたまに設定変更していてもデフォルト表示される場合がある…
　そんな時は再起動したりしてます（必ず戻るわけではない）
作業効率を上げるための作業

なんかプログラミング関係ないかもしれないんですけれど

ショートカットキーとかバッチって面白いですよね

っていうことで

作業効率を上げるためにバッチやショトカを使ってみようって記事です

※Windows10前提です


#そもそもバッチとは

コマンドプロンプトで
やりたい命令のコマンドをファイルに書いておいたものを実行する。
拡張子は.batもしくは.cmd
どっちでもいいらしいけど.batですべてが解決するらしいので 特にこだわりでもない限りはbatでいいみたいです

```example.bat
start chrome.exe
taskkill /f /im cmd.exe
```

これは
・chrome.exeを実行
・タスクキルコマンドでcmd.exeっていう/image(名前？)のタスクを/finishする

っていう処理です
メモ帳にでも書いて、拡張子を.batにしてどっかに保存しましょう。

このファイルをタスクバーの１番目に固定したらスタート+１で起動できるので
押せばいくつも新しいウィンドウを開けるという点でchrome.exeのショトカをタスクバーに固定するよりも便利だったりします。


タスクバーに固定できないって？

example.batを右クリックして、example.batショートカットを作成しましょう
んでショートカットを右クリック
プロパティのリンク先を
```
C:\Windows\System32\cmd.exe /c 「元から書いてあるパスC:\Users\...\chrome.bat」
```

としましょう

そしたらタスクバーに固定できるようになるはずです

ほかにも

```example.bat
C:Users/file/hoge.url
```
とかやれば、ブラウザからURLを開けます
hoge.urlはどうやって持ってくるかって言うと
ブラウザのURLバーの左側の 鍵だか家だかのアイコンを
エクスプローラーにドラッグしてみてください
拡張子の.urlは表示されないかもしれないですが、リンクのファイルが作れます

バッチがうまく起動しないなーとかあったら

```example.bat
C:Users/file/hoge.url
pause
```

と、pauseをつけてみてください

cmdが残ったままになるので、どこで失敗しているのか確認することができます！


危ないバッチファイルですけど

```shutdown.bat
shutdown.exe -s -t 0
```
これが0秒後にシャットダウンするコマンドです


.exeなくてもcmd上でコマンド入力する分ならいいんですけど
batファイルにするなら.exeつけないとうまくいきません

```reboot.bat
shutdown.exe -r -t 0
```
これが再起動バッチです


そもそも

```
shutdown 
```
コマンドのオプションで
```
-s
```がシャットダウンのs
```
-r
```が再起動(Reboot)のrです

tは時間で、何秒後に実行するかを指定できます。


#ショトカ
エクセルでセルの文章を書くときはF2
HomeやEndキーをうまく使えばカーソル移動が楽に
BackspaceだけでなくDeleteも使ってみたり
Shiftを押しながらは選択
Ctrlやtab,winキーを組み合わせたショトカばかり
などなど...

わりとメニューの横とかにショトカ書いてあることありますよね
使ってみないと覚えられないので、いっぱい使って手でおぼえましょ！

その都度調べたりしますが、個人的によく使うものを集めてみました！
ぜひ試して見てください！
※だいたいshift付けると挙動逆とか、結構共通してるよね

大きい動作のショトカ

・スタート+Alt+D  カレンダー表示
・スタート+I  設定を開く
・スタート+E エクスプローラーを開く
・スタート+A  アクションセンターを開く

・スタート+tab  開いてるウィンドウを表示
・Alt+tab  開いてるウィンドウを移動

・スタート+Ctrl+D  仮想デスクトップを追加
・スタート+Ctrl+F4  仮想デスクトップを閉じる
 (ウィンドウはこっちもどってくる。消えない。)
・スタート+Ctrl+左右  仮想デスクトップ移動

・Ctrl+shift+Esc  タスクマネージャーを起動
・スタート+R  ファイル名を指定して実行
 ↑calcで計算機 cmdでコマンドプロンプトとかね
・スタート+S  Cortanaで検索できる
・スタート+D  ウィンドウを全て隠し、デスクトップ画面を表示
 もっかいやるとウィンドウ全部でてくる
 スタートDしてからデスクトップで操作をすると1つずつウィンドウ戻さなきゃだめになる(><)
スタート+X  スタートを右クリックしたやつがでる
 便利なメニュー多いよねぇ
・スタート+W  Windowsのワークアプリを起動
そのままEnter押せば付箋アプリStickyNotesが開くはず



ブラウザでのショトカ(eclipseやサクラエディタでもだいたい同じような感じです！)

・Alt+F4  フォーカスのあるものを終了する
・Ctrl+E  googleで検索
・Ctrl+R  更新(F5と同じ)
・Ctrl+T  タブを作る
・Ctrl+W  タブを閉じる
・Ctrl+shit+W  タブを全て閉じる    (eclipseで確認)
・Ctrl+tab  タブを右に移動
・Ctrl+shit+tab  逆に！タブを移動
・Ctrl+Home  タブを右に移動
・Ctrl+End  タブを左に移動
↑Home Endは大抵どこでもつかえる！

・Alt+左右  進む、戻る
・tab  選択だかフォーカスだかを移動
・shift+tab  移動方向が逆に！
・chromeでF6  URLバーに移動

・Ctrl+F または F3  ページ内検索
・Ctrl+A  全部選択
・shift押しながら矢印やHome End  範囲選択
・Ctrl+C  コピー
・Ctrl+V  ペースト
・Ctrl+S  上書き保存
・Ctrl+shift+S  名前をつけて保存
・Ctrl+Z  もどす
・Ctrl+X  きりとり


とりあえずこのくらい知っておけばマウスを触らずにPCいじれるかと思います

最大の敵はスクロールです

Home End や Pageup Pagedown ↑ ↓だと
調節がきかないので
スクロールだけはマウス欲しいです…ぐやじい


ということで皆さんも
ようこそ脱マウス人生へ！
Knowledge・Qiita用マークダウン記法 チートシート

自分用メモです。
今後も随時追記していきます。

# 目次
■レイアウト
[見出し](#見出し)
[リスト](#リスト)
[番号付きリスト](#番号付きリスト)
■装飾
[強調（太字）](#強調（太字）)
[強調（斜体）](#強調（斜体）)
[取り消し線](#取り消し線)
[コードのインライン表示](#コードのインライン表示)
[引用](#引用)
■挿入
[リンク](#リンク)
[ページ内リンク](#ページ内リンク)
[水平線](#水平線)
[コード](#コード)
[Markdownのエスケープ](#Markdownのエスケープ)
■テーブル
[テーブル](#テーブル)

## 見出し

# 見出し h1
## 見出し h2
### 見出し h3
#### 見出し h4
##### 見出し h5
###### 見出し h6

```
# 見出し h1
## 見出し h2
### 見出し h3
#### 見出し h4
##### 見出し h5
###### 見出し h6
```

## リスト
- リスト
- リスト
    - リスト

```
- リスト
- リスト
    - リスト
```

## 番号付きリスト
1. 番号付きリスト
2. 番号付きリスト
    1. 番号付きリスト

```
1. 番号付きリスト
2. 番号付きリスト
    1. 番号付きリスト
```

## 強調（太字）
**text**

```
**text**
```

## 強調（斜体）
*text*

```
*text*
```

## 取り消し線
text

```
~~text~~
```

## コードのインライン表示
これは`code`です。

```
これは`code`です。
```

## 引用
> text
>> text

```
> text
>> text
```

## リンク
[これはQiitaへのリンクです](https://qiita.com/)

```
[これはQiitaへのリンクです](https://qiita.com/)
```

## ページ内リンク
[これは「目次」へのページ内リンクです](#目次)

```
[これは「目次」へのページ内リンクです](#目次)
```

「#」＋リンク先の要素ID　で指定。
Qiitaではリンク先のラベル名でOK。
Knowledgeの場合、要素IDは同一マークダウン記法の数によって可変なので、指定時にデベロッパーツールで確認すること。
見出しへのリンクの場合、idは「#markdown-agenda-1」のようになる。

## 水平線
---

```
---
```

## コード
```javaScript
var tmp = "あいうえお";
print(tmp)
```

コードの上下をバッククォート3つ（\```）で囲う。
はじめのバッククォートに続けて言語を指定することで、シンタックスハイライトをつけることができる。


## マークダウンの記号をエスケープする（通常の文字列として認識させる）
バックスラッシュ（\）

## テーブル
| Left align | Right align | Center align |
|:---|---:|:---:|
| テスト１ | テスト２ | テスト３ |
| 12345 | 12345 | 12345 |
| abcde | abcde | abcde |

```
| Left align | Right align | Center align |
|:---|---:|:---:|
| テスト１ | テスト２ | テスト３ |
| 12345 | 12345 | 12345 |
| abcde | abcde | abcde |
```
正負双方向定電流回路の理論と解析

#目的
よく知られているオペアンプを利用した定電流回路は正方向にしか電流を流すことができない。中間電位をとることで双方向にした定電流回路も存在するが、ツェナーダイオードを利用しており、安定した回路を作ることが難しい。本記事では、オペアンプをBTL接続した定電流回路の理論的解説と、spiceによるシミュレーションを行う。

#原理
まず、よく知られているオペアンプを用いた定電流回路を図1に示す。
<img width="361" alt="図1.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/a4bf9c53-0e55-2526-bc5e-937382b6b68f.jpeg">
図1　オペアンプを用いた定電流回路

Rlは負荷である。Rlに流れる電流をIとすると、

```math
I = -Vin / Rs　・・・(1)式
```

となる。
Vinは0以上、電源電圧も0以上であるから、出力電圧及び電流が負になることは無い。

ここで、図1をよく見ればGNDを基準とした電位をとっていることが分かる。
即ち、GND電位をVgとすれば(1)式は、

```math
I = -(Vin - Vg) / Rs  ・・・(2)式
```

となる。
(2)式は、

```math
Vin < Vg
```

の場合はIが負になる。
そこで、VgをVoutの反転電位とする。
即ち、Voutの後段にゲインが1の反転増幅器を接続し、図１でGNDと接続されている部分に接続する。
<img width="515" alt="図2.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/f1827660-534f-0525-6308-b8211d8bf106.jpeg">
図2.後段にゲイン1の反転増幅器を接続した場合
（電源電圧をVCCとする）

すると図2になる。反転増幅器の動作点は電源電圧VCCの1/2としている。
Vgが変動するため、Vinは電気的に絶縁したい。そこで、トランスを介してVinを接続する。
<img width="680" alt="図3.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/1392a180-eb1c-47f4-3ffe-1edb41d13a85.jpeg">
図3.Vinをトランスを介して接続した場合

したがって、図3となる。

#解析
spice系回路シミュレーションソフトであるtinaを用いてシミュレーションを行った。
<img width="1096" alt="tina.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/6c44dc04-33c5-6cb1-e7cb-8c3924559392.jpeg">
図4.tinaを用いてシミュレーションした正負双方向定電流回路

定電流特性を調べるため、正負双方向定電流回路を二つ用意し、負荷に繋がれたコイルを結合係数0.5で結合させた。定電流特性があるならば、片方に流れる電流に依らず、コイルに流れる電流の位相は入力信号の位相と一致するはずである[1]。

#結果
![tinadiag.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/fda095fb-eb98-98ca-21c3-d1e02c5990a4.jpeg)
図5.各部の電流電圧の波形

表1.入力電圧と負荷電流の関係
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175440/5b7b9981-a52a-bd3a-cc1f-d13c12eceb03.jpeg" width=65%>

#考察
表1.から、負荷電流の位相は入力電圧の位相と一致し、負荷の端子電圧に依らないことがわかる。また、図5から負荷電流は負にもなっており、正負双方向定電流回路を実現できていることがわかる。この回路で特質すべきことは、定電流特性は前段のアンプのみが担っているということである。すなわち、後段の反転増幅器は定電流性に影響を与えない。ゲインの誤差、動作点の誤差は一切影響しないため、安定した定電流特性を得ることができている。

#脚注
[1] [シミュレーションデータ](https://drive.google.com/open?id=18cNaYii1EKAifNeRhN-9yBCJnKJNkQ4l)
aws python boto3 roleではなく、access-keyで権限を付与する

ロールではなく、Access-keyで権限を付与することはできないかなと思い、試してみました。
os.environを利用することで環境変数を利用することができます。
Lambda関数でも環境変数を取得できるようになり、コード管理が容易になりました。

```xx.py

import boto3
import os
from boto3.session import Session

access_key = os.environ['ACCESS_KEY']
secret_key = os.environ['SECRET_KEY']

session = Session(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    region_name = 'us-west-1'
    )
ddb= session.resource("dynamodb")

```
webarenaでubuntu その3

#概要

webarenaでubuntu18.04やってみた。
apacheやってみた。

#インストール

```
sudo apt-get install apache2 php mysql-server php-mysql
```

#ポートの開放

```
tcp:80,80,ip4:0.0.0.0/0
```

#テスト

```
<?php
	phpinfo();
?>
```

以上。
solidityのテストカバレッジを取得する方法

#やりたいこと
solidityで記述したcontractのテストカバレッジを取得する
#前提条件
truffleプロジェクトでコードを記述する
#準備
##solidity-coverageをインストールする
truffleプロジェクト配下で**solidity-coverage**をインストールする

```npm install solidity-coverage```

##package.jsonの編集
**package.json**の**script**部分に定義を追加する

```package.json
"scripts": {
    "coverage": "solidity-coverage"
  },
```

##.solcover.jsを作成する
truffleプロジェクトのルートディレクトリに**.solcover.js**を作成する

```**.solcover.js
module.exports = {
  compileCommand: 'truffle compile',
  testCommand: 'truffle test'
};
```

#テストカバレッジの取得
truffleのルートディレクトリで以下のコマンドを実行します。
```npm run coverage```

実行イメージ

```
-------------------------------------------------------------------|----------|----------|----------|----------|----------------|
File                                                               |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
-------------------------------------------------------------------|----------|----------|----------|----------|----------------|
 contracts\                                                        |        0 |        0 |        0 |        0 |                |
 contracts\openzeppelin-solidity\contracts\                        |        0 |        0 |        0 |        0 |                |
  AddressUtils.sol                                                 |        0 |      100 |        0 |        0 |       17,25,26 |
  AutoIncrementing.sol                                             |        0 |      100 |        0 |        0 |          26,27 |
  Bounty.sol                                                       |        0 |        0 |        0 |        0 |... 43,45,46,47 |
  ECRecovery.sol                                                   |        0 |        0 |        0 |        0 |... 48,49,52,68 |
  LimitBalance.sol                                                 |        0 |        0 |        0 |        0 |       19,26,27 |
  MerkleProof.sol                                                  |        0 |        0 |        0 |        0 |... 31,33,36,41 |
```

##coverageの結果取得
truffleプロジェクトのルートディレクトリ配下に**coverage**というディレクトリが出来ており、その配下のindex.htmlに出力されている。

#感想
Javaを使った開発に長年携わってきたので簡単にカバレッジが取得出来るのは良いなと思いました。
テストコードの書き方も割と分かりやすかったので、solidityを使った開発では必ず使うことになりそうです。
カバレッジレポートは若干見辛いなという印象です。個人的にはGo言語のカバレッジレポートの方が見やすいと感じました。
webarenaでubuntu その２

#概要

webarenaでubuntu18.04やってみた。
vsftpdやってみた。

#インストール

```
sudo apt-get install vsftpd
```

#ポートの開放

```
tcp:20,20,ip4:0.0.0.0/0
tcp:21,21,ip4:0.0.0.0/0
```

#vsftpd.confの修正

```
listen=YES
listen_ipv6=NO
write_enable=YES
ascii_upload_enable=YES
```

以上。
Python3入門　PyCharmの使い方

#PyCharmの使い方
<img width="784" alt="スクリーンショット 2019-08-05 21.46.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477641/279b4d91-7897-6888-f21a-d8736fe9051c.png">
最初はこのような画面になっています。これの「Create New Project」をタップします。
そして次に「Project Interpreter」をタップします。
<img width="784" alt="スクリーンショット 2019-08-05 21.50.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477641/6538551e-e328-37b5-836d-bb8b8fd4f921.png">
そして「Existing Interpreter」をタップします。そうすると「Interpreter」のところに「No Interpreter」と書いてありますね？その横にある「...」のマークをタップしてください。
<img width="784" alt="スクリーンショット 2019-08-06 7.29.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477641/aa157e5f-11b2-c1c7-c038-a7fb00cec04b.png">
そしてPython３.７をタップします。そして「OK」を押してください。そして「Create」をタップしてください。<img width="784" alt="スクリーンショット 2019-08-06 7.55.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477641/2c6deb1a-e764-35ea-44fe-5c00e9908c7f.png">
このような感じになっていると思います。次に「untitled」の場所を二本の指でタップしてください。そうすると一番上に「New」というものがありますのでそこをタップしてください。そうすると色々な名前のファイルがありますね？その中の「Python File」をタップしてください。ではこの名前を「start_1」としましょう.次に文字列を一回打ってみましょう。<img width="770" alt="スクリーンショット 2019-08-06 8.01.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477641/1b4e145c-5821-ac33-ab34-7b47af97f905.png">
次に黒く囲んだ場所を二本指でタップしてください。そうすると下の方に「Run 'start'」をタップしてください。そのボタンは色々なものを実行する時に使います。試しに「Hello World」を打ってみましょう。<img width="770" alt="スクリーンショット 2019-08-06 8.06.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477641/e87aa760-73f7-d544-a59b-54cc688a8812.png">
無事出力されました！これで完了です。お疲れ様です！！
Pythonのsort()メソッド

# はじめに
Pythonのsort()メソッドについて学んだのでメモ。

#sort()メソッドとは
リストの並び替えを行うメソッド。
昇順・降順に並び替えられ、ソート順をカスタマイズすることもできる。

# リストを昇順にソートする
sort()は引数なしの場合デフォルトで昇順にソートする。
要素が数値の場合は小さい順に、要素が文字列の場合は文字コードの順にソートする。

```Python:使い方
#リストLを昇順に並び替える
L.sort()
```

```Python:例
hight = [48, 65, 53, 90, 60]
hight.sort()
print(hight) # => [48, 53, 60, 65, 90]

fruits = ['banana', 'peach', 'apple', 'orange']
fruits.sort()
print(fruits)# =>['apple', 'banana', 'orange', 'peach']
```

# リストを降順にソートする
reverseという引数を使うことで降順にソートできる。（デフォルトの値は'Falth'）
要素が数値の場合は大きい順に、要素が文字列の場合は文字コードの逆順にソートする。

```Python:使い方
#リストLを降順にソートする
L.sort(reverse = True)
```

```Python:例
hight = [48, 65, 53, 90, 60]
hight.sort(reverse = True)
print(hight) # => [90, 65, 60, 53, 48]


fruits = ['banana', 'peach', 'apple', 'orange']
fruits.sort()
print(fruits)# =>['peach', 'orange', 'banana', 'apple']
```

#ソート順をカスタマイズする
ソート順をカスタマイズするには、sort()にkeyという引数を与える。

```Python:使い方
#リストLをkeyで与えた関数でソートする
L.sort(key, reverse)
```

```Python:例
#名前とそれぞれの３教科のテストの点数のタプルのリストを作成する。
test_data = [("田中", 80, 67, 76), ("佐藤", 90, 67, 55), ("鈴木", 90, 70, 71)]

#テストの合計点を計算すし、その合計点の降順にソートする。
def sum_test_data(sub):
    return sub[1] + sub[2] + sub[3]
test_data.sort(key = sum_test_data, reverse = True)

print(sum_test_data(test_data[0])) # => 231(田中の合計点)
print(sum_test_data(test_data[1])) # => 223（佐藤の合計点）
print(sum_test_data(test_data[2])) # => 212（鈴木の合計点）
print(test_data) # => [('鈴木', 90, 70, 71), ('田中', 80, 67, 76), ('佐藤', 90, 67, 55)]
```

# 参考文献
[Python3.7.4 ソート HOW TO](https://docs.python.org/ja/3.7/howto/sorting.html)
Vuestic 2.0

#Vuestic Admin

###**38+のカスタムUIコンポーネントと美しいデザインのVue.js無料管理画面テンプレート**

*開発者 [Epicmax](https://epicmax.co).デザイン [Vasili Savitski](https://xxsavitski.com).*

![github_jp_x2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477154/84b69428-40f0-3d48-a517-db97b890f654.png)

###デモ | 説明書

Vuesticを選ぶべき理由 

ハイクオリティなUI: Vuesticの管理画面パネルは、最良のユーザーインタフェースデザインを使って設計されています。


カスタマイズ可能：Vuesticには38+の簡単に設定できるコンポーネントと７つのページがあります。（さらに増えていきます！）

レスポンシブ：Vuesticはスマホ、タブレット、デスクトップの画面サイズに対応しています。

きれいなコードVuesticのコンポーネントは [vue.js] (https://jp.vuejs.org/index.html) の公式スタイルガイドに準拠しています。jQueryも使われていません :wink:

各種ブラウザに対応：Vuesticは最新のChrome, Firefox, Safari, Edge, Opera, Internet Explorer 11に対応しています。

**国際化：** Vuesticにはi18n対応が組み込まれています。

**無料：** Vuesticのコードは[MIT License](https://github.com/epicmaxco/vuestic-admin/blob/master/LICENSE) を使って公開されています。


Vuesticの最新ニュースを受け取ろう！[Twitter](https://twitter.com/epicmaxco) や [Facebook] (https://www.facebook.com/epicmaxco/) でフォローしてください。


####インストール方法

まず初めに、事前に必要なソフトが全てインストールされていることを確認してください。[Node.js] (https://nodejs.org/ja/) ( >=8.9) 
[npm](https://nodejs.org/ja/) バージョン3+ (あるいは[yarn](https://yarnpkg.com/lang/ja/docs/cli/version/) バージョン1.16+) と[Git](https://git-scm.com).

必要なソフトウェアがインストールされていることを確認できたら、次に示す簡単なステップに沿ってVuestic Adminをインストールして、ご使用ください。

 - repoをクローン
 - appディレクトリに移動し、dependenciesをインストール：
 
####**npmをご使用の方：**

 - localhost:8080（デフォルト）でホットリロードを使ってサーブ
 - プロダクション用にビルド 
 - プロダクション用にビルドして、バンドルアナライザーレポートを閲覧
 
####yarnをご使用の方：

- localhost:8080（デフォルト）でホットリロードを使ってサーブ
- プロダクション用にビルド
- プロダクション用にビルドして、バンドルアナライザーレポートを閲覧


##機能
レスポンシブレイアウト | チャート (Chart.js) | プログレスバー | フォーム | セレクト | デートピッカー | チェックボックス・ラジオ | スタティックテーブル・データテーブル | mediumエディタ | スムーズタイポグラフィ | ボタン | 折りたたみ | カラーピッカー | フィルター | タイムライン | トースト | ツールチップ | ポップオーバー | アイコン | スピナー | モーダル | ファイルアップロード | チップ | ツリー | カード | レーティング | スライダー | チャット | マップ (Google, Yandex, Leaflet, amMap) | ログイン/登録ページテンプレート | 404ページテンプレート | i18n


####ブラウザサポート


*支援メンバー*

素晴らしいPR、課題、アイデアをご提供いただきいつもありがとうございます。[参加](https://github.com/epicmaxco/vuestic-admin) いただける方を常に受け付けています! 

Vuesticを使用して作られたプロダクト

[こちら](https://vuestic.epicmax.co/#/auth/login) で作られたプロダクトをシェアすることができます


####*あなた方に仕事を依頼することはできますか？* 
はい！一声おかけください： hello@epicmax.co 

ぜひ一緒に仕事をしましょう！その他これまでやってきた仕事 - [epicmax.co](https://epicmax.co)


######*ライセンス* :
[MIT](https://github.com/epicmaxco/vuestic-admin/blob/master/LICENSE)  license.
Coqメモ

CoqのPropについて、メモします。

### 簡単なSet

Coq.Init.Datatypesに定義されている。

```coq
Inductive Empty_set : Set :=.
Inductive unit : Set :=
    tt : unit.
Inductive bool : Set :=
  | true : bool
  | false : bool.
```

### 簡単なProp

Coq.Init.Logicで定義されている

```coq
Inductive True : Prop :=
  I : True.
Inductive False : Prop :=.
```

### 簡単なSetと簡単なPropの間の対応

boolに対応するものは、Propには用意されていない？

boolに対応するSetを無理やり作る。

```coq
Inductive X:Prop := A|B.
```

対応を表にすると以下のようになる。

|Set|Prop|
|---|---|
|`Empty_set` : Set|`False` : Prop|
|`unit` : Set|`True` : Prop|
|`tt` : unit|`I` : True|
|`bool` : Set|`X` : Prop|
|`true` : bool|`A` : X|
|`false` : bool|`B` : X|

### unitのmatchによる分解

以下はエラーにならない。

```coq
Check ( fun x :bool => match x with
| true => Set
| false => Prop
end).

Check ( fun x :bool => match x with
| true => True
| false => False
end
).

Check ( fun x :bool => match x with
| true => A
| false => B
end
).
```

### Xのmatchによる分解

以下はエラーになる。

```coq
(* X -> Typeを作ろうとした *)
Check ( fun x :X => match x with
| A => Set
| B => Prop
end).

(* X -> Propを作ろうとした*)
Check ( fun x :X => match x with
| A => True
| B => False
end).

(* X -> Setを作ろうとした*)
Check ( fun x :X => match x with
| A => unit
| B => Empty_set
end
).

(* X -> boolを作ろうとした*)
Check ( fun x :X => match x with
| A => true
| B => false
end
).
```

以下はエラーにならない。

```coq
Check ( fun x :X => match x with
| A => A
| B => B
end
).

Check ( fun x :X => match x with
| A => I
| B => I
end
).

Check ( fun x :X => match x with
| _ => true
end
).
```

排中律（`forall P:Prop, P \/ ~ P`）があるとproof irrelevance（`forall (P:Prop) (p1 p2:P), p1 = p2`）が証明できるらしく、matchでXを分解し、証明以外のものにできてしまったら大変である。
PHP 初心者メモ①

ドットインストールで学んだ用語。今までの知識と共に整理する。


①関数...にたような処理を纏めて登録しておく。関数名は自分で決められる
関数の作り方...function 関数名（引数=初期値）{
     纏めたい処理
}

関数（）//関数呼び出し

②引数...関数の実行時にデータを指定することができる

③引数の初期値...引数が指定されなかった時の値。

④戻り値...returnを使う。使った時点で関数の処理を止めつつ呼び出し元に値を返す
Kerasのcallback関数で中間層で出力される特徴表現を保存する

# Kerasのcallback関数で中間層で出力される特徴表現を保存する。
画像の抽象表現の獲得を必要とする機械学習の場合、評価の良いモデルを作るためには中間層でどのような処理が行われているかが肝になってくる。
ここでは、1epochごとに中間層での処理内容を出力するプログラムについて説明する。

## Kerasのcallback関数の使い方
epoch毎中間層の処理を出力するするための関数を作成する
https://github.com/keras-team/keras/blob/master/keras/callbacks.py
ここにkeras標準のcallback関数があるので、これらをまねて記述する。

Callbackを継承するクラスを記述る

```python
from tensorflow.keras import callbacks

class VisualizeFullLayers(callbacks.Callback):
    def __init__(self, arg1, arg2, ....):
        self.arg1 = arg1
        self.arg2 = arg2
		 :
		 :
```



ここではcallbackの一部の機能を使用して、全体的には以下のような構成にする

```python
from tensorflow.keras import callbacks

class VisualizeFullLayers(callbacks.Callback):
    def __init__(self, arg1, arg2, ....):
        self.arg1 = arg1
        self.arg2 = arg2
		 :
		 :
    
	# エポック完了ごとに行う処理
    def on_epoch_end(self, epoch, logs=None):
        pass

	# 学習終了後に行う処理
    def on_train_end(self, epoch, logs=None):
	    pass
```


## 各レイヤーごとに出力される特徴量

以下のコードは指定したepoch毎に行う中間層を出力する処理

```python
 # 中間層保存用辞書
full_layers_dict = {}

# 入力データを除いたレイヤー毎に保存の処理を行う
input_layers = ["input_layer0", "input_layer1", .....]
for layer in self.model.layers:
    if layer.name in input_layers:
        continue
	layer_func = K.function(inputs=[self.model.inputs, K.learning_phase()],
                            outputs=self.model.get_layer(layer.name).output)
    # 適当なテスト画像を入力として加える
    layer_features = layer_func([x_test_dict])
    full_layers_dict[layer.name] = layer_features
```

pickleのバイナリ形式で保存

```python
with open(save_name +\
    "/full_middle_layer_epoch{0:0=3}_valloss{1:.2e}.pickle".format(
        epoch, logs["val_loss"]), mode='wb') as f:
    pickle.dump(full_layers_dict, f)
```

## 全体のコード

```python
from tensorflow.keras import callbacks
import tensorflow.keras.backend as K 
import os
import pickle

class VisualizeFullLayers(callbacks.Callback):
    def __init__(self, x_test, save_dir, period):
        self.x_test = x_test
        self.save_dir = save_dir
        self.period = period
    
    def on_epoch_end(self, epoch, logs=None):
        save_name = self.save_dir + ...
        os.makedirs(save_name, exist_ok=True)
        if epoch%self.period==0:
            full_layers_dict = {}
            input_layers = ["input_layer0", "input_layer1", .....]
            for layer in self.model.layers:
                if layer.name in input_layers:
                    continue
                layer_func = K.function(inputs=[self.model.inputs, K.learning_phase()],
                                        outputs=self.model.get_layer(layer.name).output)
                layer_features = layer_func([x_test])
                full_layers_dict[layer.name] = layer_features

            # ついでに入力に使用した画像データも保存。これにより入力から出力までの流れを追える。
            full_layers_dict.update(x_test)
            with open(save_name +\
                "/full_middle_layer_epoch{0:0=3}_valloss{1:.2e}.pickle".format(
                    epoch, logs["val_loss"]), mode='wb') as f:
                pickle.dump(full_layers_dict, f)
            print("\nsave complete")
```
Windows10 IoT Coreに（マウス操作だけ）リモート接続する

#概要
Raspberry Pi 3にインストールしたWindows10 IoT Coreにリモート接続します。

#Windows10 IoT Coreの設定 
###IPアドレス設定　※必要な人だけ設定してください※

Windows10 IoT Coreを再起動したタイミングでIPアドレスが変わってしまうことがあり、面倒なのでIPアドレスを固定にします。

Windows 10 IoT Core ダッシュボードから[デバイスポータル]を開きます。
ID/PASSを聞かれるのでadministrator/IoT Coreをインストールしたときに設定したパスワード　を入力します。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/276576f2-79c3-6788-a1f9-e8cb76d49219.png)
左側のメニュー[Network]をクリックします。
右側の[IP Configuration]のリストから該当のIPアドレスを固定にします。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/ee9600e2-5224-10bd-9b16-49956fa32f2f.png)

###Windows IoT Remote Serverを有効にする。
左側のメニュー[Remote]をクリックします。
[Enable Windows IoT Remote Server]にチェックします。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/3b990023-e6be-329a-be94-acc1ea648a2a.png)

#IoTリモートクライアントを使ってリモート接続
Windows 10 IoT Core ダッシュボードから[IoTリモートクライアントの起動]を開きます。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/90ce791e-6a5d-3d02-ccdd-7211d7dd771b.png)
下記のメッセージが表示されたら[はい]をクリックします。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/c989e8fb-b1d9-1a67-82b6-311dbd8efcf6.png)
Windows IoT Remote Clientをインストールします。 
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/176b8c01-2041-731c-6f43-808ca2a5e00d.png)
インストールが完了したら、再びWindows 10 IoT Core ダッシュボードから[IoTリモートクライアントの起動]を開きます。
ですが、私の環境では画面が表示されず真っ黒...なぜかマウスだけはリモートで動かせました。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/e76a5d64-421c-70b2-a6bd-b2ce75e0a280.png)
どうやらRaspberry Pi 3では動かないみたいです。Raspberry Pi 4に期待。
https://docs.microsoft.com/ja-jp/windows/iot-core/manage-your-device/remotedisplay



#(おまけ)Visual Studio 2019からリモートデバッグ

###サンプルアプリケーションをダウンロード
ここからダウンロードできます。
https://github.com/Microsoft/Windows-iotcore-samples

###VS2019からリモートデバッグ
ダウンロードしたサンプルアプリの中のHelloWorld.slnをVS2019で開きます。 
プロジェクトのプロパティを開き、左側のメニューから[デバッグ]を選択します。
[ターゲットデバイス]：リモートコンピューターを選択
[リモートコンピューター]：Raspberry Pi 3のIPアドレスを入力します。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/611a603b-4abd-8190-cee0-86a518190ec9.png)

[リモートコンピューター]ボタンをクリックしてデバッグを開始します。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/d798f9d7-36c7-43e8-6e5e-fcac5caa2854.png)
サンプルアプリがリモートで実行できました。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454725/49d00802-2217-0eb8-1cac-4ac4df1e6b96.png)