OmniAICreator/Qiita-1.07M huggingface dataset:
pandas-profiling に matplotlib の設定を上書きされる問題とその回避方法

pandas-profiling はデータの特徴をざっくり眺めるときに使うとても便利なライブラリ[^pdp]なのだが、プロファイルを実行すると matplotlib の設定を上書きされるという厄介な問題がある。

[^pdp]: [【Pythonメモ】pandas-profilingが探索的データ解析にめちゃめちゃ便利だった件 - Qiita](https://qiita.com/h_kobayashi1125/items/02039e57a656abe8c48f)

## 設定を上書きされる問題
まずは普通に matplotlib を使ってグラフを表示してみる。

``` python
import matplotlib
import matplotlib.pyplot as plt

%matplotlib inline

matplotlib.rcParams['font.family'] = 'TakaoPGothic'
matplotlib.rcParams['figure.figsize'] = (8, 4)
plt.style.use('ggplot')
```

``` python
from sklearn import datasets

iris = datasets.load_iris()
```

``` python
plt.scatter(iris.data[:, 2], iris.data[:, 3], c=iris.target)
plt.xlabel('花弁の長さ (cm)')
plt.ylabel('花弁の幅 (cm)')
plt.show()
```

![](https://qiita-image-store.s3.amazonaws.com/0/16369/5161bec2-1db0-7c66-08be-81e2241f276c.png)

問題なくプロットした画像が表示されている。

続いて、**pandas-profiling を使った後にもう一度同じグラフをプロット**してみる。

``` python
import pandas as pd
import pandas_profiling as pdp

df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = iris.target_names[iris.target]

pdp.ProfileReport(df)  # レポートが表示される
```

``` python
plt.scatter(iris.data[:, 2], iris.data[:, 3], c=iris.target)
plt.xlabel('花弁の長さ (cm)')
plt.ylabel('花弁の幅 (cm)')
plt.show()
```

![](https://qiita-image-store.s3.amazonaws.com/0/16369/27ec884c-a172-0682-268c-e642c483bace.png)

グラフの色も大きさも違うし、何より日本語が豆腐になってしまっている。

## 原因
pandas-profiling は、プロファイルの実行時に matplotlib の設定を上書きするらしい。

[Change default font size and plot sizes · Issue #95 · pandas-profiling/pandas-profiling](https://github.com/pandas-profiling/pandas-profiling/issues/95)

オプションで挙動を変えることもできなさそうなので、pandas-profiling そのものを直すしかなさそう。

## 回避方法
だいぶ苦しい方法だが、`rcParams` を一時的に避難させておいてプロファイルを実行した後に元に戻すことで回避できる。

``` python
def profile_report(df):
    params = matplotlib.rcParams.copy()
    report = pdp.ProfileReport(df)
    matplotlib.rcParams.update(params)
    return report
```

``` python
profile_report(df)  # レポートが表示される
```

これで他のグラフに影響を与えることなくプロファイルを実行できる。

ただし、この回避方法では「プロファイルレポートそのものの日本語が豆腐になる」問題は解決できていないので、その場合は pandas-profiling の設定ファイルを直接書き換える必要がある。[^2]

[^2]: [pandas_profiling で列名が日本語のときに相関プロットのラベルが豆腐（文字化け）になるのをなんとかする - Qiita](https://qiita.com/yubiquita/items/9c056e175ccb085eb137)
C++ Builder XE4 > geometry > ウィンドウを最大化している状態から通常のサイズにする 

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

### 関連

- [C++ Builder XE4 > geometry > 右配置のTEditのフォントサイズを拡大時、左配置のTChartを残りスペースで描画するサイズに落とす > ScaleBy()での処理](https://qiita.com/7of9/items/cc15ee09f96652409595)

上記の処理において、ウィンドウの最大化をしていると処理が失敗する。

### 最大化から通常のサイズへ

下記のコードが有効であるようだ。

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	if (this->WindowState == wsMaximized) {
		this->WindowState = wsNormal;
	}
}
//---------------------------------------------------------------------------
```
emacsのショートカットキー　チートシート (Windows)

## 概要
Emacsエディタでよく使うショートカットを一覧にまとめました．
MはAltキー，CはCtrlキーを表します．

## ショートカット一覧

### カーソル移動

|キー|動作|
|:--|:--|
|C-b|１文字左に移動|
|C-f|１文字右に移動|
|C-p|１行上に移動|
|C-n|１行下に移動|
|C-a|行頭に移動|
|C-e|行末に移動|
|M-v|１ページ戻る|
|C-v|１ページ進む|
|M-<|ファイル先頭に移動|
|M->|ファイル末尾に移動|
|C-l|カーソル位置を中央に|
|M-g g|指定した行番号に移動|
|C-u C-[Space]|カーソルを一つ前の位置に戻す|

### テキスト編集

|キー|動作|
|:--|:--|
|C-[Space] のちカーソル移動|テキスト選択|
|C-x [Space] のちカーソル移動|テキスト矩形選択|
|C-x h|テキスト全選択|
|テキスト選択した状態で M-w|コピー|
|テキスト選択した状態で C-w|切り取り|
|C-y|貼り付け|
|C-y M-y|履歴から貼り付け|
|C-k|１行切り取り|
|C-d|デリート|
|C-/|Undo（元に戻す）|
|C-g C-/|Redo（やり直し）|
|テキスト選択した状態でC-u C-x r N|連番挿入|
|テキスト選択した状態でC-x C-u|大文字に変換|
|テキスト選択した状態でC-x C-l|小文字に変換|
|M-q|現在の段落を詰め込む|

### 検索、置換

|キー|動作|
|:--|:--|
|C-s|カーソルより下の範囲で検索|
|C-r|カーソルより上の範囲で検索|
|C-M-s|カーソルより下の範囲で正規表現検索|
|C-M-r|カーソルより上の範囲で正規表現検索|
|M-%|逐次置換|
|C-M-%|正規表現で逐次置換|
|テキスト選択した状態でM-$|英語のスペルチェック|
|テキスト選択した状態でM-=|文字数カウント|

### ウィンドウ操作

|キー|動作|
|:--|:--|
|C-x 2|ウィンドウを上下に分割する|
|C-x 3|ウィンドウを左右に分割する|
|C-x 1|分割されたウィンドウを、現在のウィ ンドウ１つにする|
|C-x 0|分割されたウィンドウを、選択され ていない方のウィンドウ１つにする|
|C-x o|ウインドウ間のカーソル移動|

### ファイル、バッファ操作

|キー|動作|
|:--|:--|
|C-x C-f|ファイルを開く|
|C-x C-s|ファイルを保存|
|C-x C-w|別名で保存|
|C-x b|バッファを変更|
|C-x k|バッファを閉じる|
|C-x i|別ファイルを挿入|
|C-g|コマンド中断|
|C-x C-c|Emacs終了|
|C-x [Return] f|文字コードの変更|
化学系データサイエンティスト駆け出しのおすすめURL

化学系データサイエンティスト駆け出しの私が参考になったURLのおすすめを羅列していきます（メモに近いです。）。内容は化学と機械学習中心です。:eyes:

#機械学習　概要編:point_up:
・道具としての機械学習：直感的概要とその実際
https://www.slideshare.net/itakigawa/ss-72983543
ーー機械学習の基礎が学べました。

・結局、機械学習と統計学は何が違うのか？
https://qiita.com/KanNishida/items/8ab8553b17cb57e772d6
・AI/データサイエンスのプロジェクトが失敗する10の危険なサイン
https://qiita.com/KanNishida/items/054500a4bd1a3ca03379
ーー技術書だけではなく、このような新聞っぽい記事も読むべきと思いました。

・Tinker With a Neural Network in Your Browser.
Don’t Worry, You Can’t Break It. We Promise.
https://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=xor&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.19837&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false
ーーNNを視覚的に理解できます。教材に使えるかも。

・ソシャゲエンジニアの自分が開発MacBookにインストールしているアプリやら設定やら
https://qiita.com/west-hiroaki/items/9560f0504c3bdfe970f5
ーー開発環境を作る際に大変勉強できました。結局Vim使ってますが。。。

・エンジニアの情報収集法まとめ
https://qiita.com/nesheep5/items/e7196ba496e59bb2aa28

・Deep Dream Generator
https://deepdreamgenerator.com
ーー面白いです。

#化学編:v_tone4:
・Python用ケムインフォマティクスツールRDKitのインストール
https://qiita.com/mojaie/items/2113274201038b29af3d
ーーマテリアルインフォマティクスの登竜門？？RDkitについて

・IS LIFE WORTH LIVING?
https://iwatobipen.wordpress.com
ーーこの方のブログはRdkitの話題が多く、大変参考になる。

・化合物の構造を表現する記述子
http://lan496.hatenadiary.jp/entry/2018/02/16/091521

・Kerasで化合物の溶解度予測（ニューラルネットワーク，回帰分析）
http://www.ag.kagawa-u.ac.jp/charlesy/2017/07/21/kerasで化合物の溶解度予測（ニューラルネットワー/
ーー実践的になってます。

#機械学習　実践編:runner_tone2:
・機械学習　トレーニングデータの分割と学習・予測・検証
https://qiita.com/terapyon/items/8f8d3518ee8eeb4f96b2

・「データ視覚化のデザイン #1」をmatplotlibで実装する
https://qiita.com/skotaro/items/cdb0732ad1ad2a4b6236
ーー予測したデータを視覚するために必要

・Python: 機械学習で分類問題のモデルを評価する指標について
https://blog.amedama.jp/entry/2017/12/18/005311

・SVM(RBFカーネル)のハイパーパラメータを変えると何が起こるの?
https://qiita.com/sz_dr/items/f3d6630137b184156a67
ーー機械学習を学んでいくとカーネル法やサポートベクターマシーンのハイパーパラメーターの壁にぶち当たりました。

・kerasでtensorboardの表示とmodelの保存
https://qiita.com/uni-3/items/021cbb6c9ac803081b13
・https://knowledge.sakura.ad.jp/13150/
ーーtensorboardで視覚的にNNのパラメーターやフロー図をみることができます。

・あまりに暑いので，140年分の気温をProphetで分析した
https://qiita.com/haltaro/items/9c68f0914677bb3a629c
ーーqiitaで話題になっていた記事。データの取り扱いの入門書になる気がした。とてもおすすめ。

・Google ColabでやるPyTorchとKerasの比較（DenseNetを例に）
https://qiita.com/koshian2/items/9877ed4fb3716eac0c37#comment-a92841e41c6fc15b1f9f
ーーこの方の記事は機械学習の処理速度を中心に検討されており、マニアックな感じで興味深いです。


以上です。何か皆様の一助になればと願っております。
touchdesigner||wireframe線を太くする方法 mac版

https://www.youtube.com/watch?v=yURhTXhDEs8

このチュートリアルで3d Textureの勉強をしていた際にmacではwireframe matのline widthをいじっても大きくならなかったのでそのやり方の備忘録

<img width="1280" alt="スクリーンショット 2018-10-22 13.52.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/275320/924aff9f-187f-e1a0-9bd4-257544fa5f1a.png">


まずは全体

wireframe matのline widthで線の太さを調節しようと試みたところ、できなかった

代わりにwireframe sopをFacet sopとgeoの間に入れてwireframe sopのwire radiusの大きさをいじって変更した

色はconstant matから色をつければいい
WordPress プラグイン開発 - アンインストール処理

プラグインがアンインストールされる際に、プラグインに関する設定や独自に作成したデータベースのテーブルを削除する必要があります。
アンインストール処理を記述する方法としては二通りあります。

1. Uninstall Hookに登録する
2. uninstall.phpファイルを用意する

また、ユーザがプラグインをアンインストールする手順の流れとして

1. まずプラグインを無効にする
2. それから削除する

という流れとなりますが、WordPress にはこの２つの手順用にそれぞれDeactivation Hook（無効時に呼ばれる）とUninstall Hook（削除時に呼ばれる）が用意されています。

## 1: Uninstall Hookを利用する(register_uninstall_hook)

Uninstall Hookを利用するには、register_uninstall_hook()関数を使用します。

```php
// プラグイン削除時に呼ばれる処理を登録する
register_uninstall_hook( string $file, callable $callback );
```

```php
// 例
function myplugin_activate() {
    // プラグインが有効となったときにアンインストール処理をフックする
    register_uninstall_hook( __FILE__, 'myplugin_uninstall' );
}
register_activation_hook( __FILE__, 'myplugin_activate' );

function myplugin_uninstall() {
    // アンインストール処理
}
```

プラグイン無効化時にも何か処理したい場合には、register_deactivation_hook()関数も利用できます。

```php
// プラグイン無効時に呼ばれる処理を登録する
register_deactivation_hook( string $file, callable $function );
```

```php
// 例
function myplugin_deactivate() {
    // プラグインが無効となったときの処理
}
register_deactivation_hook( __FILE__, 'myplugin_deactivate' );
```

## 2: uninstall.php ファイルを利用する

プラグインのルートフォルダ内にuninstall.phpファイルを作成します。
ユーザがプラグインを削除するとWordPressから自動的に実行されます。
WordPressは**WP_UNINSTALL_PLUGIN**定数を定義してからuninstall.phpを呼び出します。

uninstall.php 側はファイルの先頭で**WP_UNINSTALL_PLUGIN**定数が定義されているかチェックを行い、直接アクセスされることを防止する必要があります。
このチェックが抜けている状態でWordPress公式のプラグインに申請すると指摘され差し戻されます。

```php:uninstall.php
// WP_UNINSTALL_PLUGINが定義されているかチェック
if (!defined('WP_UNINSTALL_PLUGIN')) {
    die;
}

$option_name = 'wporg_option';

// オプション設定の削除や
delete_option($option_name);
delete_site_option($option_name);

// データベースのテーブル削除、などなど
global $wpdb;
$wpdb->delete( ... );
```
YouTube埋め込み動画でタイトルと関連が表示されるようになりました

YouTubeを埋め込む際に、showinfoの値を0とすることで埋め込み動画で表示されるタイトルを非表示にできていたのですが、10月22日の時点でshowinfoが廃止されたようです。
これにより強制的にタイトルが表示、ホバー時に強制的にタイトルが出るようになりました。
日本語のYouTube APIのページにはまだ記載されていませんが、海外のページには9月25日以降にdeprecated と記載されています。
https://developers.google.com/youtube/player_parameters#showinfo

同時に、関連を非表示にできるrelパラメータも変更されました。
relは0で非表示だったものが、同じチャンネルの関連動画に変更されています。
関連は10月22日時点でループでは出ないようです。

## 対処方法

- 全画面で上起点の場合、マージンを少し上にずらしてタイトルを表示させないようにする
- pointer-events: none、上に何かをかぶせるなどして動画ホバーで反応しないようにする
- Vimeoとかに移行する

## 参考サイト
https://developers.google.com/youtube/player_parameters#showinfo
https://stackoverflow.com/questions/52917848/why-doesnt-work-the-playervars-with-the-youtube-api-anymore

## おわりに
YouTubeを使って、小さい動画の埋め込みや、全画面動画の自動再生対応が難しくなりそうな気がします。
個人的には限定公開動画を埋め込むという技が使いづらくなったなと言う印象です。
Nuxt.jsのプロジェクトにSassを導入する方法

Nuxt.jsのプロジェクトに、[Sass](https://sass-lang.com/)を導入する方法を紹介します。

## パッケージをインストール
Sassを読み込むためのパッケージをインストールします。

```sh
$ npm i -D node-sass sass-loader
```

これだけで、特に設定ファイルを編集することなくSassを使用することができます。

## コンポーネントで使用
### SASS記法
コンポーネント内のstyleブロックに`lang="sass"`を指定します。

```vue
<style lang="sass">
.foo
    font-color: red
</style>
```

### SCSS記法
コンポーネント内のstyleブロックに`lang="scss"`を指定します。

```vue
<style lang="scss">
.foo {
    font-color: red;
}
</style>
```

## 参考リンク
* [API: css プロパティ - Nuxt.js](https://ja.nuxtjs.org/api/configuration-css/)
* [プリプロセッサ - Nuxt.js](https://ja.nuxtjs.org/faq/pre-processors/)
AWS EC2 T2→T3インスタンスタイプ変更で遅くなる？

## T3インスタンス

今年の夏にT3インスタンスが[リリース](https://aws.amazon.com/jp/blogs/aws/new-t3-instances-burstable-cost-effective-performance/)され、T2に比べて安くなり性能も良くなったので、タイプを変更した方も多いと思います。

## あれ？？なんか遅くなった？

まずは開発環境でEC2のタイプを変更して、アプリを実行！
ん？あれ？遅くなった？
なぜだ・・・・・
色々と調べている中で「モニタリング」でT2の時と異なる数値を発見

## CPUクレジットがおかしいぞ

### T2
<img width="192" alt="スクリーンショット 2018-10-22 13.39.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/164563/6b9a8716-6e43-bce2-bded-978c3143c5ca.png">
### T3
<img width="216" alt="スクリーンショット 2018-10-22 13.40.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/164563/7b7430b4-75dc-2028-fd6a-218a5142f136.png">
**少ない！！！**

### CPUクレジットとは
<img width="956" alt="スクリーンショット 2018-10-22 13.32.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/164563/05f01c0b-eeba-3462-f420-fedc55955624.png">
<img width="872" alt="スクリーンショット 2018-10-22 13.32.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/164563/0a0f0d98-21bb-244a-514b-7d901cdaf494.png">
<img width="939" alt="スクリーンショット 2018-10-22 13.16.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/164563/2dbaefef-e526-75d2-3bf2-7d392d3da24c.png">

### 問題は起動クレジットの違いだった
<img width="936" alt="q11.png" src="https://qiita-image-store.s3.amazonaws.com/0/164563/36619931-e95a-3dbd-e6d6-bb8cb7472188.png">

つまり、T2→T3になってCPUクレジットの数と獲得率は２倍になったが、**起動クレジットが0**になった。
T2は起動直後に60分バースト可能だったが、T3はCPUクレジットが貯まるのを待たなければいけない。
解決するには、[ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-credits-baseline-concepts.html)にもあるように、unlimited として起動しすることで起動直後にバースト可能となります。

#### [ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-credits-baseline-concepts.html)はよく読もう
Nuxt.jsのプロジェクトにOnsen UIを導入する方法

Nuxt.jsのプロジェクトに、[Onsen UI](https://ja.onsen.io/)を導入する方法を紹介します。

## パッケージをインストール
Onsen UI用のモジュールである[nuxt-onsenui-module](https://www.npmjs.com/package/nuxt-onsenui-module)をインストールします。

```sh
$ npm i -D nuxt-onsenui-module
```

## プロジェクトにモジュールを追加
`nuxt.config.js`ファイルの`modules`に、`nuxt-onsenui-module`を追加します。

例：

```js:nuxt.config.js
module.exports = {
  modules: [
    'nuxt-onsenui-module'
  ]
}
```

これだけで、各コンポーネント内でOnsen UIのコンポーネントを使用することができます。

## 使用例
* [munierujp/nuxt-onsenui-example](https://github.com/munierujp/nuxt-onsenui-example)
Nuxt.jsのプロジェクトにVuetify.jsを導入する方法

Nuxt.jsのプロジェクトに、[Vuetify.js](https://vuetifyjs.com/en/)を導入する方法を紹介します。

## create-nuxt-appを使用する場合
プロジェクトの作成に[create-nuxt-app](https://github.com/nuxt/create-nuxt-app)を使用する場合、UIフレームワークのオプションでvuetifyを選択するだけで導入することができます。

## create-nuxt-appを使用しない場合
Nuxt.jsの[スターターテンプレート](https://github.com/nuxt-community/starter-template)や、スクラッチからプロジェクトを作っている場合は、自分でVuetify.jsのモジュールを追加する必要があります。

### パッケージをインストール
nuxtjsが提供しているVuetify.js用のモジュールである[@nuxtjs/vuetify](https://www.npmjs.com/package/@nuxtjs/vuetify)をインストールします。

```sh
$ npm i -D @nuxtjs/vuetify
```

### プロジェクトにモジュールを追加
`nuxt.config.js`ファイルの`modules`に、`@nuxtjs/vuetify`を追加します。

例：

```js:nuxt.config.js
module.exports = {
  modules: [
    '@nuxtjs/vuetify'
  ]
}
```

これだけで、各コンポーネント内でVuetify.jsのコンポーネントを使用することができます。

## 使用例
* [munierujp/nuxt-vuetify-example](https://github.com/munierujp/nuxt-vuetify-example)
ISUCON8本戦で5位になった話

2018/10/20に行われたISUCON8本戦に「チーム人間性」として出場し、5位という結果に終わりました。。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">弊チーム、5位に終わりましたー<br>悔しいけどやりきったと思う…来年こそは勝ちたい！ <a href="https://twitter.com/hashtag/isucon?src=hash&amp;ref_src=twsrc%5Etfw">#isucon</a> <a href="https://t.co/ekijaUwCyT">https://t.co/ekijaUwCyT</a></p>&mdash; 渋谷/オプト (@m4buya) <a href="https://twitter.com/m4buya/status/1053628710757163009?ref_src=twsrc%5Etfw">October 20, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

チームの顔ぶれとしては

- ocadarumaさん（リーダー、デプロイなど足回り＆計測&全般）
- sushioさん（競プロガチ勢、アプリ中心）
- 私mshibuya（インフラ寄り）

といった感じで、職場である[オプト](https://opt-technologies.jp/)つながり(ocadarumaさんはOB)のチームです。
去年のISUCON7にも出場していたのですが、帯域不足を超えられずに予選敗退していたので、今年の予選を見事通過できたことで大いに湧き上がりました。

使用言語はGoです！(ISUCON以外での使用経験なし…）

# 事前対策

本戦を前に

- そろそろ10台構成とか来て手作業での設定変更が厳しくなるんじゃね？
- インメモリ化できないと勝てない問題とか出そうじゃね？

あたりヤマをはって練習でそのへん取り組んだ上で臨んだのですが、見事にどちらもヒットせず…。
（まぁ難しいですよね）

# 本戦でやったこと

自分がやった打ち手のみです。残りはあとのお二方がそれぞれ振り返ってくださるはず…！
[→ocadarumaさんのエントリ](https://ocadaruma.hatenablog.com/entry/2018/10/21/004353)
[→sushioさんのエントリ](https://qiita.com/ushjp/items/454c0b4963b4b42c7fb3)

### ordersのタイムパーティショニングをやめる
MySQLのパーティショニングはあまり使った経験がなく、「パーティショニング無意味じゃん」と確信を持つに至らなかったのですが、少なくともordersについては時系列でクエリする局面がなかったので外して問題ないと判断しました。
スコアは725→845になったやつだと思う…。

### tradeの非正規化
sushioさんがロウソクチャートのキャッシュを実装した後だったのですが、まだGetCandlestickDataが重いのでGROUP BYをしなくて済むようtradeを時・分・秒でサマったテーブルを作り、INSERT時に更新するように。
スコアは5,275→5,316あたり？あんまり効かなかったけど、害はなさそうなので入れることに。

### /infoのN+1問題解消のデバッグ
sushioさん作のN+1解消（尊い）がベンチ通らない問題の調査。エンティティをscanしてるところでpriceにamountを代入しちゃってた、みたいなやりがちで気づくの大変系のやつでした…。

### ロウソクチャートSELECTをREAD UNCOMMITTEDに
非正規化でロック待ちがかなり増えて伸び悩んでいたので、分離レベル変更したらロック待ちなくなったりしないかな？と思ってやってみたやつです。まぁダーティリードしちゃっても問題ないだろうと踏んでいたので…
この時既に17時も過ぎており破れかぶれでやったのですが、これがちょっと効いてスコアは6,177→7,202へ。

# 振り返り
最終的にocadarumaさんの「確率的にenable_shareを有効にする」というブレイクスルーがあり13,914というスコアを残すことができました。

- 「シェアを完全trueに→ベンチ失敗して『まだ我々には早かったんだ…』となり戻す」を繰り返していたので、もっと確率的シェアに早めに気づけてればなーというのはある
- 今回の問題はとても規模が大きかった。こんなに仕様盛り盛りでくるとは
- 仕様書やコードを読むのはかなりできていて、Loggerのバルク化の必要性に気づけたりもした。ただ、気づいたポイントを全部着手できたということもなくて（TODO対応とかトレードマッチングの非同期化とか）、時間がもっとあれば…！というのが正直なところ

あたりが感想でしょうか。

優勝したかったなーというのはもちろんあって悔しくはありますが、今の我々の実力は出せていたんじゃないかな…と思ってます。

# ついでに予選でやったこと

予選のエントリは書かなかったので、ここで予選で自分が打った手も振り返っちゃいます。
チームとしてはスコア41,195の全体11位での突破でした。

### reservationsに雑にindex追加
開始直後だったので、ジャブって感じでreservationsにあったevent_id, sheet_idのインデックスにcanceled_atを追加。ちょっと効いたかな？

### テンプレートエンジンをHeroに
全然効かず。SPAなんでそりゃそうですよねという感じ…。

### ORDER BY RANDをランダム値オフセットに変換
まぁORDER BY RANDの書き換えの定石パターンってことで…。

### 複数サーバ化
16時過ぎまでは1台でチューニングしていて、そこそこのスコアになったので複数台化。
「3台にしてぶっちぎりでスコア伸びるっしょ」と期待していたのですが、DBロック競合が圧倒的に大きかったようでスコア的には変わらず〜微減程度に。。。

って感じで、予選はあんまりチームの役に立てた感はなかったです:sweat_drops: 

# まとめ

去年のISUCON7から初めて挑戦しはじめて２度めになるわけですが、正直ここまで楽しめるイベントとは思ってなかったですね。。
来年以降も絶対参加しますよ！

すばらしいイベントを提供してくださった運営の皆様、本当にありがとうございました!!
【開発メモ~C/C++のプログラムで自身のローカルIPとホスト名取得~】

開発環境:
・Windows64bit
・VisualStudio2015
・c/c++


###①ソケットなのでとりあえずインクルードやら

```c:main.cpp
#include <winsock2.h>
#pragma comment(lib, "wsock32.lib")
```

###②格納する変数を作成する

```c:main.cpp
// ホストネーム格納領域
char lpszHostName[50];
// IPアドレス
wchar_t lpszIP[19];
PHOSTENT phostent;
IN_ADDR in;
```
phostent  ・・・　ホストネーム
in　　・・・　インターネットのホストアドレス

###③ホストのデータをゲット
```c:main.cpp
gethostname(lpszHostName, 50); // 格納する変数と名前の長さを指定(自由)
```
###④phostent構造体にいれる
```c:main.cpp
phostent = gethostbyname(lpszHostName)
```
###⑤inにアドレスを4byte分コピーします
```c:main.cpp
memcpy(&in, phostent->h_addr, 4);
```
###⑥inをinet_ntoaで10進数へ変換し、lpszIPに 書式化が終わった文字列を格納して表示する。
```c:main.cpp
wsprintf(lpszIP,(wchar_t*)inet_ntoa(in));
```

☆思ったこと
専門的なことが増えてきたので、グーグル先生を活用したのですがまだネットワーク知識が不十分なので勉強が必要だと改めて感じました。

参考
======================================
・http://www.geocities.jp/playtown1056/program/ws_2.htm
Emacsで複数のシェルを実行する方法

# Emacsで別バッファでシェルを実行したい

`M-x rename-buffer`
↑で現在のバッファに名前をつけることができる

その後、`M-x eshell`などで新しいシェルを開くことで新しいバッファを作ることが可能

## 参考

https://code.i-harness.com/ja/q/63af86
Windows 10でのサムネイルの自動削除を止める方法

　この記事は4分で読めます。
# はじめに
　作業環境がWindows 10に変わりしばらく経って、いつの間にか画像ファイルなどのサムネイルが頻繁に読み込みを繰り返すようになりましたよね。
　でもあまりに頻繁なせいでちょっとイライラするので、どうにかするために色々と検索してみましたが、レジストリの設定を変更するやり方ばっかりでした。でも先日ようやくレジストリをいじらないやり方を見つけたので、ここにメモしておきたいと思います。
　この記事が少しでも、レジストリを触りたくない派の方に役立つことができれば幸いです。


# 何をするか
　Windows 10のサムネイルキャッシュを自動的に削除している**SilentCleanup**の設定を変更する。


# 作業環境
+ Windows 10
+ **タスク スケジューラ**を利用するので、管理者権限を利用できるようにしておいてください。[^※]

[^※]: レジストリ エディターでもできるそうですが、あまりそちらを触りたくないので……ご容赦ください。


# やり方
## タスクスケジューラを開く
### スタートメニューから開く
　画面左下の **Windowsボタン**もしくは`Windowsキー` > **Windows 管理ツール** と進み、そこから開くことができます。
![タスクスケジューラの開き方（スタートメニュー）](https://qiita-image-store.s3.amazonaws.com/0/283828/6ded27db-648b-b717-fca1-75fa504ca3ec.png)

### 検索ボックスから開く
　**検索ボックス**で`タスクスケジューラ`と検索して出てくる候補から開くことができます。
![タスクスケジューラの開き方（検索ボックス）](https://qiita-image-store.s3.amazonaws.com/0/283828/3dd9c0c9-ee3f-68ea-c88e-8eb57b4f546c.png)

### コントロールパネルから開く
　**コントロールパネル** > **システムとセキュリティ** > **管理ツール** と進み、そこから開くことができます。
![タスクスケジューラの開き方（コントロールパネル）](https://qiita-image-store.s3.amazonaws.com/0/283828/6669ae4b-68a2-998f-3a5a-ef85cd28a452.png)

### ファイル名を指定して実行から開く
　画面左下の **Windowsボタン**もしくは`Windowsキー` > **Windows システム ツール** > **ファイル名を指定して実行** を選ぶか、`Windowsキー` + `Rキー`を同時に押すことでファイル名を指定して実行ウィンドウが開きます。
　そこに`taskschd.msc`と入力し、開くことができます。
![タスクスケジューラの開き方（ファイル名を指定して実行）](https://qiita-image-store.s3.amazonaws.com/0/283828/dc98a06b-8091-c69b-26a0-5318353d801b.png)


## SilentCleanの設定を変更する
　**タスクス ケジューラ ライブラリ** > **Microsoft** > **Windows** > **DiskCleanup** と進むと、 **SilentClean** があるので、それを選択します。
　あとはタスクの無効化やトリガーなど、お好きに設定を変更してください。
![2018-10-22.png](https://qiita-image-store.s3.amazonaws.com/0/283828/378f7243-53de-522e-0763-21852731c10b.png)



# 参考
+ [「Windows10、サムネイルがリセット？再生成…」 - Yahoo!知恵袋](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10185248490)



# あとがき
　はじめての記事執筆のため拙いところがあると思います。
　気になるところや間違えているところがあれば教えてください。
特に何もインストールせずwindows7で範囲キャプチャを行う方法

結論からですが、マウスでぐりっと囲んだ範囲をキャプチャする方法は僕も知りません。
誰か教えてください。

しかし、別の手段ならありました。アクティブウィンドウをキャプチャする方法です。

対象のウィンドウをアクティブにした状態で
<kbd>Alt</kbd> + <kbd>Print Screen</kbd>　
これだけです。

slackとかならそのまま <kbd>Ctrl</kbd> + <kbd>V</kbd> で貼り付けるとか組み合わせると凄く便利ですね。

参考；
https://support.hp.com/jp-ja/document/c03225311
ヒアドキュメントのメモ


### 実行結果を見たい場合

```bash
cat << 'EOS'
hoge
fuga
`echo aaa`
EOS
```

### ファイルに書き出す場合

```bash
cat << 'EOS' > aaa.txt
hoge
fuga
`echo aaa`
EOS

$ cat aaa.txt 
hoge
fuga
`echo aaa`

```

### コマンド部分を実行して書きだす場合（EOSのシングルクォートを外す）

```bash
cat << EOS > aaa.txt
hoge
fuga
`echo aaa`
EOS

$ cat aaa.txt 
hoge
fuga
aaa

```

### 亜種（こんなのもあるょ）


```bash
tee /tmp/bbb/aaa.txt <<'EOS' >/dev/null
hoge
fuga
`echo aaa`
EOS
```

### ひとこと
---

* シングルクォートの有り無しで挙動が変わるので注意。
* EOSの部分は、なんでもよい。KOF（キングオブファイターズ）とかどうだろうか？

dockerfileなどでよく見かけるし、いろいろと便利に使えると思う。
kintone誰が読んだの？機能

#そのレコード誰が読んだのかわからない；；

おひさしぶりですうぇるです。
先日、「投稿したレコードを誰が読んだか確認したい！」と上司から司令をいただきました。


#アプリの用意
![image.png](https://qiita-image-store.s3.amazonaws.com/0/212899/d6a7e31b-6312-5d13-d22e-2c911393dd76.png)

アプリID：717

フィールド名|フィールドの種類|フィールドコード
---|---|---
文字列 (1行)|文字列（1行）|文字列__1行_
読んだ人|ユーザー選択|既読

#JavaScriptでカスタマイズ

イベントハンドラは一回変数に

```javascript
    const event1 = ['app.record.create.show','app.record.edit.show'];
    const detail = 'app.record.detail.show';
    const index = 'app.record.index.show';
```

読んだ人フィールドは編集できないように

```javascript
kintone.events.on(event1, function(event){
        //読んだ人フィールドは入力不可
        const r = event.record;
        r['既読'].disabled = true;
        return event;
    });
```

①自分のユーザ名が既読に入っているかチェック
②入っていたら処理をやめる
②’入っていなかったら今入っている人をユーザ選択フィールドに合わせてobjに格納
③自分のユーザ名をobjに追加
④apiでPUT


```javascript
kintone.events.on(detail, function(event){
        //既読の仕組みはここ
        const r = event.record;
        const User = kintone.getLoginUser();
        for(var num = 0; num < r['既読']['value'].length; num++){
            if(r['既読']['value'][num]['code'] === User.code){
                return ;
            }
        }
       //オブジェクト作っておく
       var obj = {};
       obj['app']    = 717;
       obj['id']     = r['レコード番号'].value;
       obj['record'] = {};
       obj['record']['既読'] = {};
       obj['record']['既読']['value'] = [];
       
       //今入っている人を数えて一緒に入れる
       for (var i = 0; i < r['既読']['value'].length; i++) {
           obj['record']['既読']['value'][i] = {};
           obj['record']['既読']['value'][i]['code'] = {};
           obj['record']['既読']['value'][i]['code'] = r['既読']['value'][i]['code'];
       }
       
       //ログインユーザを読んだ人フィールドに追加
       obj['record']['既読']['value'][r['既読']['value'].length] = {};
       obj['record']['既読']['value'][r['既読']['value'].length]['code'] = {};
       obj['record']['既読']['value'][r['既読']['value'].length]['code'] = User.code;
       kintone.api('/k/v1/record', 'PUT', obj, function(resp){
           console.log(obj);
       });
    });
```

ちょっとベタベタなコードになってしまいましたが、
取り急ぎは上司の要望は答えられました！！
フォルダの差分を比較するためのVBScript

フォルダの差分を比較するvbScriptのクラスを作成しました。
Winマージをプログラムで書いたような感じです。
使い方：第一引数と第二引数にフォルダパスを入れて実行

```

Dim DiffObj
Set DiffObj = new Diff
If DiffObj.IsDiff("./test","./test2") Then
	MsgBox("差分有")

Else
	MsgBox("差分無")

End If

Class Diff
	Public Function IsDiff(path1,path2)	

		If IsDiffFolder(path1,path2)=true then
			IsDiff=true
			Exit Function
		End If 

		If IsDiffFolder(path2,path1) =true then
			IsDiff=true
			Exit Function
		End If 
		IsDiff=false
	End Function

	'差分があればtrueを返す
	Private Function IsDiffFolder(path1,path2)
		Set fso   = CreateObject("Scripting.FileSystemObject")

		Set fsoFolder = fso.GetFolder(path1)
		For Each fsoFile In fsoFolder.Files
			If IsDiffFile(path1 & "\" & fsoFile.Name,path2 & "\" & fsoFile.Name) =true then
				'差分がある場合どのファイルで差分があるかをログファイルに書き出す例
				'LogWriterObj.write( path1 & "\" & fsoFile.Name & "で差分あり")
				IsDiffFolder=true
				Exit Function
			End If
		Next
		
    	For each subfolder in fsoFolder.subfolders			
			If IsDiff(path1 & "\" & subfolder.name,path2 & "\" & subfolder.name)=true then
				IsDiffFolder=true
				Exit Function
			End If
		Next
	End Function

	'差分があればtrueを返す
	Private Function IsDiffFile(file1Path,file2Path)

		Set objFSO = CreateObject("Scripting.FileSystemObject") 

		Set objFile1 = objFSO.OpenTextFile(file1Path, 1) 
		text1 = objFile1.ReadAll 

		Set objFile1 = objFSO.OpenTextFile(file2Path, 1) 
		text2 = objFile1.ReadAll 


		objFile1.Close 
		If InStr(text1,text2) = 0 OR InStr(text2,text1) = 0 Then 
			IsDiffFile=true
		Else
			IsDiffFile=false
    	End If 
	End Function
End Class


'''

またPrivateメソッドですが、IsDiffFileはファイルの差分を比較するメソッドです。
Nginxのリクエスト数/秒をcloudwatchへ連携する


## nginx stubをonにしておく。

https://qiita.com/hiroki_y/items/099a9a7c28ae7c592a2e

curl http://hoge/server-stub

```
Active connections: 17 
server accepts handled requests
 1177899 1177899 7047859 
Reading: 0 Writing: 1 Waiting: 16 
```


## 差分を取得するrubyメソッド
nginxのstubだと、起動してからの累計しか取れないため、
定期的に差分を取得=>差分秒で割る

```req_per_sec.rb
# get request count per sec from nginx stub
def req_per_sec stub_url, conf_path
    now = Time.now

    last_json = FileTest.exists?(conf_path) && JSON.parse(File.read(conf_path))

    txt = `curl #{stub_url}`
    req_counts = txt.split("\n")[2].split(" ")[0].to_i
    File.write conf_path, JSON::generate({time:now, req_counts:req_counts})

    if last_json
        diff_sec = now - Time.parse(last_json['time'])
        req_per_sec = (req_counts - last_json['req_counts']) / diff_sec
        return req_per_sec
    else
        return nil
    end
end
```

call the method

```.rb
p req_per_sec('http://hoge/server-stub','/path/to/hoge.json')
```
Docker

how to use
https://qiita.com/woz/items/43462398765f8036f3a8

vscode docker
https://qiita.com/Ryuichirou/items/6327ab5012ca1729d72f
https://qiita.com/yamada28go/items/414896084b384b1c65e2

docker
https://www.docker.com

nvidia-docker
https://qiita.com/sabaku20XX/items/f789a3c2b2e879e2804f

dockerhub
https://hub.docker.com
ペアプロやって覚えたこと【随時更新】

ペアプログラミングの結果やメリットを把握するためにペアプロを行うことでわかったことを記録します。

# 2018-10-22 (11:00 - 12:00) Yさん
* 相手が実装しているSlack Botの仕様を教えていただきました。
* GaroonのSOAP APIの簡単な使い方を覚えました。
* Stack Overflowの日本語版の他に[teratail](https://teratail.com/)というQ&Aサイトもあります。
* Slack APIのOutgoing Webhooksがそのうちdeprecatedになるので[slack-apps](https://api.slack.com/slack-apps)に変えたほうがいいです。
* 相手はJavaだけじゃなくていつの間にかJavaScriptもPythonも書けるようになりました。
* うちのチームはPythonよりRubyの方がなれていますがPython 2とPython 3の違いとかpyenvなどの仮想環境の使い方は一回勉強会を行なって認識合わせをしたいです。
* ペアプロを行う前に具体的に何を実装するか決めといたほうがいいと思われます。権限の関係で今日実装したい機能は実装できなかったけど、その代わりツールの使い方とかAPIドキュメントの読み方を学習しました。
試しにLINE Clovaのスキル作成にトライしてみたので手順を記録〜前編〜

## きっかけ
最近、Alexaのスキル開発について、話を聞く機会があったことです。
そこで思い出したのが、LINEのClovaがウチにはあったこと。（テレビ台の下あたりに隠れてた）
Clovaでも出てるんじゃない？と思い、調べてみたら.....ありました。
購入しといて放置するからこういうことに....。
こうゆうのは作ったことがないのですが、試しに作ってみようと思いつき、
折角なので、手順を記録していこうと思った次第です。

## 01 Clova Developer Center
[https://clova-developers.line.me/](https://clova-developers.line.me/)にアクセス。
すると、ログインしていなければ、ログイン画面がでてきます。
LINEに設定しているメールアドレスとパスワードでログイン。

![img01.png](https://qiita-image-store.s3.amazonaws.com/0/287209/7ec99983-b3dd-b990-158c-ab86b4c9f3f6.png)

この画面でログイン完了です。

## 02 スキルチャネルを新規作成
次に「スキルを開発する」をクリックし、次の画面で、「LINE Developersでスキルチャネルを新規作成」をクリックします。
![img02.png](https://qiita-image-store.s3.amazonaws.com/0/287209/eaf4cf5c-f56f-c938-9a3a-6d2177bd2e49.png)

LINE Developersにログインする必要があるのでログイン。
スキルチャネルを作成するのには、プロバイダーが必要になります。まだ、作成してことがない場合は、新規作成になります。

![img03.png](https://qiita-image-store.s3.amazonaws.com/0/287209/73b38e67-f794-f4bc-ff27-896a10fad11a.png)

チャネル名には、作成するスキルのタイトルを入力します。
![img04.png](https://qiita-image-store.s3.amazonaws.com/0/287209/81ac73c8-9b33-c9b3-da89-3aae35e61884.png)

終わるとClova Developer Centerに戻ります。

## 03 新しいExtensionを作成
次に、スキルの情報を入力していきます。

![img05.png](https://qiita-image-store.s3.amazonaws.com/0/287209/15c39eb3-8fc3-0226-f27d-c74fbfd3df95.png)


###タイプ
現状は「カスタム」のみなので、「カスタム」を選択します。

###スキル名
審査通過後にスキルストアに表示されるもの。合わないものが入っていた場合は審査時にひっかかる模様。

###呼び出し名
ユーザーがExtensionを利用するために呼び出す名称になります。
審査対象になる模様。

###AudioPlayerの使用
音源を配信するかどうかのチェックをします。

###提供者について
提供者の情報を入力します。選択すると、項目が表示されるので、各項目を入力します。

あとは、規約と個人情報取り扱いの２つの同意にチェックをし、「作成」で進みます。

##準備はできたみたい
この時点で、Clova Developer Centerにスキルが追加されていたので、
とりあえず準備はできたみたいです。
一区切りついたので、前編はここまでにします。
VSCodeでMySQLに接続する際のエラー対策

#VSCodeでMySQLに接続する際のエラー対策
VSCodeでMySQLに接続する際に以下のエラーが発生した。

**Error:ER_NOT_SUPPORTER_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client**

##環境
- VSCode:1.29.0-insider
- MySQL:8.0.12
- MySQL(Extensions of VSCode):0.3.0

##対策
root権限でログインし、MySQLで以下のコマンドを実行する。
(""内は環境に応じて変更が必要)

```sql
ALTER USER "ユーザ名"@"ホスト名" IDENTIFIED WITH 'mysql_native_password' BY "パスワード";
```

[GitHubのIssues](https://github.com/formulahendry/vscode-mysql/issues/39)が上がっている。

#参考サイト
[https://hiroronn.hatenablog.jp/entry/20180627/1530104001](https://hiroronn.hatenablog.jp/entry/20180627/1530104001)
Google Maps APIを使って複数のマーカーと吹き出し - JavaScript

[できた](https://off.tokyo/blog/js%e3%81%a7%e3%83%9e%e3%83%bc%e3%82%ab%e3%83%bc%e3%81%a8%e5%90%b9%e3%81%8d%e5%87%ba%e3%81%97%e3%82%92%e5%87%ba%e3%81%99%e6%96%b9%e6%b3%95-google-maps/)
Gitコマンド(Stash編)

#Gitコマンド(Stash編)

##Stashを作成する
...save "message"でメッセージを付与

```
$ git stash save
```

##全てのStashを表示する
'-p'のオプションを付与することで、変更内容も表示される

```
$ git stash list

//出力サンプル
stash@{0}: WIP on develop_BasedOnVer1.0.0: xxxx
stash@{1}: WIP on hotfix_BasedOnVer1.0.0: xxxx
```

##Stashを適用する
```
$ git stash apply stash@{n}
```

##Stashを削除する
```
$ git stash drop stash@{n}
```

##全てのStashを削除する
```
$ git stash clear
```

##Stashを適用&削除する
```
$ git stash pop stash@{n}
```


##Stashを比較する
```
$ git diff HEAD..stash@{n}
```

##Stashの適用を取り消す
前半はgit stash show -p でパッチ形式で出力、それをgit apply -Rでパッチを逆に適用

```
$ git stash show <適用したstash名> -p | git apply -R
```
第38話 魔六角陣

この記事は[仮面ライダービルドの数式](https://qiita.com/izmktr/items/e26a624e79bce3edccc9)の第38話です。

```math
M_{Magic Hexagon}=38
```

魔六角陣は3の大きさしか存在せず、どこも足し合わせると38になります。

![mahoujin.png](https://qiita-image-store.s3.amazonaws.com/0/985/19029fde-3dc3-1502-2021-b45fa4ba2d13.png)

魔方陣は有名でしょう。縦横斜めのどこを足しても15になります。

3の大きさの魔方陣は回転や鏡像を除くとこの形しかありません。
偶数は四隅と覚えておくと、魔方陣の問題を一瞬で解くことができます。

さて、魔方陣は魔の方陣です。
魔法陣ではないです。
これを六角形に拡張します。するとこんな形になります。これが魔六角陣です。

![marokkaku.png](https://qiita-image-store.s3.amazonaws.com/0/985/b1981f50-f5c4-b5bd-05d5-27cace36640c.png)

魔六角陣はこの大きさのこの形しか存在しません。
なぜなら、全部で19マスあって、平行に５本のラインが引けますから、
1～19を足して5で割った値が足し合わせた値になります。
しかし、大きさが３以外だと足し合わせた値が整数にならないので、
どう配置しても魔六角陣を作ることはできません。

しかし、１から始まらない、という条件をつけると合計値がずれるので、
魔六角陣を作ることができるようになります。

\#画像がひどいことになっているんですけど、誰か直し方知ってますか？
Golang インターフェースの使い方・メリット

##インターフェースの使い方


インターフェースは次のように定義します。


```go
type [name] interface {
    [method_name],
}
```



##インターフェースのメリット


簡単に使い方を説明します、、、

```go:main.go

package main

import (
    "fmt"
)

type Named interface{ 
    Name() string
}

//インターフェースを通してメソッドを呼び出す
func CallName(named Named) {
    fmt.Println(named.Name())
}

type Dog struct{
    say string
}

//インターフェースの実装
func (d *Dog) Name() string {
    return d.say
}

type Cat struct{
    say string
}

//インターフェースの実装
func (c *Cat) Name() string {
    return c.say
}

func main() {
    dog := Dog{
               say: "Hello",
           }
    cat := Cat{
               say: "World",
           }

    CallName(&dog)
    CallName(&cat)
}
```

```console:結果
Hello
World
```


1. インターフェースNamedを定義し、その中にNameというメソッドを定義する。
2. 構造体DogとCatを定義し、それぞれをレシーバに持つNameというメソッドを定義する。
3. Nameメソッドを定義することでそのメソッドのレシーバである構造体はインターフェースを実装したことになる。
4. インターフェースを実装したことでCall Nameをどちらのメソッドとしても呼び出すことができるようになる。


##まとめ

インターフェースはメソッドのまとまりのようなもので、インターフェースの中に定義されているメソッドを全て使うことでそのメソッドのレシーバはインターフェースを実装したことになる。

これにより、インターフェースを通して各レシーバを持つメソッドを１つの関数から呼び出すことができるようになる。





間違っている箇所があればご指摘いただければ助かります。。。







-----参考サイト----
https://teratail.com/questions/60856

https://dev.classmethod.jp/go/golang-6/

https://blog.y-yuki.net/entry/2017/05/07/000000
【開発メモ～LinuxでWebサーバー立てるために、ApacheのPHP有効化】


##開発環境:　
・LinuxOS Ubunt
・PHP version5.6
・Apache

##phpとApacheインストール&rootDri作成後

###①拡張子を変換
index.<b> html </b> →  index. <b> php </b>

###②libapache2-mod-php(各ver)　をインストール

###③viエディタでphpのconfigを編集

ex) sudo vi /etc/apache2/mods-enabled/php(各ver).conf




```conf:php5.6.conf
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_value engine Off
</Directory>
</IfModule>
```

の部分をすべてコメントアウトする

###④再起動

```shell:shell
sudo service apache2 restart
```
#☆思ったこと
初期段階のコンフィグの設定いじらないといけないのかよ！w
この設定のおかげで三日間無駄にしてしまった...。
参考
===============================
・学校の先生
・http://d.hatena.ne.jp/tosi29/20131124/1385285173
・https://linux.keicode.com/servers/apache-userdir.php?fbclid=IwAR2QRCm76Pm-2kHXo1jkEyQ5DyYvP1GyrwPd1wfketVAX9rtBhhOqAOUUm8
AccessVBAで直接SQLを叩きたいとき

自分用備忘録

内包しているAccessデータベースへの直接アクセスしたいとき


# 取得

DAOを使用する

レコードセット内のデータ取得は、`レコードセットオブジェクト!カラム名` という感じで行う

```VB
Private Sub 取得ボタン_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    
    Dim sql As String
    
    sql = "SELECT ID, 氏名, 電話番号 FROM 従業員マスタ"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(sql)
    
    Do Until rs.EOF
        
        Debug.Print rs!ID & " " & rs!氏名 & " " & rs!電話番号

        rs.MoveNext
    Loop

    Set rs = Nothing
    Set db = Nothing
End Sub
```



# 挿入、更新、削除

戻り値が必要ない場合は、RunSQLを使用できる

挿入、更新時に、都度確認画面が表示されるので、
`DoCmd.SetWarnings` にてワーニング表示を抑止している。

```VB
Private Sub 保存ボタン_Click()

    Dim sql As String
    Dim 数量 As Integer

    数量 = テキスト1.Value

    
    sql = "INSERT INTO テストテーブル(数量) VALUES (" & 数量 & ");"
    
    Debug.Print sql
    
    ' データ挿入
    DoCmd.SetWarnings False
    DoCmd.RunSQL sql
    DoCmd.SetWarnings True
    
End Sub
```

# 補足

Access VBAで `"` をエスケープするには、 `""` と重ねればよい
Access SQLでの日付時刻を扱う際は、 `#` で囲う。 `#2018/10/22 12:34:56#` など。
2019年度対応　SMS送信システム比較

2019年度対応　SMS送信システムを独自で比較してみました。よく見る比較サイトやランキングサイトって信用できるのか。

私は、中堅コールセンターにてWEB関連を担当していますが、「顧客に対して一斉送信できるSMS送信システムを、会社に導入するから各社のシステムを調べてくれ」と会社から突然言われ、渋々調査をしました。
結構大変だったので、情報を載せておこう思います。お役に立てればいいのですが。。。

##●そもそもSMSって何なの？
私は、SMS送信システムというものを知らなかったので調べるとこからスタートです。
SMSとは『ショートメッセージサービス』の略でメールアドレスが分からなくても
‘’<font color="red">***携帯電話番号だけでメッセージを送信できるサービス</font>***‘’のことです。

SMS送信システムとは携帯電話からしか送信できなかったSMSを、‘’<font color="red">***システムを介することで複数人へ一斉に送信できるサービス。***</font>‘’メールアドレスとは違い、電話番号のみで送信できるため、到達率がとても高いとのこと。

なるほど。
メールアドレスは変えることはありますが、電話番号ってなかなか変えないですよね。よくよく考えてみるとSMSってほとんど使ったことがないですね。確かに私の親もLINEの使い方がわからずに、SMSで前はやり取りしてたことを思い出しました。
</br>
</br>
</br>

##プッシュPro-SMS(WillPlace)
メッセージだけではなく写真付きのフルカラー資料が送信可能です。
他にも開封確認機能など送信以外の機能が多々あり、電話での話は解りにくかったのですが営業担当の方の対応が早く、すぐに説明に来てくれて印象はいいです！
機能面でも自社にて活用できそうな機能があったので候補としました。
候補：http://www.willplace.co.jp/sms_introduction.php

―仕様―
送信：　可能
受信：　不可(オプションで可能なプランもあるとのこと)
送信元表示：電話番号などの数字
配信文字数：3大キャリア全ての端末へ330文字以内

##AOS TEXT 1-Way(AI CROSS株式会社)　<font color="red">無料トライアル中</font>
送信のみのプランで初期および月額費用なしのベーシックなプラン。
各種通知、お知らせ、督促などに多く活用されています。
こちらの他にも２つプランがあり、営業担当の方からも説明をうけたのですがちょっと難しそうな印象を持ちました。
顧客として普段から大手を相手にしているためか規模が大きな会社でないと厳しそうでした。

―仕様―
送信：　可能
受信：　不可(同社の別プラン TEXT2-Wayでは可能)
送信元表示：電話番号などの数字
配信文字数：最大70～700文字(キャリアによって異なります。)


##Media SMS(Media 4u)
長文化オプションを付けることでも制限の変化があるようです。
営業担当の方からのお話が難しい言葉を使われたりしてちょっとわからないかなぁ？という感じでしたが内容としては可もなく不可もなくという印象でしたので候補に入れました。
候補：https://media-sms.net/

―仕様―
送信：　可能
受信：　可能
配信文字数：

<dl>
<dt>ドコモ：</dt>
<dd>全角半角混合：70文字以内</dd>
<dd>全角のみ：70文字以内</dd>
<dd>半角のみ：140字以内</dd> 
<dd>[長文化オプション]　全角と半角混在：660文字以内</dd>
</dl>

<dl>
<dt>au：</dt>
<dd>140バイト以内(全角は2バイト・半角は1バイトとして判別)</dd>
<dd>[長文化オプション]　全角と半角混在：670文字以内</dd>
</dl>

<dl>
<dt>ソフトバンク：</dt>
<dd>全角と半角混在：70文字以内</dd>
<dd>全角のみ：70文字以内 、半角のみ：140文字以内</dd>
<dd>[長文化オプション]　全角と半角混在：335文字以内</dd>
</dl>

<dl>
<dt>ワイモバイル:</dt>
<dd>全角と半角混在：70文字以内</dd>
<dd>全角のみ：70文字以内</dd>
<dd>半角のみ：140文字以内</dd>
<dd>[長文化オプション]　全角と半角混在：335文字以内</dd>
</dl>

##空電プッシュ(NTTコミュニケーションズ)
高セキュリティー・高信頼性・高機能を謳っていて様々な企業で使われているSMS送信サービスです。
営業担当の方とお話ししたのですが契約が前提でないと話が進まないらしく詳細は不明でした。
大手だからか対応が横柄でしたね。。。
うちみたいな小さな会社じゃ難しいかな。。。

##SMS送信サービス(株式会社電気放送局)
24時間365日受付も対応しているため深夜に故障などのトラブルが発生しても迅速な対応をしています。
どうやらこちらはNTTコミュニケーションズの空電プッシュを利用しているようです。
大手携帯電話会社３社と直接契約をしているためクローズドなネットワークでセキュリティを高めた運営をしています」との謳い文句ですが、
某比較ランキングサイトなどでは、真相は不確かとの情報でしたので不安なところは除外し問合せを見合わせました。

―仕様―
送信：　可能
受信：　不可
配信文字数：最大70～700文字(キャリアによって異なります。)
課金条件：成功報酬
</br>
</br>
</br>
***
今回、様々なSMS送信サービス会社に問合せをしてみました。
利用料金を確認するための意味合いもあったのですが、月にどれくらいの数を送信をするか？キャンペーン中！
などなど時期や使い方によっても価格が変わってしまうため、今回は伏せています。
参考になるかどうかはわかりませんが、私のような無知な人間にふりかかる厄介な仕事を、少しでも楽にできれば喜ばしいことです！
この内容を会社の人に見られたら怒られちゃいそうですね。。。
まだ、うちは検討中の段階ですが、利用するようになりましたら使用感を報告しようかと思います。
クリックしたらクラス追加

指定された箇所をクリックしたら、指定したクラスを追加するjs

```
$('.click').click(function(){
		$('.on .txt').addClass('active');
	});
```
上記は、.clickをクリックすると

```
<div class=".on">
   <div class=".txt">　
     ここにクラス追加
   </div>
</div>
```
.txtに.activeを追加するjs
Unixコマンドメモ

編集中

| コマンド | 説明 |
|:--|:--|
| find `pwd` -maxdepth 1 | ファイル配下の絶対パス表示 |
| ll | 実行権限がどんな状態なのかを表示したい状態でファイル一覧表示する |
| \`find\` | グレイヴ・アクセントで括るとコマンド自体になる |
| pwd | 現在のパスを表示 |
| open  | ファイル開く |
| cat  | ファイル出力 |
| tar -zxvf xxxx.tar.gz | 伸張(z)して展開(x) |
|less|テキストファイルを1画面ずつ表示する|
|rm -rfv|ファイル削除　rがディレクトリ　fエラーメッセージなし v詳細|
|cp -r|コピー　rがディレクト|
|export -p|環境変数表示|
|last shutdown|シャットダウンした日付を表示|
|||

[知ると便利なヒアドキュメント](https://qiita.com/kite_999/items/e77fb521fc39454244e7)
[Macを起動した時刻やシステム終了した時刻を調べる方法](http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-show-shutdown-or-reboot-time-of-mac.html)
.stCommitMsg: No such file or directory

`git commit`しようとしたらこんなエラーが出た時の対処法

```
$ git commit
fatal: could not read '/Users/shintaro.tanikawa/.stCommitMsg': No such file or directory
```

`~/.gitconfig`の設定を削除する

```
$ git config --global --unset commit.template
```

commit成功

```
$ git commit
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean
```

おそらく前のPCから.gitconfigを直接持ってきたのが原因かも
Alexaスキルの言語追加・削除

##始めに
多言語対応だったり、Ask Cliからデプロイしたときに言語が「英語」だったりしたときに、そのスキルを使用するときの言語を追加、削除します。
例えば日本語を追加して英語を削除したり。

ここでは、Alexa Skills Kit開発者コンソール上で変更する方法を紹介します。

[Alexa Skills Kit開発者コンソール]から言語を追加（削除）する方法は以下のとおりです。
###1. 言語設定ページへ移動
左上に言語のプルダウンメニューから「言語設定」を選択してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/245438/6f161e50-be32-3e55-2106-2d0ebede1bf6.png)

###2. 言語の追加
「言語設定」のページが開くので、「新しい言語を追加」を押してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/245438/c6fd10dc-e5bb-bbde-36ac-621b40f0407e.png)

「日本語(日本)」を選択してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/245438/42a2cba6-9257-c26a-0d70-5d189f637547.png)

###3. 設定の保存
右上の「保存」ボタンを押して、設定を完了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/245438/d3cd36eb-1d03-4577-99dd-bf6b825062cf.png)
AWS EC2 上に立てた Elasticsearch の データを違う新たにマウントした新ボリュームに移行する方法

1.EBSボリュームを作成
====================

ボリュームを必要としているサーバと同じアベイラビリティゾーンに EBSボリューム を 作成してください。

![volume.png](https://qiita-image-store.s3.amazonaws.com/0/45117/6ef69f53-51d2-ac92-ca9a-dc8c962b0f50.png)


2.EC2にアタッチ
==============

ボリュームを選択して右クリックで「ボリュームのアタッチ」を選択します。

![attach.PNG](https://qiita-image-store.s3.amazonaws.com/0/45117/053316bd-329a-2c4e-b4a4-26c22fec26bc.png)


アタッチするインスタンスを選択してください。するとデバイスの部分に自動で「/dev/sd'x'」が設定されるので、そのまま「アタッチ」を押してください。

![select_instance.PNG](https://qiita-image-store.s3.amazonaws.com/0/45117/94e6969a-5a9d-238b-5227-ed85e15f62c0.png)


3.マウント作業前チェック
======================

```shell:EBSのボリュームがマウントされていないことを確認

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         3.9G     0  3.9G    0% /dev
tmpfs            3.9G     0  3.9G    0% /dev/shm
tmpfs            3.9G   41M  3.9G    2% /run
tmpfs            3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/xvda1       256G   24G  233G   10% /
tmpfs            798M     0  798M    0% /run/user/1003
```

```shell:ブロックデバイスの確認

# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  256G  0 disk
└─xvda1 202:1    0  256G  0 part /
xvdf    202:80   0  256G  0 disk ← ここに追加されている
```

```shell:ファイルの種類を確認

# file -s /dev/xvdf
/dev/xvdf: data
```

4.マウント作業
==============

```shell:ファイルシステムとしてext4を設定

# mkfs -t ext4 /dev/xvdf
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
16777216 inodes, 67108864 blocks
3355443 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2214592512
2048 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
```

```shell:マウント先ディレクトリ作成

# mkdir /mnt/vol01
```

```shell:マウント

# mount /dev/xvdf /mnt/vol01
```

```shell:マウント確認

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         3.9G     0  3.9G    0% /dev
tmpfs            3.9G     0  3.9G    0% /dev/shm
tmpfs            3.9G   41M  3.9G    2% /run
tmpfs            3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/xvda1       256G   24G  233G   10% /
tmpfs            798M     0  798M    0% /run/user/1003
/dev/xvdf        252G   61M  239G    1% /mnt/vol01
```

```shell:サーバ再起動時、自動マウント設定

# vi /etc/fstab
/dev/xvdf /mnt/vol01 ext4 defaults,nofail 0 2
```


4.Kibana, Elasticsearchの停止
=============================

```shell:停止

# systemctl stop kibana
# systemctl stop elasticsearch
```

5.データ移行
============

```shell:elasticsearchのデータ移行

# mv /usr/lib/elasticsearch /mnt/vol01/elasticsearch
```

6.移行先に参照先を変更
=====================

```shell:シンボリックリンクの作成

# ln -s /usr/lib/elasticsearch /mnt/vol01/elasticsearch
```

7.Elasticsearch, Kibanaの起動
=============================

```shell:起動

# systemctl start elasticsearch
# systemctl start kibana
```
ウェブアプリにてブラウザのフッターメニューで背景画像が崩れる

safariで確認

# ウェブアプリの背景画像を設定する

ページに大きさを固定した背景画像を設置して`height: 100%; width: 100%;`を設定。

```
background: url('example.png') no-repeat; 
background-size: 420px 750px;
height: 100%; 
width: 100%;
```

この時、背景画像の大きさは固定であり、表示する高さと幅がスマホ画面に合わせて変わり、レイアウトが崩れない！
しかし、実機で確認してみるとレイアウト崩れが、、

# 問題

フッターが表示された場合、フッターを除いた部分で`height: 100%`と認識されるため、フッターの後ろに背景が描画されていない状況になっているみたい。なので、フッターが出たり消えたりすると背景画像が一瞬映らなかったりして崩れます！

こいつが癌↓
![スクリーンショット 2018-10-22 10.39.07 1.png](https://qiita-image-store.s3.amazonaws.com/0/144904/0a359a9e-2a02-c953-80cf-b07d45ff2527.png)

# 解決策

`transform: translate(0, 0);`を足してあげます！これにより、フッターが出現してしまっても、背景画像の位置が固定できるのでレイアウトが崩れる心配がありません！

`transform: translate(0, 0);`を追記すると、フッターの高さ分も`height`に含まれるので、フッター分の高さも足してあげ、`height: 120%;`にします！
　

```
background: url('example.png') no-repeat; 
background-size: 420px 750px;
height: 120%; 
width: 100%;
transform: translate(0, 0);
```

フッターが出現してもしなくても、背景画像のレイアウト崩れがおきなくなりました！
vimの設定衝突？【私的メモ】


よくある「カーソルキーでABCDが出てくるよ問題」が発生、そういやcompatibleだったかと

```
:set nocompatible
```

を設定。
これだけで見事消えた！かとおもいきや、微妙に出てくる時がある。

おんやぁ？
いろいろ調べると

**Esc→カーソルキー** のときに出てくるよう。ちなみにマウスホイールでもEscと組み合わせると出てきた。

ということはEsc周りの設定と衝突？
確認したら

```
nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch<CR>
```

とかぶってるから？っぽい。
消してみたらABCD出てこなくなった。

`:noh` はEscにバインドしないで自分で打とうということで一旦Escバインド消して解決。
Escバインドは気をつけたほうがいいんですかね。時間ある時にもうちょっと見たい。
今は亡き漫画村にあったXSS

なんかPC漁ってたらスクショが出てきた。
<img width="688" alt="スクリーンショット 2017-11-01 6.03.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/148619/32b5ab94-47de-4522-6022-5aa302044ce9.png">

多分検索ボックスに`">
aaaaa
`を突っ込んだだけ。
他にも50音検索とランキングページとかでXSSができたみたい(汚いメモ書きしか残ってない)。
XSSフィルタを通過できるDOM Based XSSもあったぽい。

なんかに使えないかなと思ってる間に漫画村は閉鎖された。
Expo.io expo-cliコマンド覚書集 [保存版]

## モチベーション
 - リモートでreact-nativeを開発したい
 - いちいちGUIでXDEをいじるのがめんどくさい
 - gitにpushしたら自動でビルドしてURLかQRコードを返してほしい
 - 結局XDEって内部でどんなコマンド打ってるのか気になった
 - makefileとかgulpとかの前に一度expo-cliのコマンド(開発していく中で使うであろうものだけ)を一覧で書いておきたかった

## 始めていきます

### プロジェクトを始める
create-react-native-appを使う場合

```
create-react-native-app プロジェクト名
```

自分で構成を作る場合

```
expo init プロジェクト名
```

### expoにログイン、ログアウト

ログイン

```
expo login -u ユーザ名
```

ログアウト

```
expo logout
```

### expo-clientで確認したい(ビルド・デプロイ)

```
expo start プロジェクトディレクトリ
```

or

```
cd プロジェクトディレクトリ
expo start
```

デフォルトではローカルに立ち上がりますが、ここはかなり使うと思うのでいろいろオプションを載せておきます。

```
-s メールアドレス or 電話番号　# urlをそれぞれメールやSMSに送ってくれます
-c                           # キャッシュを削除して実行
-m "tunnel" or "lan" or "localhost" # 実行するスコープを選択できます。詳しくは個別のオプション参照
--tunnel                     # ネットワークの外部から接続できます。
--lan                        # LAN内から見れます
--localhost                  # 同一ネットワークからのみ接続できます
--minify                     # minifyすることで転送速度が速くなります
--dev                        # 一緒にchromeのdeveloperツールが開きます
--no-dev                     # 開きません
```

### 仲間内だけでのリリース

expo-clientからインストールするためのURLを出力します。
インストールした場合、expo-client上ではなくスタンドアローンで動きます。

```
expo publish
```

また、例のごとく```-s メールアドレス or 電話番号```で受け取れます。

### android studio, xcodeのプロジェクトにビルド

これだけで記事ができてしまいそうなのでリンクで失礼します。

[expoでdetachしてXcodeとかAndroid Studioとかでビルドしてみたりするには的なお話。](http://watanabeyu.blogspot.com/2017/09/expodetachxcodeandroid-studio.html)

### それぞれのストアにリリースするためのパッケージにビルド

IOS

```
expo build:ios
```

Android

```
expo build:android
```

  
  
以上で終わります。
また有用なコマンドがあれば追記していきます。
有識者の方、ほかにも便利なコマンドがあればご教授お願いします。

また、gulpとかmakefileとか作れたら記事にしようかなと思います。
RNの記事久々に書いた、、、。
UVa Online Judgeに挑戦してみた

いろいろありますね。

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8

「Problem Set Volumes」と「Contest Volumes」合わせて5000問くらいあるっぽい。

[Hashmat the Brave WarriorHints](https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=12&page=show_problem&problem=996)、[PDF版](https://uva.onlinejudge.org/external/100/10055.pdf) という簡単そうな問題に挑戦。そして気付いたことなど。

(1) 対応している言語が少ない

- ANSI C 5.3.0
- JAVA 1.8.0
- C++ 5.3.0
- PASCAL 3.0.0
- C++11 5.3.0
- PYTH3 3.5.1 - Python 3


(2) 行数不明のインプットがある

通常、インプットが何行か、というのがありますが、それがありませんでした。サンプルのインプットが

```
10 12
10 14
100 200
```

でした。何行あるか分からないということで、インプットのEOFが来たら～というのを調べないといけませんでした。以下、ACしたソース。

```python
# -*- coding: utf-8 -*-

while 1:
    try:
        b, c = map(int, input().split())
        print(abs(c - b))
    except EOFError:
        break
```

(3) サンプルが不親切

というか、AtCoderとかが親切なんでしょうけど。
「こんなコーナーケースも考えてる？」という意思が感じられるサンプルがあることが多く、逆に問題文の英語が良く読めなくてもサンプルのインプットケースを見ればどういう処理を書けば良いか分かることがありますが、こういうサイトの場合はそうやってSubmitすると事故る(WA)ことが多いですね。
codeforcesも不親切だし、TopCoderは親切なときと不親切な時が半々な感じ。

具体的には、

```
10 12
10 14
100 200
```

上記サンプルケースで、答えが

```
2
4
100
```

になっているので、右の数字から左の数字を引けば良いのか、問題文にも「Hashmat’s soldier number is never greater than his opponent.」(Hashmatの軍勢は敵の勢力より多いことはない)って書いてあるし。
と思って `右-左` を出力するように書いてWAを食らうという。

問題文を良く読めば、「2つの兵士数が与えられる」と書いてあるだけで、左がHashmatの兵士数で右が敵の兵士数、とは書いてないんですが。

(4) 何が悪いか分からない、自分のソースも、他人のソースも見られない

どこのケースで落ちたか出ないため、どの程度のWAっぷりなのかが分からない。
自分の提出したソースも見られない。
他の人のソースも見られない。（他人の結果は見られる）

という感じです。初めてだと、入力をどう書けば良いのかも分からない（AtCoderの「はじめてのあっとこーだー」風なものもない）ので、結構辛いです。

(5) どうやら不安定

記事を書いている最中に繋がらなくなりました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/90217/15e37d01-8c9e-bf91-7960-86c0c3136e55.png)

[どうやら私のID](https://uhunt.onlinejudge.org/id/996213)
WordPress 固定ページのみビジュアルモードを無効にする

functions.phpに以下を追記する。

```php
// 固定ページのみ ビジュアルモード無効
function disable_visual_editor_mypost() {
	global $typenow;
	if ($typenow == 'page') {
	add_filter('user_can_richedit', 'disable_visual_editor_filter');
	}
}
function disable_visual_editor_filter() {
	return false;
}
add_action('load-post.php', 'disable_visual_editor_mypost');
add_action('load-post-new.php', 'disable_visual_editor_mypost');

```