OmniAICreator/Qiita-1.07M huggingface dataset:
Zoomの画面共有で動画がカクつく→CamTwistで解消できます

## これは何

- Zoomで画面共有をすると動画がカクつく問題を（ある程度）解消するための記事です
    - 単なるブラウザ操作を共有するだけなら良いんですが、動画とかアニメーションつきスライドとかを流すとコマ落ちが目立ちます
        - 画面のアニメーションを実装して、パッとフィードバックが欲しいときなども、画面共有だとあまりよろしくなさそうです
    - なお、この記事の内容を実践しても全てが解消できるわけではありません
        - ネットワークの速度なども関係します
- なお、CamTwistはMacでしか使えません :pray:

## 概要

1. [CamTwist](http://camtwiststudio.com/)をインストールする
1. 共有したい画面をキャプチャする
1. Zoomの`カメラを選択`から`CamTwist`を選ぶ
1. （必要に応じて）スポットライトビデオをオンにする

## CamTwistをインストールする

まずは以下のサイトにアクセスします。

http://camtwiststudio.com/

`Donwload Now`のボタンからdmgファイルをダウンロードし、ウィザードに沿ってインストールします。

## 共有したい画面をキャプチャする

インストール完了後CamTwistを起動したら以下のようなウィンドウが出ます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/760d4620-53bc-9887-f8b1-189ff82dfab3.png)

この記事の話では、触るのは以下の2つだけです

- 1番左側にある`Step 1: Select a video source`
- 1番右にある`Settings`

### Step 1: Select a video source

`Desktop+`を選択して`Select`を押します。
以上です。

### Settings

1. `Full Screen`のチェックを外す
1. `Confine to Application Window`にチェックを入れる
    1. 一応分かりやすさをアップさせるために`Filter out untitled windows`にチェックを入れておくと良いとと思います
1. `Select from existing windows`にチェックを入れる
    1. チェック下のselectから、共有したいウィンドウを選択します

## Zoomの`カメラを選択`から`CamTwist`を選ぶ

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/3e0dc676-05fb-0012-d40e-3ae2cb1c371f.png)

画面左下のビデオの設定から`CamTwist`を選びます。

1つ前のセクションでの設定が上手くいっていれば、ブラウザやKeynoteなど、自分が選択した画面が表示されていることでしょう。

## （必要に応じて）スポットライトビデオをオンにする

この設定だとあくまで「誰かのカメラに写っているのがPC上の画面」でしかないので、参加人数が多いとよく見えません。
スポットライト機能をオンにして、大きく映すと見やすくなります。

https://support.zoom.us/hc/ja/articles/201362653-%E5%8F%82%E5%8A%A0%E8%80%85%E3%81%AE%E3%83%93%E3%83%87%E3%82%AA%E3%81%AB%E3%82%B9%E3%83%9D%E3%83%83%E3%83%88%E3%83%A9%E3%82%A4%E3%83%88%E3%82%92%E5%BD%93%E3%81%A6%E3%82%8B

公式のヘルプにもあるとおり、参加者のビデオにカーソルを合わせて`...`をクリックして`スポットライトを追加`を選びます。
オブジェクトの扱い方

#目次
<b>①オブジェクトとは</b>
<b>②オブジェクトの扱い方</b>

####①オブジェクトとは
オブジェクトとは、データと属性が一緒になったものをいう

####①オブジェクトの扱い方

```php:

//オブジェクトの作り方
const person = {}

//以下のようにデータと属性を入れた状態で生成することもできる
const perosn ={
 name:["Ito","Taro"],
 age:36,
 gender:"male",
 hobby:{
   sports:"baseball",
   music:"hiphop"
  }
 getFirstName(){
   console.log(this.name[0]);
  }
};

//以下のように記述をすれば年齢を変更することができる
person.age= 34;

//以下のように記述をすればメソッドを実行することができる。
person.getFirstName():


```
[Rails]NOT NULL制約の学び

#はじめに
バリデーションをかける以外の制限について、知らない事が多かったので再学習。

#制約とは
リレーショナルデーターベース（RDB）でテーブルにデータを追加・更新する際に課すことができる制約のこと。

##NOT NULL制約
各カラムの値に、nilを制限する。

```マイグレーションファイル
    create_table :texts do |t|
      t.integer :genre, null: false
      t.string :title, null: false
      t.text :content, null: false

      t.timestamps
    end
```
null: true => 許可（デフォルト）
null: false => 拒否

##バリデーションとの違い
NOT NULL制約はnilを弾くことができるが空文字は弾けない
バリデーションはnilも空文字列も弾くことができる。

制限|nil|空文字列("")
-|-|-
null: fauls|○|✖️
presence: true|○|○

##デフォルト制約
カラムの値に初期値を指定する。

```マイグレーションファイル
    create_table :users do |t|
      t.integer :age, null: false, default: 0
      t.string :name, null: false
      t.text :email, null: false

      t.timestamps
    end
```
今回は初期値を0に指定。

#一意性制約（ユニーク制約）
テーブル内の重複するデータを制限する。

```ruby
  def change
    add_index :users, :email, unique: true
  end
```
上記の場合、usersテーブルのemailカラムにインデックスを追加位して、そのインデックスに一意性の制約をかけるよってこと。

モデルからでもバリデーションをかけられるけど、「Active Recordはデータベースのレベルで一意性を保証していない」という問題がある。

そこでデータベース上の特定のカラムにindexを追加して、そのindexが一意性であるようにすれば解決できる。

###indexとは
本の索引機能みたいなもの。データベースに格納されいているデータを片っぱしから探そうとすると非効率だから、indexで効率良く目的のデータまでたどり着くためのもの。

###indexの追加
インデックスの追加方法については、「マイグレーションでインデックスを追加するだけ」

```ターミナル
rails generate migration add_index_to_テーブル名_カラム名
```
忘れずrails db:migrateすること

#主キー制約（プライマリーキー制約）
テーブル内の重複するデータとNULLを制限する。

```マイグレーションファイル
    create_table :users id: false do |t|
      t.integer :age, null: false, default: 0
      t.string :name, null: false, primary_key: true
      t.text :email, null: false

      t.timestamps
    end
```
主キーはcreate_tableによってidという名前の主キーが作成される。
主キーを変更したい場合は:primary_keyオプションで指定する。
主キーを使いたくない場合はid: falseオプションで指定する。

#外部キー制約（フォーリングキー制約）
親テーブルと子テーブルの整合性を保つための制限をかける。

外部キー制約が設定された子テーブルのカラムは、親テーブルのカラムに格納されている値しか格納することができなくなる。

```マイグレーションファイル
add_foreign_key :テーブル名（参照元）, :テーブル名（参照先）
```
上記では、新たな外部キーが参照元テーブルのidカラムに追加され、参照先テーブルのidカラムを参照する。

###カラムを指定する場合
```マイグレーションファイル
add_foreign_key :テーブル名（参照元）, :テーブル名（参照先）, column: :カラム名（参照先）, primary_key: カラム名（参照先主キー）
```
参照先はt.references :テーブル名で宣言する必要がある。

参考もと
[【Rails】「テーブルのカラムに定義するNot Null制約」と「モデルに定義するバリデーション（presence: true）」の挙動の違い。
](https://qiita.com/wonder_meet/items/fa804f0d436a29c97460)
[Railsガイド/Active Record マイグレーション](https://railsguides.jp/active_record_migrations.html)
[Railsで主キーをid以外に設定し、ほかのテーブルとアソシエーションを結ぶ](https://qiita.com/tanutanu/items/6c53b5290eaa9bf905d3)
Thymeleafのチートシート （使ったら追加していくやつ）

Thymeleafのチートシート
どんどん追加していきます

■条件分岐
「errorMessage」がnullでないときは「エラー」を出力

```html:html
 <p th:if="${errorMessage != null}">エラー</p>
```

■要素がないときに表示させる

```html:html
<div th:if="${#lists.isEmpty(hogeList)}">
  <p>要素がありません</p>
</div>
```

■多項分岐
th:switchが使える。どこにも一致しなければth:case="*"となる(javaでいうdefaultみたいなもの)

```html:html
<div th:switch="${month}">
    <p th:case="1" th:text="|${month}月|"></p>
    <p th:case="2" th:text="|${month}月|"></p>
    <p th:case="3" th:text="|${month}月|"></p>
    <p th:case="*">対象なし</p>
</div>
```

■ if、unless

```html:html
<!-- 【条件】ID=1の場合に表示 -->
<div th:if="${hoge.id==1}">
   <p>hogeのid（ID=1）の場合に表示します</p>
</div>

<!-- 【条件】ID=1以外の場合に表示 -->
<div th:unless="${hoge.id==1}">
   <p>hogeのidが（ID=1）以外の場合に表示します</p>
</div>
```


404に遷移

```java:java
@GetMapping("hoge/1")
public void getHoge(){
    System.out.println("404ページに遷移します");
    throw new ResourceNotFoundException();
}
```

## 省略
与えられたテキストが最大サイズnになるよう省略処理をして最後に "..." がつきます。

```
${#strings.abbreviate(str,10)}//7文字＋…（だったと思います）
```

### 省略&改行コードを削除

```html:html
<p th:utext="${#strings.abbreviate(#strings.replace(hoge.message, '<br />', ''), 40)}"></p>
```

#messages.propertiesを使ってインクルード化したタイトルやmetaを管理する用法
headタグを全ファイル共通化した上で、タイトルやディスクリプションなどをmessages.propertiesに記述する場合の書き方です。

resourcesフォルダ配下にmessages.propertiesを作成

```txt:messages.properties
head:
  title:
    top: "トップページ"
    categoryTop: "カテゴリのトップページ"
    categoryDetail: "カテゴリの詳細ページ"
  description:
    top: "トップページの説明です"
    categoryTop: "カテゴリのトップページの説明です"
    categoryDetail: "カテゴリの詳細ページの説明です"
  url:
    top: "hoge/index.html"
    categoryTop: "hoge/category/index.html"
    categoryDetail: "hoge/category/detail.html"
```

html側

```html:inc-head.html
<title th:text="#{head.title.__${var}__}"></title>
<meta name="description" th:content="#{head.description.__${var}__}">
```

var=top ← 「top」部分にページ毎に割り振った変数名を記述（propertiesと同一にする）

```html:index.html
<head>
  <div th:with="var=top"></div>
  <div th:replace="inc-head"></div>
</head>
```

var=categoryTop ← 「categoryTop」部分にページ毎に割り振った変数名を記述（propertiesと同一にする）

```html:category/index.html
<head>
  <div th:with="var=categoryTop"></div>
  <div th:replace="inc-head"></div>
</head>
```

## `__${変数}__`
プリプロセッシング
`__${変数}__`で宣言することで事前に評価される。

##th:replace
インクルード化する時に使用

##th:with
変数を使う時に使用

#リンク
Thymeleafの標準式構文 | Java好き
https://javazuki.com/articles/thymeleaf-standard-expression-syntax.html
「Thymeleaf」のth:xxxx=""の属性に何が書けるのかという構文の話。 Table of Contents. 前提; 単純式. 変数式; 選択変数式; リンクURL式. リテラル; 演算 ...

##タイムリーフ　Tutorial: Using Thymeleaf (ja)
https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf_ja.html#%E6%96%87%E5%AD%97%E5%88%97
配列の扱い方

#目次
<b>①配列とは</b>
<b>②配列の扱い方</b>


####①配列とは
データの集合体のこと。一つの変数に対して複数の値を格納できる。


####②配列の扱い方
```php:
//下記のように定義ができる。
 const arry = [1,2,3,4,5,6];

//要素の数を知りたい時
 arry.length で配列の要素の数を知ることができる

//配列の末尾にitemが追加される
arry.push("item");

//配列の先頭に代入できる
arry.unshift("hello");

//配列の末尾を削除できる
arry.pop()

//配列の先頭を削除することができる
arry.shift()
```
EBSボリュームサイズを拡張しようとしたところ、ディスク使用率が100%で拡張コマンドが実行できない

## 事象

growpartコマンドでパーティションの拡張を実行したところ、エラーがでた。

```
mkdir: ディレクトリ `/tmp/growpart.17339' を作成できません: No space left on device FAILED: failed to make temp dir
```

インスタンス再起動してみても

```
failed [sfd_list:1] sfdisk --list --unit=S /dev/xvda FAILED: failed: sfdisk --list /dev/xvda
```

## 原因

ディスク容量がパンパンでコマンド実行できなくなってしまった。

## 解決

パンパンになった容量を一部、別の場所にマウントする

```
sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
```

ルートボリュームxvdaは拡張されているが、パーティションxvda1は拡張されていないので以下コマンドを実行

```
sudo growpart /dev/xvda 1
```

確認

```
lsblk
```

ファイルシステムの拡張

```
sudo xfs_growfs /dev/xvda1
```

確認

```
df -h
```

マウント解除

```
sudo umount /tmp
```

参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ebs-volume-size-increase/
【Windows】【Mac】複数のtxtやcsvファイルをたった1行で1ファイルにまとめる

# TL;DR
こういう感じのディレクトリ配下に複数のテキストファイルがあるとする。

```
dir
├── a.txt
├── b.txt
├── c.txt
...
└── z.txt
```

これを

```
combined.txt
dir
├── a.txt
├── b.txt
├── c.txt
...
└── z.txt
```

combined.txtにまとめたい。
Windowsとそれ以外によって違うのですが、まとめたものはなかったのでメモ。

# やること
ワイルドカード(*)を使って配下のtxt(またはcsv)ファイルをまとめて出力し、
1つのファイルにリダイレクトする。
コマンドが異なるだけ。


## Windows(Powershell, コマンドプロンプト)
typeコマンドはファイルの中身を出力するコマンド。
出力は標準出力なので、リダイレクト「>」を用いることで、別のファイルに出力内容を記述することができる。

```
c:> type dir/*.txt > combined.txt
```

## Mac, Linux(Unix系, bash, zsh, etc ...)
こちらはcatコマンドを使う。
同じく標準出力をリダイレクトさせる。

```
$ cat dir/*.txt > combined.txt
```

# まとめ
Windowsが我が道を行ってしまったために両方のコマンドを混同してしまうことも。
メモ代わりに残せてよかった。
pardot　初見　まとめ

#目次

pardotに関連するTrailheadをやってみて、メモ必要と判断した単語や概念をまとめる

#1. マーケティングオートメーション用語
![スクリーンショット 2021-05-19 10.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385774/52ae89f0-cbc5-cfe4-c3a7-5dca10458014.png)

- リードの生成 (または需要の創出): マーケティング活動を通して製品やサービスに対する関心を喚起すること。
- ビジター: Web サイトを訪問し、Pardot での追跡の対象となる匿名の人。 
- コンバージョン: ビジターが Pardot のランディングページまたはフォームに連絡先情報 (メールアドレスなど) を記入して登録すると、プロスペクトに変換されます。
- プロスペクト: 匿名のビジターが変換され、識別情報が特定された人。プロスペクトのレコードは Pardot 内に存在します。これは、Sales Cloud やその他の CRM のリードレコードと似ています。
- リードの育成: プロスペクトが実行したアクションおよび特定の評価条件を満たすかどうかに基づいて、対象を絞ったメッセージを一定の間隔で送信すること。 
- リードの評価: 組織ではおそらく何千人 (あるいは何十万人) もの人々とやり取りしていることでしょう。営業チームがこの全員に連絡することはできないため、最適なプロスペクトを営業に伝えることがマーケティング担当者の職務になります。プロスペクトという干し草の中から金の針を見つけ出すプロセスをリードの評価といいます。プロスペクトを営業担当に割り当ててフォローアップしてもらうかどうかのしきい値を決定します。

#2. Pardot Lightning アプリケーション
Pardot Einstein が指すのは、4つのコンポーネント
- Einstein 行動スコアリング
- Einstein リードスコアリング
- Einstein キャンペーンインサイト
- Einstein 属性

#3.pardotキャンペーン



#参考文献

[Pardot による顧客へのマーケティング](https://help.salesforce.com/articleView?id=sf.bundle_pardot_parent.htm&type=5)

[Pardotの使い方が知りたい！Pardotのヘルプ活用と学習方法](https://www.sunbridge.com/blog/tips/pardot_help_guide/)

[いまから始めるマーケティングオートメーション定番シナリオ20選](https://www.salesforce.com/jp/products/pardot/resources/)

[Pardot 活用リソース](https://help.salesforce.com/articleView?id=000314780&type=1&mode=1)

[Pardot を動画で学ぶ](https://help.salesforce.com/articleView?id=000312339&type=1&mode=1)

[Pardot Einstein: スコアリングとインサイト](https://help.salesforce.com/articleView?id=sf.pardot_einstein_parent.htm&type=5)

[Pardot トレーニング環境に関する FAQ](https://help.salesforce.com/articleView?id=000320785&type=1&mode=1)

[Editon機能一覧](https://www.salesforce.com/content/dam/web/ja_jp/www/documents/pricing/Pardot-SCE-Detailed-Pricing.pdf)
プログラミングにおいて必要なのは"読解力" 「頭がいい」の正体は読解力

# [プログラミングにおいて必要なのは"読解力"「頭がいい」の正体は読解力](https://www.google.co.jp/books/edition/_%E9%A0%AD%E3%81%8C%E3%81%84%E3%81%84_%E3%81%AE%E6%AD%A3%E4%BD%93%E3%81%AF%E8%AA%AD%E8%A7%A3%E5%8A%9B/Ff6_DwAAQBAJ?hl=ja&gbpv=0)



![image.png](https://firebasestorage.googleapis.com/v0/b/alog-rabee-jp.appspot.com/o/users%2FG6WqUcyUbzbquEAc5zqyzk9u3X02%2Ffiles%2F1621387896.png?alt=media&token=0d1113b4-d0b7-4247-9ead-db653f2ada7a)
###[amazon](https://www.amazon.co.jp/%E3%80%8C%E9%A0%AD%E3%81%8C%E3%81%84%E3%81%84%E3%80%8D%E3%81%AE%E6%AD%A3%E4%BD%93%E3%81%AF%E8%AA%AD%E8%A7%A3%E5%8A%9B-%E5%B9%BB%E5%86%AC%E8%88%8E%E6%96%B0%E6%9B%B8-%E6%A8%8B%E5%8F%A3%E8%A3%95%E4%B8%80-ebook/dp/B081Q2Z92F)

## なぜ読もうと思ったか
  - シンプルに読み書きがあまり得意ではない方だったから（得意ではないというより習慣的にあまりやってこなかった） 
  - エンジニアリングにおいて、読解力は全ての問題の解決速度を大幅に上昇させることがでできると思ったからです。
  - javascriptの教本のような、直接的に言語の勉強ではないが、 プログラミング、エンジニアリングに間接的に関係してくると思ったからです。

## 読んだ感想 
   
###良かった点
  - 論理的に書いてあって納得できる部分が多かった
  - 〇〇を習得するには〇〇が必要というのがわかった
     この本の内容に出てくる例え話で、読解力を鍛えるには、文章を書くこと！と書いてあり、それなはなぜかというと、
     例えば、サッカー観戦を一番理解し、楽しめるのはどういう人間だろうか？それはサッカーを実際にやったことがある人間だ。と書いてあり納得できた。
     つまりは、読解力でいうと、読むだけではなく、書くことで、より深く読解力を身につけることができる。
   **その結果を習得する(結果を出す)にはその過程を経験すること(体、手を動かすこと)**
  - 読解力がいかに大事か改めて、理解した。
  - 例え話も多く、そんなに内容は難しくない
    
###微妙だった点
   - 内容は難しくないが、そこまで「おもしろい！もっと読みたい！」 とはならなかった
   - 何回か同じような内容を言っている部分があるような気がした
   - 全て文字で挿し絵などがないので、読み出しに入りにくい(多分これが普通)
   - ふりがなとかがないKindleで読んでいるときは調べれるので良い

## 評価 55点/100点中 
  - 内容は難しくないが、そこまで「おもしろい！もっと読みたい！」 とはならなかった
   やはり面白いと感じないだけで70点以上はいかない  



## 所感
- Kindleで読む方が自分にあっていると思った
- 漫画で読解力は鍛えられるらしい
- ほんの少しだけ文字びっしりを読む抵抗がなくなった
Azure SQL Databaseで別のDatabaseを参照

# Azure SQL Databaseで別のAzure SQL Databaseを参照する手順
## 1. Master Keyを作成する
```SQL
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password1';
GO
```

作ったマスターキーはファイルに出力してバックアップしておくべきらしいが、以下のSQLでは、'BACKUP MASTER KEY' is not supported in this version of SQL Server.となった・・・

```SQL
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password1';  
BACKUP MASTER KEY TO FILE = 'c:\temp\exportedmasterkey'   
    ENCRYPTION BY PASSWORD = 'password2';  
GO
```

[参考：Microsoft Docs | CREATE MASTER KEY (Transact-SQL)](https://docs.microsoft.com/ja-jp/sql/t-sql/statements/create-master-key-transact-sql?view=sql-server-ver15)

## 2. データベーススコープの資格情報を作成する
```SQL
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password1';  
CREATE DATABASE SCOPED CREDENTIAL [資格情報名] WITH IDENTITY='ログイン名', SECRET='パスワード';
GO
```

作成した資格情報は以下のSQLで確認できる

```SQL
SELECT * FROM sys.database_scoped_credentials;
```

[参考:Microsoft Docs | CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)](https://docs.microsoft.com/ja-jp/sql/t-sql/statements/create-database-scoped-credential-transact-sql?view=sql-server-ver15)

## 3. 外部データソースを作成する
```SQL
CREATE EXTERNAL DATA SOURCE ExternalDatabaseName
WITH
(
    TYPE=RDBMS,
    LOCATION='&lt;ServerName&gt;.database.windows.net',
    DATABASE_NAME='ExternalDatabaseName',
    CREDENTIAL=[資格情報名]
);
```

[参考:Microsoft Docs | CREATE EXTERNAL DATA SOURCE (Transact-SQL)](https://docs.microsoft.com/ja-jp/sql/t-sql/statements/create-external-data-source-transact-sql?view=sql-server-ver15&tabs=dedicated)

## 4.参照したいテーブルから、外部テーブルを作成する
```SQL
CREATE EXTERNAL TABLE [dbo].TableName (
    [id] int NOT NULL,
    [name] nvarchar(64) NULL,
)
WITH (DATA_SOURCE = [ExternalDatabaseName],
      SCHEMA_NAME = 'dbo',
      OBJECT_NAME = 'TableName'
     );
```

これで自分のデータベース内のテーブルと同様に参照できる。
ただ、元テーブルのデータ型次第では参照できないなど、他にも制限事項が多いようだ。

[参考:Microsoft Docs | CREATE EXTERNAL TABLE (Transact-SQL)](https://docs.microsoft.com/ja-jp/sql/t-sql/statements/create-external-table-transact-sql?view=sql-server-ver15&tabs=dedicated)
マインドマップでAWSのデータ分析サービスを勉強【データ分析編】第１回 − Elasticsearch

AWSのデータ分析系のサービスを体系的に勉強シリーズです。

一般的なデータ分析流れに含まれる、データ収集、データ保存、データ処理、データ分析、データ可視化、といったステップにそれぞれが利用するサービスを学び、マインドマップに整理しました。
今回はデータ分析編のElasticsearchです。

※ こちらの記事は、AWSのホワイトペーパー、クラウドサービス活用資料集とUdemyにあるAWS Certified Data Analytics Specialty 2021 - Hands onコースを参照しております。

![AWS Analysis Service - ElasticSearch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544279/e20f3a22-7db0-653e-58ad-d677ebaacc00.png)
Ruby 繰り返し処理とは？

繰り返し処理を行う「while文」「for文」、要素を順に取り出す「eachメソッド」について解説します。

#while文
　一定の条件を満たしている時、指定した処理を繰り返し行うことができる。記入方法は以下の内容です。

```csharp
while 条件を記入 do
  処理内容  # 条件がtrueの間処理を繰り返す
end
```

```csharp
number = 1

while number <=3 do
 number += 1
end
```
**【結果】**
1
2
3

**【詳細】**
1.number = 1と定義する
2.number が3になると終了するような条件式
3.number を画面に出力させる
4.number に１ずつ足していく
5.繰り返しを終了させるend

**【その他】**
条件を設定するときに!=とすることで一致しないときは、など設定も可能。

#for文
　whileと異なり順番に値を表示してくれるものが、for文です。
for ～ in ～ do を記述することで、endまでの処理を繰り返し実行。

```csharp
for 変数 in 範囲、ハッシュ、配列などを指定 do
  処理
end
```
```csharp
for number in 1..5 do
 puts number
end
```
**【結果】**
1
2
3
4
5
**【詳細】**
1..5とすることで1～５までの範囲を示す。


#eachメソッド
 指定したデータから「eachメソッド」で、オブジェクト内の要素を順に取り出す。
｜｜で囲ったものがブロック変数になります。「do～end」までの範囲がブロック。

```csharp
<% @books.each do |book| %>
```
```csharp:members.rb
members = {"taro"=>1, "jiro"=>2, "ace"=>3}
members.each do |name, id|  
puts "#{name}は#{id}番です。"
end
```
**【結果】**
taroは1番です。
jiroは2番です。
aceは3番です。

**【詳細】**
ハッシュタグの内容を順にキーをname、値をidに代入して繰り返す。

***実例***
投稿のタイトルや感想の一覧を掲載するときに使用したものです。

```csharp
<table>
  <thead>
    <tr>
      <th>タイトル</th>
      <th>感想</th>
      <th></th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @books.each do |book| %>
      <tr>
        <td><%= book.title %></td>
        <td><%= book.body %></td>
        <td><%= link_to 'show', book %></td>
        <td><%= link_to 'edit', edit_book_path(book) %></td>
        <td><%= link_to 'destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
```
**【解説】**|book|という変数を立てて@booksに保存されているデータを表示しようというものです。データの中でも欲しいもの、title・bodyなどを表示するためbook.〇〇という形で記述。

**【ワンポイント】**
・edit_book_path(book) という記述がある。これはbookという記事１つずつに対してLinkを設定することができる。'edit'という文字リンクを作成しそれによって遷移できることを示している。

・data: { confirm: 'Are you sure?' } これによって削除の時に一度エラー分を発生させることができるようになる。


#まとめ
　繰り返し処理というものはRubyではよく使われている。ユーザーの情報や投稿記事の一覧などにも用いられるため必ずと言っていいほど使用しているため大切なところだ。
　繰り返しの方法が様々あるためこれを確認して用途に合った繰り返しを行う必要がある。
Mbed Studio

mbedos 本家

https://os.mbed.com/mbed-os/

2020/6 mbedstudioでファイル追加

https://forums.mbed.com/t/how-to-add-header-files-and-source-files/8885

2021/4 ベアメタルからmbedosに変更

https://magnolia-tech.jp/post-3201/

2020/7 mbedcli イマイチ

https://os.mbed.com/users/ytsuboi/notebook/ja-setup-mbed-cli-on-windows/

2018/12 STMピンコンフィグレーション

https://keiorogiken.wordpress.com/2018/12/08/nucleo-f446re/

2016/6 Sytem Workbench for STM32

http://yuqlid.hatenablog.com/entry/2016/06/13/004001

2019/3 色々失敗

https://yagiyu.hatenablog.com/entry/2019/03/07/234549

2020/4 mbedstudio newterminal

https://blog.ukixa.com/2020/04/install-mbed-cli-easy.html

2017/9 mbed cli 準備 いま一歩

https://os.mbed.com/users/MACRUM/notebook/mbed-offline-development/

2017/12 cli インストールパッケージ

https://qiita.com/matsujirushi/items/bf4db4514a753f794643

2020/6 概略

https://qiita.com/jksoft/items/7f92835e47b54580c792

2018/9 git for windows

https://qiita.com/manabu-watanabe/items/ecf1b434baf305adaa00

2014/5 mbedのリセット後の処理

http://nora66.com/mbed/mbed-src.html

mbed serial

https://qiita.com/hiRina/items/c642908a7cc0de95658d
合成音声ライブラリの特徴と、使い方の紹介

## はじめに

この記事は日本語の合成音声に関して、各ライブラリの特徴や使い方とかを書いてます。
2021年5月18日現在時点で、時間かけて調べ尽くしました。もし、ここに書いてないものがあれば、教えていただけますと幸いです。

## 各サービスの特徴

| サービス名 | デモンストレーション | 料金 | アルゴリズム | 動作環境 | 一言コメント |
|:-:|:-:|:-:|:-:|:-:|:-:|
| [Amazon Polly](https://aws.amazon.com/jp/polly/) |-| 100万字あたり\$4USD<br>高品質音声だと100万文字あたり\$16USD | neural network | API |すごく聞きやすかた|
| [google Text-To-Speech](https://cloud.google.com/text-to-speech?hl=ja) |-| 400文字あたり\$4.00USD<br>高品質音声だと100万文字あたり\$16USD  | neural network | API  | 登録が必要 |
| [VOICEROID](https://www.ah-soft.com/voiceroid/) |[公式デモページへのリンク](https://www.ah-soft.com/voiceroid/maki/index.html)| 製品¥7,980〜<br>個人ライセンス¥110,000〜<br>法人ライセンス¥990,000〜<br>おそらくライセンスは買い切り | 肉声 + HMM | Windows7, 8, 10<br>※仮想環境Windowsは対象外です。 | ペッパー君がこれ<br>GUIが使いやすい |
| [AquesTalk](https://www.a-quest.com/products/aquestalk.html)  |[公式デモページへのリンク](https://www.a-quest.com/demo/)| ライセンスは¥6,380/年  | （確か）HMM | Windows<br>Linux<br>Android<br>Mac<br>iOS  | softalkの声<br>知らずに聞いたことありそう<br>HMMの設定値を変えて様々な声を作れる |
| [OpenJTalk](http://open-jtalk.sp.nitech.ac.jp/) |[公式デモページへのリンク](http://open-jtalk.sp.nitech.ac.jp/)| オープンソースライセンス | HMM |  Windows<br>Linux<br>ラズパイに導入実績あり | 無料で使える |

## 使い方

### Amazon Polly
[公式のリファレンス](https://docs.aws.amazon.com/ja_jp/polly/latest/dg/get-started-what-next.html)
SDKが既にあり、これを活用するようです。他にも調べたらたくさん資料が出たので割愛します。

### google Text-To-Speech

[公式のリファレンス](https://cloud.google.com/text-to-speech/docs/libraries?hl=ja#client-libraries-install-python)
SDKが既にあり、これを活用するようです。他にも調べたらたくさん資料が出たので割愛します。


### VOICEROID
筆者がGUIしか触ってないため説明を省略します。
調べた限りですと、環境が整っておらず大変そうです。
[VOICEROID2で自動読み上げ&保存させてみた２](https://qiita.com/tkmktdm/items/24fb6f8d410eab6f9966)

### AquesTalk
[公式のダウンロードページ](https://www.a-quest.com/download.html)の中のAqKanji2KoeとAquesTalk10を使います。
AqKanji2Koeは入力文章を加工し、品詞分解したり、アクセント記号の追加をします。
AquesTalk10は前述のAqKanji2Koeで作成した文章から音声を作成します。

公式のダウンロードページから開発環境に合わせてソフトをダウンロードし、ダウンロードボタンの横にあるマニュアルを読みながらの開発になります。
Linuxで開発していたのですが、公式マニュアルに追加して、以下exportが必要でした。

```shell
# !/bin/sh
$ export CPATH=$CPATH:~/aqtk10_lnx/lib64/:~/aqk2k_lnx/lib64/
```

### OpenJTalk
[デモページのGetting Open JTalk](http://open-jtalk.sourceforge.net/)からのダウンロードになります。
環境構築は調べたら記事がたくさん出て来たため省略します。覚えている限りでは苦戦しなかったです。
環境構築し直す機会があれば追記します。


# まとめ

合成音声のアルゴリズム思想は今も昔も変わらず、現実の音波とPC上の特徴量のマッピングをすることが主のようです。そのマッピングをブラックボックス化するアルゴリズムがHMMかneural networkかで流行が変化した。

最近は高品質で安価なものがAPIになっていました。
非オンライン環境での選択肢はそこまで多くないので、お金との相談だと思います。
terraformでfor_eachを使う

#for_eachを使わない場合
terraformから複数のssmパラメータをデプロイする場合、for_eachを使わない場合は下記のように複数のresourceブロックを書く必要があります。

```terraform:ssm.tf
resource "aws_ssm_parameter" "parameter1" {
  name  = "key1"
  type  = "String"
  value = "value1"
}


resource "aws_ssm_parameter" "parameter2" {
  name  = "key2"
  type  = "String"
  value = "value2"
}

resource "aws_ssm_parameter" "parameter3" {
  name  = "key3"
  type  = "String"
  value = "value3"
}
```

この方法だとパラメータの数が多くなると見通しが悪くなってしまいます。

#for_eachを使って見通しを良くしよう
ここで、このようにfor_eachとローカルブロックを使用することで見通しをよくすることができます。

```ssm.tf

resource "aws_ssm_parameter" "parameter_for_ecs" {
  for_each=local.parameters
  name  = each.key
  type  = "String"
  value = each.value
}

locals {
  parameters={
    "key1":"value1",
    "key2":"value2",
    "key3":"value3"
  }
}
```
関数について

#目次
<b>①関数について</b>
<b>②関数の利便性</b>
<b>③関数の種類</b>


###①関数について
関数とはあるデータを受け取り、定められた独自の処理を実行し、その結果を返す命令のことです。


###②関数の利便性

```php:
let name  = "Ito"
let name2 = "Sato

console.log("hello"+ name);
console.log("hello"+name2);

```
関数を使わない場合、何度も変数を定義しなければいけない。

```php:

funciton hello(name){
 console.log("hello"+name);
}

hello("Ito");
hello("Sato");
```
上記のように関数を一度使ってしまえば、使い回しが可能になる。
同じ作業が発生する場合、関数を使用すると便利。

###②関数の種類
・無名関数

```php:
const hello = function(name){
 console.log("hello"+name)
 return name;
}
```
上記のように名前を持たない関数のことを無名関数という。この関数はコールバック関数で多く利用する。

・アロー関数

```php:普通の関数
function hello(name){
 console.log("hello"+name);
}
```
```php:無名関数
const hello = function(name){
 console.log("hello"+name);
}
```

```php:アロー関数
const hello = (name)=>{
 console.log("hello"+name);
}

または

const hello = (name)=>console.log("hello"+name);
```
のように記述ができる。
無名関数からfunctionを取り除き、引数の()の隣に=>をつけるとアロー関数になる。

・コールバック関数
引数に渡す関数のことをコールバック関数という。

```php:
function hello(callback){
 console.log("hello"+callback());
}

function getName(){
 return "Ito";
}

hello(getName);
```

上記の動きを説明すると、
関数のgetNameがhelloの引数に渡り、一番上のcallbackがgetNameになり、console.log("hello"+getName())となる。()がついているのは、getNameを呼び出すため。

コールバック関数に引数を持すこともできる。
以下のように記述をする。

```php:
function hello(callback,say){
 console.log("hello"+callback(say));
}

function getName(say){
 return "Ito"+say;
}



//無名関数の場合で書いた場合  
const getName = function(){
 retrun "Ito"
}  


hello(getName,"よろしく")  

//無名関数をコールバック関数に渡す方法
hello(function(say){
 return "Ito"+say
},"よろしく！")

//アロー関数をコールバック関数に渡す方法
hello(say=>"Ito"+say,"よろしく！")
```
アルゴリズムについて

#【アルゴリズムについて】

基本情報技術者試験をきっかけに基本的なアルゴリズムを学習しました。

##代表的なアルゴリズム

###バブルソート（基本交換法）

隣同士のデータを順に比較して、大小関係が逆ならば交換をおこなう。

計算量：O(n**2) 

###挿入ソート（基本挿入法）

整列済みのデータ列にデータを挿入していくことを繰り返す。

計算量：O(n**2) 

###選択ソート（基本選択法）

最大値（または最小値）のデータを探して、最後のデータ（または先頭のデータ）と交換を繰り返す。

計算量：O(n**2) 

###2分探索法

1、データ領域を2つに分けることで範囲を絞り込み、目的のデータを探し出す。
2、データが昇順か降順に整列されている必要がある。

計算量：O(log n)

###ハッシュ探索法

1、ハッシュ関数で格納位置を求めて、ほぼ1回で目的のデータを探索する。
2、データの格納効率が悪いと、領域を大きく取らないと頻繁に衝突が起こる。
3、異なるデータが同じ位置になる衝突が発生し、格納できないことがある。

　※ ホームレコード：既に記憶されているレコード
　※ シノニムレコード：衝突のために格納できないレコード

計算量：O(1)

###線型探索法

1、配列内のデータを順々に探索キーと比較して、目的のデータを探し出す。
2、データを整列しておく必要はない。
3、データが整列済みならば、データが存在しない時に打ち切り可能。
4、最後の要素に番兵を置くことで、配列の添字チェックが不要。

計算量：O(n)

###マージソート

データ列を小さく分割していき、整列して合併することで整列させる。

計算量：O(n log n) 

###クイックソート

基準値を決めて、基準値よりも小さいものと大きいものに振り分けて、基準値で分割されたデータ列に対しても同様に分割を繰り返して整列する。

計算量：O(n log n)　最悪 O(n**2)
Rubyの変数紹介（インスタンス変数・ブロック変数 etc.)

#Rubyの変数紹介

Rubyには変数の中でも、ブロック変数やインスタンス変数、クラス変数、クラスインスタンス変数といった様々な種類の変数があります。

#ブロック変数
｜｜で囲ったものになります。「do～end」までの範囲がブロック。

```csharp:見本
<% @books.each do |book| %>
```
**ブロック変数の活用方法は代表的には3種類あります**
・繰り返し処理
・処理を隠す
・処理の一部の差し替え（順番の変更など）


**（例）繰り返し処理**
指定したデータから「eachメソッド」で、オブジェクト内の要素を順に取り出す。ハッシュの内容を順にキーをname、値をidに代入して繰り返す。

```csharp:members.rb
members = {"taro"=>1, "jiro"=>2, "ace"=>3}
members.each do |name, id|  #ハッシュの内容を順にキーをname、値をidに代入して繰り返す
puts "#{name}は#{id}番です。"
end
```

上記以外の見本等に関しては、
Skillhub [スキルハブ]参照：https://skillhub.jp/courses/163/lessons/875

#インスタンス変数
**インスタンス変数の変数名は「@」で始まります。**
オブジェクトの中で値を保存しておくための利用されるのがインスタンス変数です。

```csharp
class car
  def name=(name)   #セッター（値を設定）
     @name = name
  end
  def name          #ゲッター（値を読み取る）
    @name
  end
end
car = car.new       #carのクラスをオブジェクト化
car.name = "civic"  #このクラスの名前を設定する（セッターを呼び出す）
```

上記を省略して書くことができる

```csharp
class car
  attr_writer :name
  attr_reader :name 
car = car.new
car.name = "civic"
```
更に省略可できる

```csharp
class car
  attr_accessor :name
car = car.new
car.name = "civic"
```

#クラス変数
変数名の前に「@@」をつけて定義する。
そのクラスの全てのインスタンスで共有される変数

```csharp
class User
  def login(user_name)
    @@name = user_name
  end

  def display_current_user
    p @@name
  end
end

user1 = User.new
user2 = User.new
user1.login("山田")

user1.display_current_user
user2.display_current_user
```

【結果】山田
　　　　山田

#クラスインスタンス変数
変数名の先頭に @ をつける（インスタンス変数と同じだが、定義する場所が違う）。
クラス定義式内で定義する。
クラスメソッドから参照できる。インスタンスメソッドからは参照できない。

```csharp
class User
  @name = "鈴木"

  def self.display_current_user
    p @name
  end
end

User.display_current_user
```
【結果】　鈴木

#グローバル変数
　変数名の先頭に$ をつける。**メソッドやクラスの垣根なく、どこからでも参照できることが確認できる。**全体のプログラムに影響を与える可能性があるため、変数名が重複しないかチェックしたり、変数の値を変更して思わぬ場所でバグを生んだりしないように注意が必要。

```csharp
class User
  $name = "佐藤"

  def display_current_user
    p $name
  end

  def self.display_current_user
    p $name
  end
end

p $name

user = User.new
user.display_current_user

User.display_current_user
```

参照：© 2021 プロメモ All rights reserved.
https://26gram.com/ruby-variables

#まとめ
　Rubyには様々な変数という買い物かごのような、数値や名前などをいれておくことができる。また取り出すこともできるカゴのような存在と考えています。
【初心者でもわかる】たった1行でカラーピッカーを実装

#どうも7noteです。1行で作るカラーピッカー（※IE非対応）

HTMLではカラーピッカーをたった1行で作成できてしまいます！

```index.html
<input type="color" value="#ffffff">
```

![スクリーンショット 2021-05-18 19.07.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661092/9c43c757-4ef2-a8ca-3642-070d671e1a57.png)

ちょっとわかりにくいかもですが、左上の小さいボタンらしき四角をクリックすると、カラーピッカーを表示することができます。

## 応用編：カラーピッカーの値を取得して、WEBサイトの背景色を変更する

```index.html
<input type="color" value="#ff0000" id="colorpicker">
```

```script.js
// カラーピッカーを変数に格納
var picker = document.getElementById("colorpicker");

// 値が変更された時、背景色を変更する
picker.addEventListener('change', (event) => {
	var inputValue = picker.value;
	document.body.style.backgroundColor = inputValue ;
});
```

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661092/72e67e55-0f90-9bf8-95ba-83b357b9d7dc.gif)


## まとめ

なかなか使う機会は少ないかもしれないですが、覚えて置くとどこかで使えるかもしれません。
単純に作成していて面白かったので、これを使ってなにかおもしろいものを作ってみたいですね。

#### おそまつ！
~ Qiitaで毎日投稿中!! ~
[【初心者向け】WEB制作のちょいテク詰め合わせ](https://qiita.com/7note)
Azure仮想マシン料金を計算してみた

#はじめに

Azure をはじめとするクラウドはサービスを利用した分だけ料金を支払う、従量課金制です。

「クラウドを利用したけど、思ったより料金がかかってしまった」
ということはないでしょうか？

そこで今回は、Azure仮想マシンの料金を「料金計算ツール」を利用して大まかに計算してみたので、ご紹介します。


#Azure料金計算ツールとは？
Microsoft社がインターネット上で提供している
Azureの様々なサービス利用料金をまとめて見積もりができるサイトです。

[Azure料金計算ツール](https://azure.microsoft.com/ja-jp/pricing/calculator/)

#計算方法

仮想マシン1台を作成する場合の料金見積もりをしてみたいと思います。

構築する仮想マシンの要件
　・OSにはLinuxのUbuntuを利用
　・テストで利用の為、とにかく低価格のインスタンスタイプを利用
　・使用ディスクはHDDで30GBあればよい
　・仮想マシンは単体で稼働を想定
　・仮想マシンの稼働は平日9:00～17:00 土日は停止(※平日日数は20日間と想定)

上記の要件で、仮想マシンの料金を計算してみます。

①Azure料金計算ツールにアクセスする。
(https://azure.microsoft.com/ja-jp/pricing/calculator/)

②「製品」タブの「コンピューティング」から「仮想マシン」を選択。

![料金計算ツール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1514023/8a670e2c-c8ca-91c3-25c6-bfa564828fe5.png)




③ページ下部「見積もり」に「仮想マシン」が追加されているので情報を入力していきます。

仮想マシンの要件に従って、下記項目を入力していきます。
　・リージョン:「東日本」
　・OS:「Linux」の「Ubuntu」
　・レベル:「Standard」
　・インスタンス:「A1 v2(1vCPU 2GBのRAM)」
　・仮想マシン台数:「1台」
　・起動時間:「8時間×20日=160時間」

入力した画面が以下になります。

![仮想マシン情報.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1514023/9d404e3f-38b4-4809-fe63-5cdedf2dec95.png)



④Managed Disks、ストレージトランザクション、帯域幅の情報も入力します。

仮想マシンの要件に従って、下記項目を入力していきます。
　・Managed Disks:「HDD 32GiB」
　・ストレージトランザクション:仮想マシンの利用状況により変動あり、おおよその値を入力
　・帯域幅:仮想マシンの利用状況により変動あり、おおよその値を入力

入力した画面が以下になります。

![Managed Disks2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1514023/33f104c0-3cea-71f4-1316-e06a6d5cec1b.png)



⑤最終価格の確認

![最終価格.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1514023/ea65e6fb-5f8a-fa75-9dfb-9fdee09dd067.png)
ウェブサイトの更新確認を Power Automate で雑に作ってみる

[ブログからの転載](https://1bed.allright.life/?p=3567)

## 経緯

実用性はほぼない、思いつきのネタです

## 説明

SharePoint 上にリスト名「ウェブサイトリスト」として、下記の設計で作成

| 列 | 種類 | 備考 |
| --- | --- | --- |
| Title | 1 行テキスト | 初期作成時のまま |
| 更新日時 | 日付と時刻 | 初期作成時のまま |
| 登録日時 | 日付と時刻 | 初期作成時のまま |
| URL | 1 行テキスト | 追加列 |
| Data | 複数行テキスト | 追加列、書式なしテキスト |
| 登録者 | ユーザーまたはグループ | 初期作成時のまま |
| 更新者 | ユーザーまたはグループ | 初期作成時のまま |

### はじめに、フローの前半部分の説明

[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h19_56-437x710.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h19_56.png)

* 繰り返しはチェックしたい間隔に設定
* 変数 ID は SharePoint のアイテム ID を保持するので整数として初期化
* 変数 Title, URL, Data, NowData は文字列として初期化

### 続いてリストからアイテムを取得

[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h23_33-1-530x383.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h23_33-1.png)

### 取得したリストアイテムをあるだけ繰り返す

全体はこのような感じ
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h26_48-474x710.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h26_48.png)

最初の変数の設定は、SharePoint から取得したアイテムの値をセット
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h30_18-571x710.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h30_18.png)

変数 URL をソース URL として、OneDrive for Business にファイルを保存
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h36_39.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h36_39.png)

OneDrive for Business に保存したファイルを取得し、変数 NowData にセット
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h37_52.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h37_52.png)

HTML からテキスト部分だけ取得
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h40_33.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h40_33.png)

改行コード(LF)を省いて、変数 NowData に再セット
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h42_00.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h42_00.png)

値の式は下記の通り


```shell
uriComponentToString(replace(uriComponent(outputs('Html_to_text')?['body']),'%0A',''))
```



SharePoint から取得した変数 Data と、現在取得した NowData を比較して、値が変わっていたら SharePoint のアイテムを更新して、更新通知を送る
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h46_10-1-710x438.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h46_10-1.png)

今回は色々面倒だったので、メールで通知した
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h50_24.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-19_02h50_24.png)

## 考察

このやり方だと、サーバーサイドで毎回違う情報が吐き出されていたら使えないね


## 参考サイト

* [[TIPS] Power AutomateでHTTPを使わずにHTMLを取得する](https://qiita.com/h-nagao/items/65f498d9d4e4f1a5fa50)
Kaggle Shopeeコンの振り返り

#はじめに
GW中から一週間ちょっとの期間の参加でしたがなんとか銀メダル取れたので
1週間何をやっていたかという話をしていきます。
最終順位はPublic 73位, Private 65位でした。
ざっくりshopeeコンの概要は
商品の画像とタイトルが与えられるのでそれらをクラスタリングした精度で競う
というものです。

#方針
tensorflow使いとして
TPUをkaggle,colabで両方フルにぶん回して学習させました。
TPUだとGPUよりも4~5倍は速いですね。
学習待ち時間には公開ノートブックやwebで情報集めました。

#1~2日目
画像のクラスタリングをどのように学習させればよいか知らなかったので
公開ノートブックを読み漁り、Arcfaceという手法を見つけた。
モデルはほとんど公開ノートブックそのままで
model :EfficinetNetB5+arcface
loss  : SparseCrossEntropy
optimizer :RAdam
テキストはBertを用いた。テキストの手法は以後特に変更なし。
LB0.72

#3日目
arcfaceを搭載したモデルの学習がうまくいっておらず、その解決策を模索していた。
arcfaceなしのモデルだと60後半の精度が出ていたが、arcfaceありだと
trainingのvalidataion精度が50%切ってしまっていた。
結論としてはハイパーパラメータの設定がまずかったみたいで、
自分でパラメータチューニングは諦めてadacosを採用し、
trainingのvalidataion精度が72%ほどまで上昇した。
しかしながらLB自体の上昇はなかった。
model :EfficinetNetB5+adacos
loss  : SparseCategoricalCrossEntropy
optimizer :RAdam
#4日目
モデルをensembleした。efficientNet以外だとNFnetなども候補にあったが、
エラー吐いて動いてくれなかったのでEffcientB5,B4,B3で暫定的にensembleすることにした。
また実際にsubmissionを作る過程は
画像をベクトル化してK(=50)近傍法でthreshold以下の距離のものが同カテゴリーといったものなのだったのだが、ensembleしやくするためにも画像の距離で重み付けをしようと考えた。
具体的には
ベクトルa,b,に対して
diff=threshold-|a-b|
r=threshold
として
x=diff*log(3)*4/r
y=e^x/(1+e^x) (x>-r/4) 
  0           (x<=r/4)
で得られるyを類似スコアとした。
ensembleしたモデル毎に類似スコアを計算しそれらの平均が
score_threshold(ハイパーパラメータ）を超えたら同一カテゴリーとした。
これは完全に独自で考えました。
この手法だと素朴な距離判定に比べて0.002~3ポイントのLB改善が見られた。
しかしながら初日の公開ノートブックのLBは超えられなかった。
model :EfficinetNetB5(B4,B3 ensemble)+adacos 
loss  : SparseCategoricalCrossEntropy
optimizer :RAdam
+ ベクトル距離重み付け
#5~6日目
公開ノートブックでは自身の似た構成でLB0.73前後を叩き出していたので、
ひたすらthreshold(画像クラスタリングのパラメータ)をいじっていた。
同時にoptimizerにSAMを導入したことでtrainingのvalidataion精度は73.5％まで上昇した。
しかしながらLB精度は一向に改善しなかった。
model :EfficinetNetB5(B4,B3 ensemble)+adacos
loss  : SparseCategoricalCrossEntropy
optimizer :SAM(baseはRAdam)
+ ベクトル距離重み付け
#7日目
もはや諦めの境地だったが、
とりあえずパラメータいじるのは諦めて、過去の類似コンペの上位手法を眺めることにした。そこで見つけたのがquery expansionという手法。
実装が本当にあっているのかはわからないが、画像をベクトル化してK(=50)近傍法でthreshold以下の距離のものが同カテゴリーとしていた状態から
画像をベクトル化してから各画像ベクトルに対してk(=2)近傍法で最も近い2つのベクトルと平均をとってそれを画像ベクトルとした。そして
それらの画像ベクトルに対してK(=50)近傍法でthreshold以下の距離のものが同カテゴリーとした。
これによって劇的にLBが改善し0.025向上した。
model :EfficinetNetB5(B4,B3 ensemble)+adacos
loss  : SparseCategoricalCrossEntropy
optimizer :SAM(baseはRAdam)
+ ベクトル距離重み付け
+ query expansion
LB 0.745(private 0.736)
#さいごに

コンペのスコアに関しては一週間前から参加したので仕方ないが、もっと時間があれば伸びしろはいろいろあった気がしたので惜しい(ensembleのモデル変更やテキストのモデルもensembleするなど）。

上位勢の解法で特に印象に残ったのはクラスタリングにLightGBMを用いていた手法とViTを使った手法だった。VitとCNN系のensembleは自分も考えたのだが、モデルが重いので時間が間に合うのかという点と公開ノートブックに一件も情報がなかったので後回しにしていた。

今回棚ぼた的にgetできた銀メダルだったがすごい嬉しかった。これでexpertになれたので次はmaster目指してコンペに取り組んでいこうと思う。
アプリケーションライフサイクルと開発モデル ⇒ パッケージ開発を使用した柔軟性の高いリリース

１．パッケージ開発モデルを使用する場合、手動で追跡する必要のあるメタデータの変更はどれですか?
２．スクラッチ組織の主なメリットは何ですか?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634241/66841a51-2c18-698e-fa78-f2efd080ae5d.png)
Visual Studioでincludeでエラーが出るときの解決方法

Visual Studioで新たにEigenを使うことになり、少し手間取ったので、その解決方法を書き残します。

# エラーが出る原因
includeでエラーが出る原因は、パスが通っていないからです。
参照したいファイルの位置を改めて確認しましょう。


# インクルードの方法
## 1.フルパスを書く
1つ目の方法は、フルパスを書く方法です。他の人のプログラムを見ても、フルパスで書かれていることはほとんどないですが、フルパスを書いてもインクルードできるんです。以下に例を示します。

```
#include <C:/eigen-3.3.9/Eigen/Dense>
#include <C:/eigen-3.3.9/unsupported/Eigen/MatrixFunctions>
```
Cドライブからのフルパスを書いています。これでもインクルードできます。


## 2.相対パスを書く
1で示した例を相対パスで書くことで、より短く書くことが出来ます。

相対パスで書くためには、インクルードディレクトリの設定が必要になります。

設定は以下の手順で行います。
プロジェクト→プロパティ
![2021-05-19 (2)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1133255/008096f0-6349-b6fc-76b0-8637f20353a4.jpeg)

構成プロパティ→VC++ディレクトリ→インクルードディレクトリ
インクルードディレクトリの右側の下三角を押し、編集を押してください。
![2021-05-19 (5)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1133255/7e1d40c8-e078-c474-96eb-5f66b75e15d4.jpeg)

そこにパスを書きます。今回はC:/eigen-3.3.9を書きました。
![2021-05-19 (6)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1133255/c9dd3f84-fea9-f8d7-251a-f9017544c263.jpeg)


このようにインクルードディレクトリの設定を行うと、以下のようにインクルードを短く書くことが出来ます。

```
#include <Eigen/Dense>
#include <unsupported/Eigen/MatrixFunctions>
```

インクルードディレクトリで設定した、C:/eigen-3.3.9を省略して書くことが出来ました。
SQLServerでよく利用するSQL文

### 日本時間を表示する
```hoge.sql

#日本標準時は、UTC に 9時間を加算したものなので、次のように DATEADD 関数を利用して取得することができます。
DATEADD(hour, 9, SYSUTCDATETIME())

```
### 現在の時刻から年月
```hoge.sql
#202209
CONVERT (VARCHAR(6), GETDATE(), 112)

#2022/09/09
FORMAT(GETDATE(), 'yyyy/MM/dd')
FORMAT(dbo.PC_START_END.DATE, 'yyyy/MM/dd')

#12:15:11
FORMAT(dbo.PC_START_END.DATE, 'HH:mm:ss')

#当月の月初-月末のWHERE構文
BETWEEN FORMAT(GETDATE(), 'yyyy/MM/01') AND FORMAT(GETDATE(), 'yyyy/MM/31')
```


### 四捨五入して整数化する
```hoge.sql

#小数点第一を四捨五入して整数化
CEILING(ROUND(ZEIRITSU, 1))

```

### 頭にゼロを付ける

```hoge.sql

FORMAT(ISNULL(GZSEQ, 0), '0000')

```

### 条件文

```hoge.sql

--定番のパターン
CASE WHEN K_DATE < '2018-12-31' THEN ISNULL(SKU , 0) ELSE 0 END

CASE WHEN KBN = 1 OR SID_GZKBN = 3 THEN 'A区分' ELSE '""' END


--単純CASE式
CASE gender
    WHEN '男' THEN 1
    WHEN '女' THEN 2
    ELSE 99
END

--検索CASE式
CASE
    WHEN gender = '男' THEN 1
    WHEN gender = '女' THEN 2
    ELSE 99
END


--IN句を使った条件式
CASE
    WHEN prefecture IN ('北海道') THEN '北海道'
    WHEN prefecture IN ('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県') THEN '東北'
    WHEN prefecture IN ('沖縄県') THEN '沖縄'
    ELSE NULL
END

```

参考：https://qiita.com/sfp_waterwalker/items/acc7f95f6ab5aa5412f3


### 数値から文字列に変換
```hoge.sql

CONVERT (varchar, ISNULL(suti, 0))

CAST(Suchi AS varchar) 

```

### 文字を抽出

```hoge.sql
/*第一引数(文字列) 第二引数(開始地点) 第三引数(文字数) */
/* 345 */

SUBSTRING('12345678', 3, 3);
```
### 文字列の結合

```hoge.sql

Name1+Name2

```
### DateTimeを変換する

```hoge.sql
--年月にする       202007
FORMAT(SDATE,'yyyyMM')

--年月日にする     20200707
FORMAT(SDATE,'yyyyMMdd') 

--年/月/日にする 2020/07/07
FORMAT(SDATE,'yyyy/MM/dd')

--年/月/日にする 2020年07月07日
FORMAT(SDATE,'yyyy年MM月dd日')
```

### 今日からnヶ月前
```hoge.sql

DATEADD(month, -2, GETDATE())
DATEADD(year, -2, GETDATE())
DATEADD(day, -2, GETDATE())
```


### DELETE と JOIN を使ってデータを削除するSQL文
JOINを使って結合して条件指定したレコードを削除したい場合は以下のコード

「テーブル名 AS　代替テーブル名」を使うようだ。

```hoge.sql
DELETE HJNH FROM TP_HJN_H AS HJNH 
LEFT OUTER JOIN  V_HDB_DRN_1year AS VHDB O
N HJNH.HJN_H_NDEN_DRN = VHDB.HDB_NDEN_DRN 
WHERE(VHDB.HDB_N_S_DATE < DATEADD(month, -2, GETDATE()))
```

#### サブクエリ
Fromに引用するSQL文を入れることでビューのように利用できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/fc5a5abe-8045-f09c-daaf-877e860763d0.png)

#### 逆クロス集計
```UNPIVOT.sql
SELECT
 PAC_SKEY_JYA, PAC_SKEY_SCD, PAC_SKEY_KIK, LEFT(PAC_NO, 9) AS PACCL, PAC_SU
FROM
 M_PAC_01 AS p 
UNPIVOT (PAC_SU FOR PAC_NO IN (PAC_NAI00_KOS, PAC_NAI01_KOS, 
 PAC_NAI02_KOS, PAC_NAI03_KOS, PAC_NAI04_KOS,
 PAC_NAI05_KOS, PAC_NAI06_KOS, PAC_NAI07_KOS, PAC_NAI08_KOS, 
 PAC_NAI09_KOS)) AS unpvt
WHERE                       
 PAC_SU > 0;
```
Rubyの概要

#Rubyとは？
webアプリケーションを作成するための、プログラミング言語のこと。

#webアプリケーションとは？
「Webアプリケーション」は、楽天市場やクックパッドのように、「アクセスしてきた人が能動的（自分で検索して調べる）に操作して閲覧」することを言います。
　閲覧してもらうだけでなく、情報も入力してもらいます。その入力された内容によって、表示される内容や動作が変わっていきます。⇒Ruby

※一方、「Webサイト」は、ネット上に公開されたコンテンツを「アクセスした人が受動的に閲覧」することを言います。ブログなど。⇒HTMLやCSS

#Ruby on Railsとは
Rubyを使ったWebアプリケーションの共通して用いることが枠組みのことです。その名の通りレールになって、便利にサイトを運営していくことができます。

#実際にRubyでファイルを作っていく
①ターミナルで以下コマンドを実行します。

```
$ mkdir ruby
```
②正しく作成できたかどうか確認するために以下コマンドを実行。
⇒README.md rubyの表示があれば成功

```
$ ls
```
③ファイルを作成する方法（ターミナルに入力する）

```
$ touch 〇〇〇〇.rb
```

#ファイルを実行する方法
実際に作ったファイルを動かしてみる場合

```
$ ruby 実行するプログラムファイル名
$ ruby　〇〇〇〇.rb
```

#まとめ
以上が大まかなRubyというものの仕組みです。相手からの情報を受けてどういった情報を返すのかを設定していく。それがRubyの役割です。
ラビットチャレンジ　応用数学

ラビットチャレンジ　応用数学のレポートです。
#線形代数
##連立一次方程式
連立方程式を表列を用いて表すことができる。
例：
$$
\begin{cases}
x_1 + 2x_2 = 3\\\
2x_1 + 5x_2 +5
\end{cases}
\tag{1}
$$
（1）を$ax = b$みたいに$A \boldsymbol{x} + \boldsymbol{b}$と表すと
$$
\begin{pmatrix}
1 & 2 \\\
2 & 5
\end{pmatrix}
\begin{pmatrix}
x_1 \\\
x_2
\end{pmatrix}=
\begin{pmatrix}
3 \\\
5
\end{pmatrix}
\tag{2}
$$
(2)のように書ける。
###連立一次方程式の解き方
・i行目をc倍する
・s行目にt行目のc倍を加える
・p行目とq行目を入れ替える
といった行基本変形を行なっていく。
$$
\begin{pmatrix}
1 & 0 \\\
0 & 1
\end{pmatrix}
\begin{pmatrix}
x_1 \\\
x_2
\end{pmatrix}=
\begin{pmatrix}
-1 \\\
2
\end{pmatrix}
\tag{3}
$$
##固有値と固有ベクトル
ある行列$A$に対して、以下のような式が成り立つような、特殊なベクトル$\boldsymbol{x}$と、右辺の係数$\lambda$がある。
$$A\boldsymbol{x} = \lambda \boldsymbol{x} \tag{4}$$
この特殊なベクトル$\boldsymbol{x}$とその係数$\lambda$を、行列$A$に対する、固有ベクトル、固有値という。
#固有値分解
ある実数を正方形にならべて作られた行列$A$が固有値$\lambda_1 ,\lambda_2, \dots$と固有ベクトル$\boldsymbol{v}_1,\boldsymbol{v}_2,\dots$を持ったとする。
この固有値を対角線上に並べた行列（それ以外の成分は0）
$$
\Lambda = \begin{pmatrix}
\lambda_1 & & \\\
 & \lambda_2 & \\\
 & & \ddots
\end{pmatrix}
$$
とそれに対応する固有ベクトルを並べた行列
$$V = (\boldsymbol{v}_1 \quad \boldsymbol{v}_2 \quad \dots)$$
を用意したとき、それらは
$$AV = V\Lambda \tag{5}$$
と関係付けられる。
したがって
$$A = V\Lambda V^{-1} \tag{6}$$
と変形できる。
このように正方形の行列を（6）のような3つの行列の積に返還することを固有値分解という。
##特異値分解
正方行列以外は固有値分解できないのか？
Ans.  似たことはできる。
$$
M\boldsymbol{v} = \sigma \boldsymbol{u}
\\\
M^T\boldsymbol{u} = \sigma \boldsymbol{v}
$$
このような特殊な単位ベクトルがあるならば特異値分解できる。
$$M = USV^{-1}$$
のような3つの行列の積に返還することを固有値分解という。
##特異値分解
正方行列以外は固有値分解できないのか？
Ans.  似たことはできる。
$$
M\boldsymbol{v} = \sigma \boldsymbol{u}
\\\
M^T\boldsymbol{u} = \sigma \boldsymbol{v}
$$
このような特殊な単位ベクトルがあるならば特異値分解できる。
$$M = USV^{-1}$$
###特異値の求め方
$MV = US$ $\quad M^TU = VS^T $
$M = USV^{-1} \quad M^T = VS^T U^{-1}$
これらの積は
$MM^T = USV^{-1}VS^TU^{-1} = USS^TU^{-1}$
つまり$MM^T$を固有値分解すれば、その左特異ベクトルと特異値の2乗が求められる。
#確率・統計
##条件付き確率
ある事象X=xが与えられた下で、Y=yとなる確率
例：雨が降っっている条件下で交通事故に遭う確率
$$
P(Y=y|X=x) = \frac{P(Y=y,X=x)}{P(X=x)}
$$
X:雨が降っている
Y:交通事故に遭う
##ベイズ則
一般的に事象Aと事象Bに対して
$P(A)P(B|A) = P(B)P(A|B)$
##分散と共分散
####分散
・データの散らばり具合
・データの各々の値が、期待値からどれだけずれているかを平均したもの
分散$Var(f) \\\
=E \bigl((f_{(X=x)} - E_{(f)})^2 \bigr)
\\\
=E({f^2}_{(X=x)})-(E{(f)})^2
$
####共分散
・2つのデータの系列の傾向の違い
・正の値を取れば似た傾向
・負の値を取れば逆の傾向
・ゼロを取れば関係性に乏しい
共分散 $Cov(f,g)
\\\
=E \bigl( (f_{(X=x)} - E (f) \bigr ) \bigl( (g_{(Y=y)} - E (g) \bigr )
\\\
=E(fg) - E(f)E(g)$
##さまざまな確率分布
####ベルヌーイ分布
・コイントスのイメージ
$P(x| \mu) = \mu ^x (1-\mu) ^{1-x}$
#情報理論
##自己情報量
・対数の底が2のとき、単位はbit
・対数の底がネイピア$e$のとき、単位はnat
$I(x) = -\log(P(x)) = \log(W(x))$
##シャノンエントロピー
・自己情報量の期待値
$$
H(x) = E(I(x)) \\\
= -E(\log(P(x)))\\\
= -\Sigma (P(x) \log(P(x)))
$$
単体テストコードのエラーの見方

#はじめに#
テストコードのコマンドを入力すると赤文字でめっちゃ出てきた！
https://gyazo.com/7ad592a7615a81daf0aef6e599062de3

#見方#
まず見方については

```
 expected #<User id: nil, email: "quinn.olson@hotmail.com", nickname: "FA", 
first_name: "佐藤", last_name: "太郎", first_name_kana: "テスト", last_name_kana: "テスト"
, birthday: "2020-05-21", created_at: nil, updated_at: nil> to be valid

```
ここはエラーではなく最後に　to be valid　となっているのでここまではテストに成功しているという意味です。
ここからがエラーです。

```
but got errors: Password には英字と数字の両方を含めて設定してください
```
なので　FactoryBot　の　password　を

```
password {Faker::Internet.password(min_length: 6)}
password_confirmation {password}
```
から

```
password              {'abc123'}
password_confirmation {'abc123'}
```
に変更するだけでエラーが解消されました！
Go　CrossPlatformで各OS依存がある場合のファイル構成

goにてクロスプラットフォームで動作するアプリを作成するのに試したことを備忘録として残す。
各環境（MacとWindows）でメッセージボックスを表示することを（今更）試した。

環境
・Go（1.16.3）
・Mojave10.14.6（開発環境）
・Windows10

## ソースコード
ディレクトリ構成

```
.
├── util
│   ├── messagebox_darwin.go
│   └── messagebox_windows.go
└── main.go
```

ソースは下記のようになる。

```go:main.go
package main

import (
	util "crossMsg/util"
)

func main() {
	util.MessageBox("title", "test")
}
```

```go:messagebox_darwin.go
package util

import (
	"fmt"
	"os/exec"
	"strings"
	"syscall"
)

func MessageBox(title, text string) bool {
	script := `set T to button returned of ` +
		`(display dialog "%s" with title "%s" buttons {"No", "Yes"} default button "Yes")`
	out, err := exec.Command("osascript", "-e", fmt.Sprintf(script, text, title)).Output()
	if err != nil {
		if exitError, ok := err.(*exec.ExitError); ok {
			return exitError.Sys().(syscall.WaitStatus).ExitStatus() == 0
		}
	}
	return strings.TrimSpace(string(out)) == "Yes"
}
```

```go:messagebox_windows.go
package util

import (
	"syscall"
	"unsafe"
)

func MessageBox(title, text string) bool {
	user32 := syscall.NewLazyDLL("user32.dll")
	messageBoxW := user32.NewProc("MessageBoxW")
	mbYesNo := 0x00000004
	mbIconQuestion := 0x00000020
	idYes := 6
	ret, _, _ := messageBoxW.Call(0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))),
		uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))), uintptr(uint(mbYesNo|mbIconQuestion)))
	return int(ret) == idYes
}
```

## ビルド
macはそのまま

```
go build .
```

windowsも特に変えることなく、

```
GOOS=windows GOARCH=386 go build -ldflags "-H windowsgui" .
```

## 考察
OSおよびアーキテクチャ固有のサフィックスを持つファイルは、build時にその制約に従うみたい。
参考：https://golang.org/pkg/go/build/
Uncaught Error: Call to undefined method PhpCsFixer\Config::create()

## PhpCsFixer で以下のようなエラーが出るようになった
```
PHP Fatal error:  Uncaught Error: Call to undefined method PhpCsFixer\Config::create()
```

`php-cs-fixer` の `v3.0.0` が `2021-05-03 21:51 UTC` にリリースされました。
その際、破壊的な変更として、
> method create of class Config has been removed, use the constructor

が行われた様子。詳しくは、以下参照のこと。
https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/3.0/UPGRADE-v3.md

結果として、前述のエラーが出るようになりました。
> PHP Fatal error:  Uncaught Error: Call to undefined method PhpCsFixer\Config::create()

## とりあえずの対策
`v3.0.0` では他にも大きな変更が入っていそうなので、いったん、`v2` にダウングレードします。

```bash
// global
$ composer global require friendsofphp/php-cs-fixer:v2.x --prefer-dist

// local
$ composer require --dev friendsofphp/php-cs-fixer:v2.x --prefer-dist
```

## アップグレードするには
以下のように、`create`関数を`new`に置き換えれば大丈夫そうではあります。
（未確認）

```php
// return PhpCsFixer\Config::create()
return (new PhpCsFixer\Config())
    ->setRules(...)
    ;
```

## おわりに
`composer.lock`している環境では特に問題ないと思いますが、`CI`環境などで`global`にインストールしている場合など、`composer.lock`していない環境では、`v3`リリース以降突然エラーになったかと思います。

誰かのお役に立てますように 🙏
ではでは。
【wordpress】メディア（画像）挿入時に勝手に入る高さと横幅、classを削除

わかる方向けコピペセット
function.phpに下記を記述

```
add_filter('post_thumbnail_html', 'remove_media_attribute', 10);
add_filter('image_send_to_editor', 'remove_media_attribute', 10);

function remove_media_attribute($html)
{
	$html = preg_replace('/(width|height)="\d*"\s/', "", $html);
	$html = preg_replace('/class=[\'"]([^\'"]+)[\'"]/i', '', $html);
	return $html;
}
```
【wordpress】勝手にpタグ入れないタグ テンプレ

タイトルそのまま　わかる方向けコピペセット

#一括設定
funciton.phpに下記記述

```
add_action('init', function() {
remove_filter('the_excerpt', 'wpautop');
remove_filter('the_content', 'wpautop');
});
add_filter('tiny_mce_before_init', function($init) {
$init['wpautop'] = false;
$init[‘apply_source_formatting’] = true;
return $init;
});
```
#個別設定
<?php the_content(); ?>の前に下記記述

```
<?php remove_filter('the_content', 'wpautop'); ?>
```

#特定の投稿タイプで設定
```
add_filter('the_content', 'wpautop_filter', 9);
function wpautop_filter($content) {
global $post;
$remove_filter = false;

//各自設定してね　ここから
//特定のカスタム投稿のみ
$arr_types = array('★カスタム投稿タイプ名');
//複数の投稿タイプの場合
$arr_types = array('page','XXX','XXX');
//固定ページのみ
$arr_types = array('page');
//記事ページのみ
$arr_types = array('post');
//各自設定してね　ここまで

$post_type = get_post_type( $post->ID );
if (in_array($post_type, $arr_types)) $remove_filter = true;
if ( $remove_filter ) {
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
}
return $content;
}
```
為替データの容易な入手方法

ＦＸシストレをやっていて、為替データの入手先についてのメモ

Pandas DataReaderが楽っぽい　→　CLOSE値のみ
四本足は個別にAPI叩くしかないか？

#Pandas DataReader

用意されているAPI関数
https://pandas-datareader.readthedocs.io/en/latest/readers/index.html



ドキュメント
https://pandas-datareader.readthedocs.io/en/latest/

Index(Fred)
https://fred.stlouisfed.org/categories/15

jpyusd ---> 'DEXJPUS','fred'
gold ---> "GOLDAMGBD228NLBM", "fred"
nk225 ---> "NIKKEI225",'fred'

```python
from pandas_datareader import data
>>> jpy = data.DataReader('DEXJPUS','fred')
```

参考元
https://github.com/pydata/pandas-datareader/issues/842
https://stackoverflow.com/questions/21483959/how-can-get-usdjpycurrency-rates-with-pandas-and-yahoo-finance



#Alpha Vantage API

ドキュメント
https://www.alphavantage.co/documentation/

通貨リスト
https://www.alphavantage.co/physical_currency_list/

コード

```python
api_key="xxxxxxxxxxxxx"
symbol= "currency data string"
from alpha_vantage.timeseries import TimeSeries
ts = TimeSeries(key=api_key, output_format='pandas')
data, meta_data = ts.get_daily(symbol, outputsize='full')
```
WinSCPで起動時にログイン表示が出なくなったときの設定方法

WinSCPを使っていると何かの拍子に自動でログイン画面が出てこなくなる時がある。

おそらくはここのチェックボックスを外してしまったのが原因。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430322/d882b0b9-d056-0b41-774e-0d392d367cd7.png)

現状WinSCP 5.17.9では、このチェックボックスは外してしまうと出てこなくなるので、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430322/449d3859-49c5-146a-b1b3-08ddc494b018.png)

戻すためには、環境設定 -> ウィンドウ -> その他 
「最後のセッションを閉じた後の起動時にログインを表示」にチェックを入れる必要がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430322/ce88c532-49db-72bb-7d78-3e9a06301de4.png)

設定ファイル上の値は「ShowLoginWhenNoSession」なので、これを1にしてもいい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430322/062b55a9-422d-8967-567f-389c8fb012dc.png)
QiitaでLinuxコマンドの内容を投稿するときの豆知識

# QiitaでLinuxコマンドの内容を投稿するときの豆知識  
マークダウン記法でコードを掲載する場合に、バッククォーテーションでコードを囲みます。
例えば、バッククォーテーションを3つずつ2行入力して、その間の行に適当なLinuxコマンドを入力すると、下記のようになります。

```
# カレントディレクトリにpracticeディレクトリを作成する
mkdir practice

# カレントディレクトリ内のpracticeディレクトリを削除する
rm -r practice
```

今度は、バッククォーテーションを3つずつ2行入力して、最初にバッククォーテーションを入力した行の末尾に「shell」と入力します。  
その間の行に先程と同じ内容を入力すると、下記のようになります。

```shell
# カレントディレクトリにpracticeディレクトリを作成する
mkdir practice

# カレントディレクトリ内のpracticeディレクトリを削除する
rm -r practice
```

1つ目と違う点としては、  

- コメントの表示がグレーになっている。  
- オプションの表示が赤くなっている。  

2つ目の方が表示が見やすくなっていますね。  

## 結論  
例えば、HTMLのコードを投稿する場合は、先程の「shell」の箇所に「html」と入力すると見やすくなります。  
JavaScriptのコードを投稿する場合は、先程の「shell」の箇所に「JavaScript」と入力すると見やすくなります。  
これらのことはよく知られていることだと思いますが、Linuxコマンドの投稿をする際に「shell」と入力すると見やすくなることは割と知られていないと思ったので投稿しました。  
これから皆さんが投稿される際に役立てていただければ、幸いです。