OmniAICreator/Qiita-1.07M huggingface dataset:
禁止された数字

- [禁止された数字](https://atcoder.jp/contests/abc007/tasks/abc007_4)

## 解法

- `dp[桁][A超える][B未満][4含む][9含む]`のDPを書いた
- 「4を含む」と「9を含む」を1つにまとめてもいいっぽいけど、2つに分けた方が僕はわかりやすい。



## [コード](https://atcoder.jp/contests/abc007/submissions/4297521)

- いままでループでDPテーブル初期化してたけど今回は`memset`使ってみた。`memset`は罠があった気がするけど、-1で初期化するときは特に罠はなかった気がする。たぶん

```cpp
#include <bits/stdc++.h>
using namespace std;

#define int long long

string A, B;
int dp[20][2][2][2][2]; // dp[桁][Aより大きい][B未満][４を含む][9を含む]

int rec(int digit, int moreA, int lessB, int four, int nine) {
  if (digit >= B.size()) {
    return four || nine;
  }

  if (dp[digit][moreA][lessB][four][nine] != -1) {
    return dp[digit][moreA][lessB][four][nine];
  }

  int high = (lessB ? 9 : B[digit] - '0');
  int low = (moreA ? 0 : A[digit] - '0');

  int ret = 0;
  for (int num = low; num <= high; num++) {
    int t = rec(digit + 1, moreA || num > low, lessB || num < high, four || (num == 4), nine || (num == 9));
    ret += t;
  }

  return dp[digit][moreA][lessB][four][nine] = ret;
}

signed main() {
  cin >> A >> B;
  // Aの足りない分を0で埋める
  int diff = B.size() - A.size();
  string zero = "";
  for (int i = 0; i < diff; i++) {
    zero += "0";
  }
  A = zero + A;

  memset(dp, -1, sizeof(dp));

  // 再帰に投げる
  int ans = rec(0, 0, 0, 0, 0);
  cout << ans << endl;

  return 0;
}
```





## メモ

- [トーラスさんの記事](http://torus711.hatenablog.com/entry/20150423/1429794075)
- 「B以下の場合の数 - A未満の場合の数」がで求める方法もいいと思った。けど、桁数が多いと処理がめんどくさそう。A未満はAから1引いた数だけど、桁数が多いと1引く処理がちょっとだるそう（桁数多いと文字列で処理したりするから）。
- まあ、そういう考え方もあるという感じの認識で。
tensorflowのpad_sequencesは何をするか？

# pad_sequencesは何をするか？

* [Text classification with movie reviews](https://www.tensorflow.org/tutorials/keras/basic_text_classification)の pad_sequences は何をするか？

   * 要素の合わない配列に対して、0 で埋めるなどして配列のサイズを一致させる。

   * 例
      * 入力
         * 以下のようにサイズの合わない配列を要素とする二次元配列を入力とする。

         ```python
         [[1, 2, 3], [3, 4, 5, 6, 7], [9, 10]]
         ```

      * 出力
         * 前方の要素を 0 埋めしてサイズの一致した2次元配列を返す。

         ```python
         [[0, 0, 1, 2, 3],
         [3, 4, 5, 6, 7],
         [0, 0, 0, 9, 10]]
         ```

      * サンプルコード

         ```python
         from tensorflow import keras
         output = keras.preprocessing.sequence.pad_sequences([[1, 2, 3], [3, 4, 5, 6, 7], [9, 10]])
         print(output)

         # 出力は以下
         # [[ 0  0  1  2  3]
         #  [ 3  4  5  6  7]
         #  [ 0  0  0  9 10]]
         ```

   * 各種設定
      * 穴埋めする値、前方か後方のどちらを穴埋めするか、最大サイズなどを指定できる。[マニュアル](https://keras.io/ja/preprocessing/sequence/)を参照。
Grep コマンド備忘録（基本的な操作）

# はじめに
Grep コマンドの備忘録です。完全に個人用です。

# 内容

- 再帰的検索（`-r`オプション：カレントディレクトリ以下のすべてのフォルダ内も捜査対象とする）

```bash
$ grep -r "keyword" ./
```

補足：ダブルクォーテーション「``"``」は検索文字列に含まない。``"``で必ず括る必要はない。ただし、空白を含む文字列を検索する場合はエスケープ表現で`\(半角スペース) `と書くよりも検索文字列を`"`で括った方が可読性も高まりますし、何より入力が楽でしょう。

- カレントディレクトリ以下で``c``または``h``ファイルの中で文字列"keywords"を含むファイルの検索（``-l``オプションによってファイル名までの相対パスだけをリストアップする）

```bash
$ grep -rl "keyword" ./ --include={*.c,*h}
```

補足：複数指定するときは中括弧でくくり、「``,``」で区切ること

- 指定パス以下で``html``ファイル以外で文字列``"keywords"``を含むファイルの検索（``-n``オプションで該当箇所の行番号を表示する）

```bash
$ grep -rn "keyword" ./ --exclude=*.html
```

補足：単一のファイル拡張子を検索する場合は中括弧を用いないこと

- カレントディレクトリ以下のファイル名"file"を検索する

```bash
$ find ./ file -ls
```

補足：末尾に``ls``オプションを付すことで、マッチしたファイルをリスト表示（コマンド``ls -l``）してくれる
Resources.LoadのBestPracticesの検証(Term,Unloadを理解する

[Resources.LoadのBestPracticesの検証(3,複数回読んでみる]
(https://qiita.com/tessa256/items/ae5cc80aa0a5d6306858)
の続き

---

Resources.LoadしたUnityEngine.Objectを
Resources.UnLoadの引数にしただけではダメということが分かってきたので
ここで改めてUnityAPIドキュメントを見てみる。

https://docs.unity3d.com/ja/2018.3/ScriptReference/Resources.UnloadAsset.html

・参照しているAssetのみに対して呼び出すことができる。
・解放されたオブジェクトは無効になる。

ということでResources.Loadされたものに対して対で呼ばれるメソッドではないようなので
今回は下記ソースコードで解放のテストをしてみる。

```cs:ResourcesLoaderByType.cs
using System;
using System.Collections;
using UnityEngine;

public class ResourcesLoaderByType : MonoBehaviour
{
	public enum LoadType
	{
		Order = 0,

		Sprite
	};

	// LoadTypeの定義順に合わせること
	private static readonly System.Type[] _LoadTypeTable = new System.Type[]
	{
		typeof(UnityEngine.Object),

		typeof(Sprite)
	};

	public event Action<UnityEngine.Object> OnLoadComplete;

	[SerializeField, Header("ResourcesLoadのPathを指定")]
	private string ResourcesLoadPath;

	[SerializeField, Header("指定したAssetの型を指定")]
	private LoadType AssetType;

	private UnityEngine.Object Asset;

	private IEnumerator Start()
	{
		var request = Resources.LoadAsync(ResourcesLoadPath, _LoadTypeTable[(int)AssetType]);

		yield return request;

		Asset = request.asset;

		if (OnLoadComplete != null)
			OnLoadComplete(Asset);
	}

	private void OnDestroy()
	{
		if (Asset == null)
			return;

		switch (AssetType)
		{
			case LoadType.Order:
				Resources.UnloadAsset(Asset);
				break;
			case LoadType.Sprite:
				{
					var targetObject = Asset as Sprite;

					if (targetObject == null)
						break;

					Resources.UnloadAsset(targetObject.texture);
					Resources.UnloadAsset(targetObject);
				}
				break;
		}
	}
}

```
ざっくり解説すると
１．ResourcesLoadPathに指定されたAssetをAssetTypeで指定された形式で非同期で読み込む。
２．読み込みが完了するとOnLoadCompleteが呼ばれる。
３．解放するときは指定したTypeにダウンキャストして参照しているAssetに対してUnloadAssetする。
挙動を見るために今回はSpriteのみ

注意：
・ロード中に破棄されたらどうする？等の考慮がなかったり（そもそもResourceRequestにキャンセルがない。
・ダウンキャストそのものは失敗の危険性がある。

これで例のごとくProfilerでMemory項目を見ていく。

Load時
![load.png](https://qiita-image-store.s3.amazonaws.com/0/354152/45baf058-5525-44c0-dcfa-e922f5e72c8a.png)
UnLoad時
![unload.png](https://qiita-image-store.s3.amazonaws.com/0/354152/e7943db7-f63f-4913-9e9d-e8c51c7c0915.png)

あらかじめProfileでLoadで増えたものをメモっておきそれを
Unloadで呼ぶ分には動いてる模様。

ただ
Resources.LoadがType指定で何を読み込んでいるのかを見るためには
・Profileによる目視
・Resources.Loadのソースの中身を見る
ぐらいしか思いつかないのでAssetの中でも
・画像
・サウンド
・Prtefab、component
を必要になったらLoadして必要なくなったら解放する
という用途で使用するにはかなりリスキーだと感じる。
なによりUnloadが複数呼ばないといけないのは気持ち悪い
特にPrefab、componentはspriteやaudio sourceがついている状態で
できているのが普通なのでくっついているAssetをUnloadなんてやろうものなら
解放対象のAssetを検索して消すなんてコードを足すなんてやるべきでないしやりたくない。

このメソッドの用途はここは公式の推奨に従い
・最善の方法は使わないこと

使うとしても
・ScriptableObjectを使った設定ファイルの読み込み
・最小限必要かつ変更のないデータベースのダンプの読み込み
ぐらいだろう。

ただプラットホームごとにResourcesフォルダのAssetの扱いが
ちがうのでそこはしっかり調べてから使った方がよいだろう
（マルチプラットフォームだったら使わない方がよい
Go2のジェネリクスがこうなったらいいのにという妄想を書く



https://qiita.com/lufia/items/242d25e8c93d88e22a2e
https://docs.google.com/document/d/1oCcqj9oRQepgIZi03SmcepwG-E9cUy372FOGo12jYVM/edit


上記を読んだ感想と妄想を書きます。
# ジェネリクスはinterfaceを進化させる方向で進んでほしい。

上記を読むとジェネリクスはinterfaceとは完全に独立した存在のようです。
でも、それってGoのシンプルさを殺していないかなーって思います。
だってwhileとか削ってforだけにしたりclassを作らずに済ませたりとかそういう言語仕様に痺れたんですもの。


# 本当に欲しいもの

一番の問題は``interface{}``を使わなくてはいけない状況であり、それを使わない選択肢がほしいだけなんです。


# 提案


## 演算子もinterfaceに


### +の場合

```go
interface Adder {
  func Operator+(a Adder) Adder //Operator+を満たしていれば +が利用可能に
}
```

そして組み込み型は上記interfaceを満たしているものとします。

```go
var a Adder = 1
b:= a+1
```

もちろん自作型もAdderを実装すれば加算可能になります。

他の演算子についてもinterfaceが組み込みで定義されていて、組み込み型はそれらを満たすみたいな感じにします。
そうすると自作型も演算子が使えるようになって幸せになりそうです。



## interface 合成を可能に

TypeScriptをヒントにしていますが
直和型や直積型を定義できるようにします。


```go

type interface InterfaceA {
  InterfaceAMethod()
}
type interface InterfaceB {
  InterfaceBMethod()
}

type InterfaceAandB = InterfaceA & InterfaceB　// 直積型 埋込み型のシンタックスシュガー
type InteefaceAorB = InterfaceA | InterfaceB  // 直和型

func ABTest(ab1 InterfaceAandB, ab2 InterfaceAorB) {
    if a, ok :=ab1.(InterfaceA); ok {
       if b, ok := a.(InterfaceB); ok {
          // 絶対ここに来れる。
       }
    }
    
   ab2.InterfaceAMethod() // まだab2のinterfaceは確定していないのでコンパイルエラーになる
   switch ab2.(type) {
     case InterfaceA: 
            ab2.InterfaceAMethod() // ok
     default:
            // interfaceBがかならず来る
           ab2.InterfaceBMethod() // ok
    }
}
```

こんな感じです。

## プロパティのサポート

これは必要ないかもですがあったら幸せです。

```go

interface GetterA {
  Get A() SomeInterface // a:= getterA.A のシンタックスシュガー
}

interface SetterA {
  Set A(a SomeInterface) // setterA.A = xxx のシンタックスシュガー
}
```



# まとめ

ただの妄想を書いてみました。
ジェネリクスの代わりになるかはわかんないですが、これが自分にとっての本当に欲しいものな気がします。
Railsでデータを取得するメソッドまとめ

#はじめに
これが私の初めての投稿になります。プログラミングを始めて１ヶ月ちょっとになりますが、今はRailsを中心に勉強していて、自分的に理解が曖昧になっているところがちらほらと出てくるようになりました。なので私の備忘録として記事を書いていきたいと思います。あとはアウトプットの練習ですね。今回はいくつか簡単なアプリを作成した際に、いつもデータベースから値を取り出す際にエラーを出していたのでよくわかっていなかったそこらへんについて軽く。
***
#☆複数のデータを取得☆

##.allでモデルから全件取得
まずはシンプルに全ての値をモデルから取り出すやり方。

```Ruby
class BlogsController < ApplicationController

  def index
    @blogs = Blog.all
  end
end
```
##.whereで条件にあてはまる値をモデルから全て取り出す

下記例ではtitleカラムへ"おはよう"という値が入っている記事を全て抽出する といった例になります。

```ruby
class BlogsController < ApplicationController

  def show
    @blogs_goodmorning = Blog.where(title: "おはよう")
  end
end
````
##複数の値をviewで表示する

値が複数である場合はeachメソッドなどでどれを使うか指定してあげます。

```ruby
<% @blogs.each do |blog| %>
  <ul>
     <li>タイトル:<%= blog.title %></li>
     <li>内容:<%= blog.content %></li>
  </ul>
<% end %>
```
#☆一つのデータを取得☆

##.findで特定のidの値を一つ取り出す

findメソッドで取得できる値はidのみで、以下のようなRailsのshowアクションなどでidのデータを取得するときによく使われます。

```ruby
class BlogsController < ApplicationController

  def show
    @blog = Blog.find(params[:id])  
  end
end
```

##.find_byで特定の一つの値をを取り出す
引数に指定した条件に最初に一致するレコードを取得するメソッド。
idがわかっていて、id以外（idも取得可能）のカラムデータから1つのデータを取得したい時によく使われます。
以下のようなユーザーからemailを取得したい時などに使われる。

```ruby
class UsersController < ApplicationController

  def edit
    @user = User.find_by(email: params[:email])
  end 
end
```
##idを取得した時のfindとfind_byの違い
findメソッドは、もしデータが無かった場合、エラーになります。find_byはデータが無い場合nilを返します。
Userのidが1しか存在しない前提では以下のような結果になる。

```ruby

# これは完全に同じ
@user = User.find(1)
@user = User.find_by(id: 1)

# 以下が違う！
@user = User.find(2)
#=> ActiveRecord::RecordNotFound: Couldn't find User with 'id'=2

@user = User.find_by(id: 2)
#=> nil
```
#おわりに
この他にもrailsではActiveRecordのメソッドがありますが、まずは基本的でよく使われるものを記事にしてみました。間違っていたら指摘をお願いいたします。
Docker-WordPress compose コード

## はじめに

このサンプルは、docker初学者に向けてとりあえずコピペでWordpressが動くことを確認してもらうためだけのサンプルコードになります。
実用向けではないので、その点はご注意ください。


## 参考
https://docs.docker.com/
https://docs.docker.com/compose/wordpress/


**Git管理用にvolume設定のみ編集済**


# Docker-WordPressの起動

## イメージ用置き場のディレクトリ作成

```
cd ~

mkdir docker_wordpress && cd docker_wordpress/
```


## Dockerファイルの作成

```
cat << EOF > docker-compose.yml

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
     volumes:
       - ./content/themes:/var/www/html/wp-content/themes
       - ./content/plugins:/var/www/html/wp-content/themes
volumes:
    db_data: {}
```

## ls コマンドなどで[ docker-compose.yml ]ファイルの作成を確認

```
pwd

ls
```


## 作成したファイルをもとにイメージとコンテナの作成

```
docker-compose up -d
```

## Docker のプロセス・イメージの作成確認

```
docker image ls

docker-compose ps

docker container ls
```


## アクセスの確認

```
http://localhost:8000
```

上記のURLにブラウザからアクセスすれば、WordPressの環境構築が完了です！
お疲れ様でした。


# 後片付け

## Docker のプロセスとイメージの削除

```
docker-compose down

docker rmi wordpress:latest

docker rmi mysql:5.7
```


## Docker のプロセス・イメージの削除確認

```
docker image ls

docker-compose ps

docker container ls
```


## イメージ用置き場のディレクトリ削除
<font color=red>注意！！</font>

```
rm -rf ~/docker_wordpress/

cd ~

ls
```

[ docker_wordpress ]というディレクトリが存在しなければ完了です。
Cloud9にGithubのコマンドラインツールhubをインストールする方法

# はじめに
みなさん、hubは使っていますか？

開発環境にhubがインストールされていれば、push後にpull requestを出したり、リポジトリをブラウザで開いたり、Githubに関する様々な操作が素早く行えるようになります。

僕は普段自分のMac上に開発環境を作って開発しているのです、そこには以前からhubをインストールしていたのですが、たまに利用するCloud9にはまだhubのインストールを行なっていなかったため、今日はこちらにもhubをインストールしてみました。

ざっくりこんな手順でCloud9にhubのインストールができました。


# インストール手順

- $GOPATHを設定
- hubのソースコードをgit cloneして、make install

簡単ですね！
それでは、一つ一つみていきましょう。

## $GOPATHを設定
場所はどこでも良いと思うのですが、`$HOME/dev/go`に$GOPATHを設定しました。
ちなみに`$GOPATH`をすでに設定されている場合はもちろん不要になりますので、次のステップに進んでください。

.bash_profileを開く

```bash
# bash_profileを開く
$ vim ~/.bash_profile
```
.bash_profileの末尾に下記を追加する

```bash
export GOPATH=$HOME/dev/go
```

保存したら`sourse ~/.bash_profile`で設定をロードし直すのを忘れないでください。


## hubのソースコードをgit cloneする
```bash
$ mkdir -p "$GOPATH"/src/github.com/github
$ git clone \
    --config transfer.fsckobjects=false \
    --config receive.fsckobjects=false \
    --config fetch.fsckobjects=false \
    https://github.com/github/hub.git "$GOPATH"/src/github.com/github/hub
$ cd "$GOPATH"/src/github.com/github/hub
$ make install prefix=/usr/local
```

以上です！
これでCloud9でhubが使えるようになったはずです。

hub便利！
C++ Builder XE4 > TeeChart > 軸 > 数値を指数表示する実装 | gitを使った.dfm変更の確認

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

### 概要

- 軸ラベルの数値を指数表示にしたい
    - 例: 10000 -> 10^4 (4が右上に表示、の意味)

### 参考

https://www.steema.com/support/viewtopic.php?t=16696

ただし、上記の実装はこちらの環境とは異なるため、そのままでは使えなかった。

### 調べた > gitを使った.dfm変更の確認

下記で実装方法の調査をした。

1. gitに登録
2. フォームデザインで上記のリンク先を参考に指数表示に設定
3. SmartGitで.dfm内の変更箇所の確認
4. 変更を元に戻す (他の作業に影響がないように)

下記が変更されていた部分

```.dfm
LeftAxis.AxisValuesFormat = '00e-0'
LeftAxis.LabelsExponent = True
```

これを実装すればいい。
以下となる。

```cpp
	Chart1->LeftAxis->LabelsExponent = true;
	Chart1->LeftAxis->AxisValuesFormat = L"00e-0";
```

### 実装

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

#include <vcl.h>
#pragma hdrstop

#include <DateUtils.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	addDummyData();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::addDummyData(void)
{
	// テスト用のデータをシリーズに足す

	Chart1->Series[0]->XValues->DateTime = true;
	Chart1->BottomAxis->DateTimeFormat = L"nn:ss";

	TDateTime dt;

	dt = Now();

	double yval;
	for (int idx=0; idx < 10; idx++) {
		yval = (1+ idx) % 2;
		yval *= 100000;
		Series1->AddXY(dt, yval, "", clRed);
		dt = IncSecond(dt, 1);
	}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Chart1->LeftAxis->LabelsExponent = true;
	Chart1->LeftAxis->AxisValuesFormat = L"00e-0";
}
//---------------------------------------------------------------------------

```

### 動作例

ソフト起動直後
![2019-02-17_11h26_05.png](https://qiita-image-store.s3.amazonaws.com/0/32870/fee37d8b-ac36-97f9-69c9-ae5bb2542b64.png)

Button1押下後
![2019-02-17_11h26_16.png](https://qiita-image-store.s3.amazonaws.com/0/32870/8e7f1107-0a14-1c4d-a032-e46d3434023b.png)
【Java入門】Part.0 Javaの環境をつくる 

暇なときに復習がてらちょろちょろっと書こうかなという気持ちでやっていこうと思う

# Javaを書く前に

JDKというものをダウンロードする必要があるため、まずはそれをダウンロードする

1.Oracle公式サイトへアクセスする
https://www.oracle.com/technetwork/java/javase/downloads/index.html

2.Java11.x.xにあるJDKをクリック

3.Java SE Development Kit 11.x.xにあるAccept License Agreementをクリック
  このとき、しっかりとライセンスを読んでおくこと

4.自分の使っているPCのOSに合わせたものをダウンロードする

5.指示に従ってインストールする

# 環境変数PATHを設定する

ここから先、Windows10で設定することを想定しているため、他のOSを使っている場合は、自分で検索してほしい

1.スタートメニューを右クリックし、システムをクリックする

2.システムの詳細設定をクリックする

3.環境変数をクリックする

4.環境変数のダイアログが表示されるので、システム環境変数にあるPATHを選択して、編集をクリックする

5.新規をクリックし、JDKが保存されているフォルダにあるbinフォルダを指定する

6.すべてOKをクリックして環境変数ダイアログを閉じる

# 環境変数JAVA_HOMEを設定する

環境変数JAVA_HOMEが登録されていない場合、この方法で設定する

1.システム環境変数にある新規をクリック

2.変数名:JAVA_HOME    変数値:JDKインストールパス  を入力する

3.すべてOKをクリックして環境変数ダイアログを閉じる
Gazeboでhardware_interface/PositionJointInterfaceが使えない

position_controllersを使う場合、
URDFで、

```
  <joint name="RevXXX">
    <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
  </joint>
```
を指定して
yamlで

```
Rev_position_controller:
  type: "position_controllers/JointTrajectoryController"
  joints:
    - RevXXX
```
のような指定をします（詳細は省略）。

コントローラ起動時に、次のようなエラーメッセージがでて起動できませんでした。

```
[ERROR] [1550369007.446440766]: Could not load controller 'Rev_position_controller' because controller type 'position_controllers/JointTrajectoryController' does not exist.
[ERROR] [1550369007.446630192]: Use 'rosservice call controller_manager/list_controller_types' to get the available types
[ERROR] [1550369008.448219, 0.000000]: Failed to load Rev_position_controller
```

joint-trajectory-controllerをインストールすることで解決しました。

```sudo apt-get install ros-melodic-joint-trajectory-controller```
Using html/template package at Golang

## Environmnet
```
go version go1.11.5 linux/amd64
```

## Directory Structure

```bash
/go
 └ src/
   └ sample/
     └ main.go
     └ templates/
       └ index.html
```

## Source code

```main.go
package main

import(
        "html/template"
        "log"
        "net/http"
)

func handlerIndex(w http.ResponseWriter, req *http.Request) {

        // If you know parsing template files will be successful, you can skip the error handling by using Must().
        t := template.Must(template.ParseFiles("templates/index.html"))
        /* or you can code
        t, e4t := template.ParseFiles("templates/index.html")
        if e4t != nil { log.Fatal(e4t) }
        */

        s := "Hello, world."
        e := t.ExecuteTemplate(w, "index.html", s)
        if e != nil { log.Fatal(e) }
}

func main() {
        http.HandleFunc("/", handlerIndex)
        http.ListenAndServe(":8080", nil)
}
```

```templates/index.html
<!DOCTYPE html>
<html>
        <body>
                <!-- variable expansion -->
                {{ . }}
        </body>
</html>
```

## Build & Run

```bash
cd $GOPATH/src/sample/ && go run main.go
```

Then access to localhost:8080, you can see

![スクリーンショット 2019-02-17 9.04.00.png](https://qiita-image-store.s3.amazonaws.com/0/256447/121960dc-d6e0-f84b-6691-e11d9556c1a8.png)

## If you'd like to use other template for each URI

```main.go
package main

import(
        "html/template"
        "log"
        "net/http"
)

func handlerIndex(w http.ResponseWriter, req *http.Request) {

        t := template.Must(template.ParseFiles("templates/index.html"))

        s := "Hello, world."
        e := t.ExecuteTemplate(w, "index.html", s)
        if e != nil { log.Fatal(e) }
}

func handlerInfo(w http.ResponseWriter, req *http.Request) {

        t := template.Must(template.ParseFiles("templates/info.html"))

        s := "This is an information."
        e := t.ExecuteTemplate(w, "info.html", s)
        if e != nil { log.Fatal(e) }
}

func main() {
        http.HandleFunc("/", handlerIndex)
        http.HandleFunc("/info", handlerInfo)
        http.ListenAndServe(":8080", nil)
}
```


## Refs

https://golang.org/pkg/net/http/#ResponseWriter
https://golang.org/pkg/html/template/
https://golang.org/pkg/text/template/#Must
macのpyenv環境にopnecv入れる


#環境
macOS High Sierra
バージョン10.13.4

#インストール
インストールしたい`pyenv`の環境に切り替えて、

```
pip install opencv-python
```

##確認

```
python 
```
>Python 3.6.4 (default, Feb 17 2019, 10:36:32) 
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.44.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
\>>> 

```python
import cv2
cv2.__version__
```
>'4.0.0'

インストールできた。
ビルドあると思ってたのに簡単すぎて驚いた。
Safari + contenteditable で日本語変換が二重に入力されてしまう症状の回避方法

Safari 12.0.1 で contenteditable な入力欄でキャレットの座標を取得するために空の `<span>` などをいれて node をいじると、日本語入力時の変換が二重に入力されてしまう現象に出会った。Chrome や Firefox では再現しなかった。

![dup.gif](https://qiita-image-store.s3.amazonaws.com/0/2152/c1857c55-18bc-170b-a85f-d6bdd88765d1.gif)

```vue
<template>
  <div class="content-editable-page">
    <div contenteditable="true" class="editable"
         ref="editable"
         @keyup="moveCaret"
    ><p>test</p></div>
  </div>
</template>

<script>
  import Vue from 'vue'

  export default Vue.extend({
    components: {
    },
    data () {
      return {
      }
    },
    computed: {
    },
    methods: {
      moveCaret () {
        const anchor = document.createElement('span')
        const sel = window.getSelection()
        const range = sel.getRangeAt(0)
        range.insertNode(anchor)
        const pos = anchor.getBoundingClientRect()
        anchor.parentElement.removeChild(anchor)
      }
    },
    mounted() {
    }
  })
</script>
```

良い回避方法が思いつかなかったので、IME 変換中は座標位置を取得しないように composition を見ることにした。これで二重に入力されることはなくなったが、代わりに変換中にはキャレット位置が分からないというデメリットが…。

```vue
<template>
  <div class="content-editable-page">
    <div contenteditable="true" class="editable"
         ref="editable"
         @compositionstart="compositionstart"
         @compositionend="compositionend"
         @keyup="moveCaret"
    ><p>test</p></div>
  </div>
</template>

<script>
  import Vue from 'vue'

  export default Vue.extend({
    components: {
    },
    data () {
      return {
        compositing: false
      }
    },
    computed: {
    },
    methods: {
      moveCaret () {
        if (!this.compositing) {
          const anchor = document.createElement('span')
          const sel = window.getSelection()
          const range = sel.getRangeAt(0)
          range.insertNode(anchor)
          const pos = anchor.getBoundingClientRect()
          anchor.parentElement.removeChild(anchor)
        }
      },
      compositionstart () {
        this.compositing = true
      },
      compositionend () {
        this.compositing = false
      }
    },
    mounted() {
    }
  })
</script>
```
Elixir~Enumまつり1回目~Enum.chunk_every、Enum.all?、Enum.any?、Enum.at~

#これまでのあらまし

わたしはJavaシルバー本100ページ程度の知識しかないプログラミング超初学者です。
学習効率とノリ（めちゃくちゃ失礼な本音かもしれませんが...)でElixirを選びました。
現在、Enum関数とパイプライン演算子を用いた式の書き方を猛勉強しています。

また、わたし自身音楽家であることから、"ELixirでシンセサイザーをつくる"ことを目標にしています。その見地から理解した式を音楽に例えていく芸風で記事を連ねていくことにしました。

[公式ドキュメント(英語)](https://hexdocs.pm/elixir/Enum.html#all?/2) から、ひたすらEnumの関数を上から解いてみて、理解を記していきます。

#Enum.chunk_every

```elixir
iex> Enum.chunk_every(1..100,3)
[
  [1, 2, 3],
  [4, 5, 6],
  '\a\b\t',
  '\n\v\f', 
  [13, 14, 15],
  [16, 17, 18],
  [19, 20, 21],
  [22, 23, 24],
  [25, 26, 27],
  [28, 29, 30],
  [31, 32, 33],
  '"#$',
  '%&\'',
  '()*',
  '+,-',
  './0',
  '123',
  '456',
  '789',
  ':;<',
  '=>?',
  '@AB',
  'CDE',
  'FGH',
  'IJK',
  'LMN',
  'OPQ',
  'RST',
  'UVW',
  'XYZ', 
  '[\\]',
  '^_`',
  'abc',
  'd'
]
```
この式は、"1から100のリストを3個の整数ごとにまとめて出力する"式です。
途中記号や文字化けが入っているのは残念ながら仕様だそうです。

音楽に例えるとしたら、シンセサイザーからずっと流れているオシレーターの波形を一定周期でサンプリングを取り続けるみたいなイメージかと思います。

パイプライン演算子と&記法を用いてこう書き換えることができました。

```elixir
1..100 |> Enum.chunk_every(3)
```

#Enum.all?
```elixir
iex>Enum.all?([2, 4, 6], fn x -> rem(x, 2) == 0 end)
true
```

これは、リストの中の数字を2で割ってあまりが全てゼロならtrueを返す、という構文のようです。

```elixir
iex>[2, 4, 6] |> Enum.all?(& rem(&1, 2) == 0)
```

パイプライン演算子と&記法を用いてこう書き換えることもできました。

```elixir

1..10 |> Enum.all?(& rem(&1, 2) == 0)
false
```
これは奇数があるので当然falseになりますね。

というわけで、Enum.all?は"条件に対してすべて符号する場合はtrueを返す"関数のようです。
音楽のメタファーにするなら...閾値以下の波形をすべて叩いて無音にしてしまう"ゲート"というエフェクターでしょうか。

#Enum.any?
```elixir
iex>Enum.any?([2, 4, 6], fn x -> rem(x, 2) == 1 end)
false
```
ストの中にひとつでもあまりが１になる要素があればtrueを返す、という構文でしょうか。

```elixir
Enum.any?([2,3,4], fn x -> rem(x, 2) ==1 end)
true
```
これはtrueになるので、"リストのなかにひとつでもあまりが1になる要素があればtrueを返す"、という仮定は合っているようです。

書き換え

```elixir
[2, 3, 4] |> Enum.any?(& rem(&1, 2)==1)
true
```

#Enum.at

```elixir
iex(10)> Enum.at([2, 4, 6], 0)
2
iex(11)> Enum.at([2, 4, 6], 2)
6
iex(12)> Enum.at([2, 4, 6], 4)
nil
```

これは見ていくに、リストのなかの要素をゼロから数え始めて指定の番数の値を返す、という関数のようです。ちょっとMIDIシーケンサーでこんな機能がありそうな気がします。



というわけで、ひたすらEnumの公式ドキュメントを辿って得意な音楽のメタファーを使いながら自己理解を深めていきます。

うまずたゆまず、頑張ります。
Kento Mizuno
macにpyenv入れる

[公式](https://github.com/pyenv/pyenv#basic-github-checkout)のとおりやるだけ。
手順のメモ。

#環境
macOS High Sierra
バージョン10.13.4


#インストール
1. homebrewで入れる
2. `pyenv init`を設定

##1.homebrewで入れる 

```bash
brew update
brew install pyenv
```

##2.`pyenv init`を設定
設定しないと`pyenv`のコマンドが見つからない。

>環境変数`BASH_ENV`が`.bashrc`を向いているシステムでは変な挙動する可能性あるので、そういうシステムでは`.bash_profile`に書く。

という注意があったがmacは普通に`.bash_profile`に書けばいい

```bash
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
```
これは`.bash_profile`の最後に書くこと。
`bash_rc`はbashを起動する度、`bash_profile`はログイン時に実行なので、`bash_rc`に書いてもいいような気がしたが、`bash_profile`じゃないとコマンドが効かなかった。


###確認

```
pyenv versions
```
>\* system (set by /Users/user/.pyenv/version)

OK。デフォルトでシステムのpythonが選択されている。

##pythonインストール

```
pyenv install -l
```
>  3.6.4
  3.6.5
  3.6.6
  3.6.7
  3.6.8
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.8-dev

`-dev`ってなんなんだろう。
今は`3.6.4`にする。

```
pyenv install 3.6.4
```
debianだといつもパッケージたりないエラー出たが今回は一回で入った。
globalで`3.6.4`使うことにする

```
pyenv global 3.6.4
```
確認

```
python
```
>Python 3.6.4 (default, Feb 17 2019, 10:36:32) 
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.44.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
\>>> 

3.6.4になった。
AppStoreにないアプリをインストールできるCydia Impactor

# AppStoreにないアプリをインストールできるCydia Impactor
iOSのアプリは通常、AppStoreからダウンロードされますが、自分のパソコンからサイドロードという方法でインストールできるそうです。

# 必要なもの
- Cydia Impactor
脱獄で有名なCydiaの開発者が作ったソフトで、各プラットホーム用に用意されてます。
[Cydia Impactor](http://www.cydiaimpactor.com/)からダウンロードできますが、下記からも最新バージョンがダウンロードできます。  

    - [MacOS](https://cydia.saurik.com/api/latest/1)
    - [Windows](https://cydia.saurik.com/api/latest/2)
    - [Linux32](https://cydia.saurik.com/api/latest/4)
    - [Linux64](https://cydia.saurik.com/api/latest/5)

- Appleデベロッパアカウント
年間**$99**の有料アカウントと**無料**のアカウントがあり、サイドロードしたアプリの署名の有効期限が有料アカウントでは365日ですが、無料アカウントだと7日に制限されます。
無料アカウントの取得はメールアドレスを用意して**Apple ID**を作成して**Apple Developer**にアクセスします。  
[メルアドぽいぽい](https://m.kuku.lu/index.php) 等でメールアドレスを作ります。
[Create Your Apple ID](https://appleid.apple.com/account#!&page=create) でApple IDを作成します。
[Apple Developer](https://idmsa.apple.com/IDMSWebAuth/login?appIdKey=891bd3417a7776362562d2197f89480a8547b108fd934911bcbea0110d07f757&path=%2Faccount%2F&rv=1#/welcome) にサインインして下記の内容にチェックを入れて[Submit]をクリックします。

    - [x]  By checking this box I confirm that I have read and agree to be bound by the Agreement above.  
[Submit]  
機械翻訳:「このボックスをチェックすることにより、私は上記の契約を読み、それに拘束されることに同意することを確認します。」

- ipaファイル
ipaファイルとはアプリ本体で、脱獄ツールなどは各開発者から配布されています。

# インストール方法
パソコンにiOSデバイスを接続して行います。
1. パソコンでCydia Impactorを起動します。
2. ipaファイルをドラッグ&ドロップします。
3. AppleIDとパスワードを入力します。
4. インストールが成功すればホーム画面にアイコンが追加されます。

# インストールできる最大数
下記のサイトによると１アカウントで3アプリまでしかサイドロードできないみたいです。

[Cydia Impactorで使用できるアプリケーションとデバイスの最大数](https://yalujailbreak.net/maximum-apps-devices-impactor/)

# エラー
エラーは以下のサイトにまとめられてます。

[Cydia Impactorの使用時に発生するエラーまとめ](https://i-bitzedge.com/jailbreak-news/cydia-impactor-error-list)
picoCTF 2018 Truly an Artist - Points: 200

#問題

https://2018game.picoctf.com/problems

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/12e64de5-71df-6a43-f367-695ddfbbc90e.png)

#解いてみた

添付ファイルをダウンロードしてみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/2b3f38fd-25bc-288d-6cad-3b1194972bb5.png)

下の数字がちょっと気になります。
サクラエディタで開いて「picoCTF」で検索。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/e623d8e9-e932-cf4b-537e-bf033b4a40e8.png)


あった。。。
picoCTF 2018 Secret Agent - Points: 200

#問題

https://2018game.picoctf.com/problems

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/4250f2e2-826c-cab1-eb05-b5c5e3f239b4.png)

#解いてみた

リンクにアクセスしてみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/840ba9db-7f87-7f27-29ea-5a8363848fad.png)

flagボタンを押してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/07664a08-7bac-715e-123c-5e038c10f4ea.png)

ユーザーエージェントが出てきました。
今の自分のユーザーエージェントは何なんでしょう。

確認くんで見てみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/e1c152e0-7cd1-1e3d-f939-aa69025d011a.png)

さっき書かれたものと一緒でした。
ということはこれ以外の何かにすればflagがもらえそうです。

とりあえず注意書きに書かれていたGoogleにしてみますか。
F12　→　Network　→　Network conditions
から変更します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/49d2ab79-334b-42ef-e891-5947c168aa7d.png)

これでflagクリック。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/52245219-39b0-f069-3055-14e095941a3e.png)

これではないみたいですね。
Firefoxで見てみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/164313ec-3d27-4b59-25cf-0007177d3785.png)

ダメです。
Edgeでやってみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/31d6729a-3649-e2ba-7b54-d03eb1248d69.png)

ダメです。

flagへの通信をwiresharkで見てみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/b07f7bc3-4513-063e-d960-bfa17dcb5b1b.png)

とくにヒントなさそうです。
ヒント見てみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/643790ba-e6d3-8fbd-dd08-bb776c71e582.png)

やはりUAを何かに編集するということでしょうか。
Googleが使用するユーザーエージェントを検索してみます。
[Google のクローラ（ユーザー エージェント） - Search Console ヘルプ](https://support.google.com/webmasters/answer/1061943?hl=ja)

ここに書いてあるユーザーエージェントを片っ端から。。。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/17681/8313945d-fd10-288a-775d-62ed76036591.png)

できました。
#Github #API で特定レポジトリの Issues の一覧を得る。Webブラウザからもアクセス可能で認証必要なし。


# URL

こんなん

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

ブラウザからアクセス可能

![image](https://user-images.githubusercontent.com/13635059/52906947-7fae6a00-329a-11e9-8e63-0bd25303857a.png)

# Script

特に意味はないけどpythonで
curl叩くのと変わらない

```py
import requests, os

owner = os.environ.get('OWNER')
repository = os.environ.get('REPOSITORY')
url = 'https://api.github.com/repos/' + owner + '/' + repository + '/issues'

print(url)
res = requests.get(url)

print(res.json())
```


# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
VisualStudio2018 と VisualStudioCodeの並行開発

# フロントはVueを利用。バックエンドは.netcore web APIで実装

ユーザー認証あり
画面は20画面程度
データベースあり
データベースを基にエクセルデータの生成する
などの要件があり、VUE-CLI3.0を利用してフロントの作成、エクセル生成があるので、ClosedXMLを利用する.netcore2.2のバックエンドにしました。

Microsoftの出しているVisualStudioでのVue開発情報もあるのですが、”可能である”というだけでvue開発効率の良さを発揮するわけではない。
VisualStudio2018でVueのSFC単一ファイルコンポーネントや分離コンポーネントの作成も試用してみましたが手間のわりにはいまいちです。一番はテストが行いにくかったのでNGにしました。

フロントはvue-cli3.0＋visualStudioCodeです。情報たくさんあるのでそちらを参考にしてみてください。
CLIでは全部入りで行います。ページが5ページ超えるかつ設計しながら実装するなら遅かれ早かれ全部入りになると思います。
[Visual Studio Code] でMarkdownのサンプルを書く

Qiita投稿やGithubのREADMEなどを書くのにMarkdownで書く必要があるため練習として書いてみました。
※原文を参照したい場合は右上の歯車マークをクリックして見てください。

環境

* Visual Studio Code
* Markdown All In One(拡張機能)

![vscode.png](https://qiita-image-store.s3.amazonaws.com/0/256143/821fdb81-c0d2-9dbf-6eca-8161c231a51f.png)

見出し（#の数が1つでH1~Hnとなる）

# 見出し1

## 見出し2

### 見出し3

---

**太字**

**太字失敗 **   (スペースが入ったらだめ)

※Markdown All in Oneを入れていれば「Ctrl+B」

---

*Italic123*

*斜体日本語はダメ？123*

---

~~取り消し線~~

---
線を引く

---
***

* 箇条書き
* * 箇条書き
* 箇条書き
* * 箇条書き
* * * 箇条書き
* * * 箇条書き

---

1. 数字付き1
1. 数字付き2
1. 数字付き3

---

> 引用
>> 2重引用
>>> 3重引用

---

テーブル

コロンの位置で文字寄せ位置を設定
| 左寄せ | 右寄せ | 中央寄せ | デフォルトは左寄せ |
| :----- | -----: | :------: | ------------------ |
| 1左    |    1右 | 1真ん中  | 1.1左              |
| 2      |      2 |    2     | 2.2左              |

---

リンク

[Yahoo Japan](https://www.yahoo.co.jp/) 

[Yahoo Japan](https://www.yahoo.co.jp/ "Yahoo Japanですよ") 
ポップアップ文字列指定

↓の場合はURLに名前付けして再利用できる

[Yahoo]:https://www.yahoo.co.jp/ "ヤフージャパン"
[Yahoo] Japan

[Yahoo] 再利用



---

メールアドレス

<address@example.com>

---

折りたたみ

<details><summary>サンプルコード</summary><div>

```rb
puts 'Hello, World'
```
</div></details>

---

コードブロック1(インデントが必要):

    var hoge = 0;

---

コードブロック2（Qiitaでは言語を指定してシンタックスハイライトが利用できる）

```c#:qiita.cs

var fuga = 1;

```

---

コード

Use the `printf()` function.

---

チェックボックス

- [ ] タスク1
- [x] タスク2

---

絵文字

[絵文字チートシート](http://www.emoji-cheat-sheet.com/)

:expressionless:

---
## Visual Stuido Codeでの見え方

![vscode.gif](https://qiita-image-store.s3.amazonaws.com/0/256143/f76ffb44-5eb7-8a2f-c7f9-bcbbe6068bcc.gif)

## 参考

[Markdown All in One のショートカットとコマンド](https://qiita.com/taquaki-satwo/items/36021f23f15005fd1976)

[Markdown All in One -Marketplace-](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)
XcodeとAndroid Studioのショートカットキー比較(Mac)

Android Studioを使う方向けに比較しています。

|Xcode|Android Studio|説明|
|:---|:---|:---|
|⌘R|^D|デバッグ開始|
|⌘.|⌘F2|デバッグ終了|
|⌘\\(⌘⌥¥) or 行番号Click|⌘F8 or 行番号の右をClick|ブレークポイントの設定/解除|
|F6|F8|ステップオーバー(メソッドに入らない)|
|F7|F7|ステップイン(メソッドに入る)|
|-|⌥⌘L|コードの整形|
|-|^⌥O|インポートの並び替え|
|⌘/|⌘/|コメントアウト/イン|
|⌥⌘/|/**, Enter|ドキュメンテーションコメントの挿入|
|^⌘← or 2本指で左にスワイプ|⌘[|前に戻る|
|^⌘→ or 2本指で右にスワイプ|⌘]|次に進む|
|^⌘J or ^⌘Click|⌘Click|定義へ移動|
|^1, Callers|⌥F7|変数やメソッドなどの呼び出し元を表示|
|右Click, Find Call Hierarchy|^⌥H|メソッドの呼び出し元を階層で表示|
|⌘⇧F|⌘⇧F|グレップ|
|⌘⇧O|⇧, ⇧|Open Quickly(Search Anywhere)|
|⌘L|⌘L|指定行へジャンプ|
|⌘W|⌘W|タブを閉じる|
|^⇥|^→|右のタブへ移動|
|^⇧⇥|^←|左のタブへ移動|
|⌥Click|^J|ドキュメントの表示|

タブ移動はデフォルトのショートカットキーだとMac標準と重複するので使えません。。

## 参考リンク

- [キーボード ショートカット  |  Android Developers](https://developer.android.com/studio/intro/keyboard-shortcuts?hl=ja)
- [【Android Studio】ショートカット大好き人間がおくるショートカット集【IntelliJ IDEA】 - Qiita](https://qiita.com/arai-wa/items/b0957d042c479577e8e3)
- [XcodeとVisual Studio 2010のショートカットキー比較 - Qiita](https://qiita.com/uhooi/items/0060ffc0c57ebee7cab3)
Log4netでAzure Application Insightsにログを出力する

## 概要
Log4netを使ってAzure Application Insightsにログを出力する方法のメモ書きです。

## 環境
IDE:VisualStudio 2015以上（それ以前でも大丈夫かも）

## 手順

前提条件：プロジェクトのAzure Application Insightsの連携設定が終わっていること。

1. Nugetパッケージマネージャーコンソールで下記パッケージをインストールします。

    ```powershell:パッケージマネージャーコンソール
    Install-Package log4net
    Install-Package Microsoft.ApplicationInsights.Log4NetAppender
    ```

2. プログラムの最初のほうで log4net.Config.XmlConfigurator.Configure()　を呼び出します。

3. あとは通常のLog4netと同じ使い方でApplication Insightsにトレースログが出力されます。

4. Application Insightsポータルの検索機能で出力されたトレースログを検索して確認できます。実行中に監視する場合は、ライブストリームにログが出力されます。

## 注意点
- Application Insightsにログを出力すると、関連情報も一緒に出力されるため、ログの出力回数はできるだけ少なくしたほうが良いです。（複数の情報を出力する場合、複数回出力するのではなく1つにまとめてログの書き込み回数を少なくしたほうが良い）

- Application Insightsはデフォルトでサンプリングが有効になっている場合があるので短期間に大量のログを出力するとサンプリングされる可能性があります。すべてのログを出力したい場合はサンプリングしないように設定、構成して下さい。  
参考：[Application Insights におけるサンプリング](https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/sampling)
Raspberry pi 3 に Windows on ARM(WoA) をインストールしてみた（起動しました）

#Raspberry pi 3 に Windows on ARM(WoA) をインストール

##0.追記：感想
　使ってみて。実用的とかそういう方向性ではない。
　ただ、raspberry piでフルスペックのwindowsが、間違いなく動くことに、ある種の感動を覚えた。もともとwindowsは、アーキテクチャ依存ではない、ということは理解しているつもり。それでも、intel(AMD)以外で、実用的に普及するのはARM64が初めてだろう。
　持ち歩きが可能なほど軽量で、十分な性能があり、インターネットに常につながっている。バッテリーも十分な時間、持続する。そういうノートPCやタブレットが、遠からず登場する。そのことを、実感を伴って確信することができた。

##0.アップデート2019.02.23
1. windowsのビルド1803で、以下の手順通りで起動成功しました。
![rpi3b.png](https://qiita-image-store.s3.amazonaws.com/0/176228/f7c9a101-d92b-36b3-fe85-a294d677a4b4.png)

2. アプリのWOA Deployer for Raspberry Pi 3 は、ver2.0 にアップデートされています。
私の環境では、起動ドライブも表示されるようになってしまいました。操作ミスが怖いですね。
私はこのバージョンは、まだ試していません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/55da4faf-6bc6-ddc2-f878-1bcbdb71689b.png)

##WoA Installer for Raspberry Pi 3 でSDカードにインストールする

###【本編】全体の流れ
1. 全体の流れはこのページのとおり
https://github.com/WOA-Project/WOA-Deployer-Rpi

###WoAの作成
2. まず、WoAのisoイメージを作成するためのスクリプトをダウンロードする。以下のとおり。
https://github.com/WOA-Project/WoA-Installer-Rpi/blob/master/Docs/GettingWoA.md
![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/ae02781b-2a92-b11d-8f09-3255a11cb38f.png)


3. ダウンロードしたcreatingISO_17763.292_ja-jp_arm64_Professional.cmdを実行すると、
17763.292.190115-1726.RS5_RELEASE_SVC_PROD2_CLIENTPRO_OEMRET_A64FRE_JA-JP.ISO
が作成される。



4. .ISOをダブルクリックしてマウントしておく。
が作成される。
###WINDOWS ON ARM INSTALLER FOR RASPBERRY PI の準備

1.[ここ](https://github.com/SuperJMN/WoA-Installer/releases/download/v1.2/WoA.Installer.for.Raspberry.Pi.zip)からダウンロードする。.zipを解凍して実行する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/7fb25921-e402-efa5-373b-d6b367eef888.png)
2.コアパッケージを[ここ](https://1drv.ms/f/s!AtXoQFW327DIyMxxCDU_uUM6o6dn2A)からダウンロードしておく。
3.インストーラーのAdvancedから、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/bc89b01d-d670-ce90-fcc2-57d139736ee0.png)
コアパッケージを読み込む
![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/b9636bcc-80e0-6383-a4da-db36d190ef0b.png)
4. Windows deploymentに戻る
![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/a4ee6198-6630-f964-8326-8ffb072f7897.png)
5. 書き込むドライブと、.wimファイル（さっきisoをマウントしたなか）を指定する。![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/8fcb2170-030b-ebc5-207d-184bcae4d484.png)
6. 約30分でマイクロSDカードが完成する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/1e1a54cc-6b74-c391-91ef-fc67f96ee906.png)
7.ラズベリーパイ起動時の操作手順が表示される![image.png](https://qiita-image-store.s3.amazonaws.com/0/176228/d6944c08-0d29-d543-7e4b-9deb0576f85d.png)

###Raspeberry pi をWoAで起動する
1. 先ほどの手順通り、起動する。
2. 約30分後に、ブルースクリーンから自動的に再起動する。
3. 更に10分後に、もう一度ブルースクリーンから自動的に再起動する。
4. 数分後、キーボードの選択画面になる。つまり、約1時間放っておけばよい。
5. キーボードの選択画面で、**USBキーボードもマウスも認識せず、先に進めません。**＼(^o^)／オワタ

##どなたか続きをお願いします。
jsdoとライバルの比較

#概要

jsdoが、落ちる（安定しない）ので、代わりを探す旅。

#似た様なサービス比較

| サービス名 | qiita|fork | webworker|getusermedia |バージョン管理|画像アップロード|プライベート|ランキング表示|gist連携|readme|IE11|
|:----------|:---:|:---:|:----:|:------------:|:--------:|:-------:|:------:|:-----:|:----:|:-----:|:----:|
| codepen   |  ○|○|×  | ○ | × | 有料 | 有料 |  ○ |  ○ |  ○ |  × |
| jsfiddle  |  |○|×  | ○ | ○ | 有料 |  有料 |  × |  ○ |  ○ |  × |
| jsbin     |  |×|×  | × | ○ | ×     |  ×   |  × |  × |  × |  ○ |
| plunker   |  |○|○  | × | ○ | ×      |  ×   |  × |  × |  ○ |  ○ |
| jsdo      |  |○|○  | × | × | ○      |  ○   |  ○ |  × |  ○ |  ○ |

#plunker試して見た。

- githubでログイン。やっと、embededをforkできた。

#jsbin試して見た。

- githubでログイン。バージョンが、消せなくて嫌。

#jsfiddle試して見た。

- ログイン無しで、出来た。戻るボタンで戻ったら、消えた。gistが、実行できるそうだ。偉い。

#codepen試して見た。

- githubで、freeでログイン。gist連携、zipダウンロードある。プライベートは、見つからない。



以上。
AzureWebAppsでサーバー上のファイルを確認する

## 概要
Azure Web Appsにデプロイしたアプリのサーバー上のファイルを確認する方法のメモ書きです。
うっかりローカルに吐き出したログの回収や、tmpフォルダの削除漏れで容量を圧迫してしまった場合などに使えます。

## 手順

1. Azure Portalで該当のApp Serviceを開きます。
2. 開発ツール＞高度なツール→移動をクリックすると、Kuduというツールの画面が開きます。
3. Debug ConsoleからコマンドプロンプトまたはPower Shellでサーバー上のファイルを直接操作することができます。（※一部使用できないコマンドがあります。）
4. また上部のエクスプローラー的なメニューから直接ファイルをダウンロード、編集、削除することができます。
 
## 注意点

- dirコマンドで表示される空き容量は仮想マシン全体の空き容量であり、割り当てられたクォータの空き容量ではありません。ここで容量が空いているように見えても、実際は残っていない場合があります。割り当てられたクォータの空き容量はAzure PortalのApp Serviceプラン＞クォータから確認して下さい。
C++ Builder XE4 > TeeChart > 軸 > 軸タイトルと数値を非表示にする (グラフ領域を変更せずに) > 色を変える

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


### 概要

- 軸タイトルと数値を非表示にしたい
- TeeChartの機能を使うと、非表示になった領域を埋めるためにグラフ領域が拡張される
    - グラフ領域を固定化できない
- 色を変えることで対応する

### 実装

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

#include <vcl.h>
#pragma hdrstop

#include <DateUtils.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	addDummyData();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::addDummyData(void)
{
	// テスト用のデータをシリーズに足す

	Chart1->Series[0]->XValues->DateTime = true;
	Chart1->BottomAxis->DateTimeFormat = L"nn:ss";

	TDateTime dt;

	dt = Now();

	double yval;
	for (int idx=0; idx < 10; idx++) {
		yval = (1+ idx) % 2;
		Series1->AddXY(dt, yval, "", clRed);
		dt = IncSecond(dt, 1);
	}
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
	// 軸ラベルのタイトルと数値を見えなくするため色を変える
	Chart1->Axes->Left->Title->Font->Color = Chart1->Color;
	Chart1->Axes->Left->LabelsFont->Color = Chart1->Color;
}
//---------------------------------------------------------------------------

```

### 実行例

起動直後
![2019-02-17_08h45_51.png](https://qiita-image-store.s3.amazonaws.com/0/32870/81f62777-1b33-77d2-4773-88d5f9a7b205.png)

Button2押下後
![2019-02-17_08h45_57.png](https://qiita-image-store.s3.amazonaws.com/0/32870/4f5cc5b1-67a3-edb0-dd88-2b8521e13fb9.png)
oh my fishをインストールしたら「Do you have an accidental infinite loop?     and __original_fish_user_key_bindings」というエラーがでた

##エラー内容
```
The function call stack limit has been exceeded. Do you have an accidental infinite loop?
    and __original_fish_user_key_bindings
        ^
in function '__original_fish_user_key_bindings'
	called on standard input

in function '__original_fish_user_key_bindings'
	called on standard input

# これが永遠に続く
``` 

## 結論
どうやらinit.fishが2回呼ばれてしまって、ループが起きている模様。
.config/fish/config.fish　に書いてあるinit.fishを削除することで解決。



## 手順
1つめ` .config/fish/config.fish `

```
# Path to Oh My Fish install.
set -gx OMF_PATH $HOME/.local/share/omf

# Customize Oh My Fish configuration path.
#set -gx OMF_CONFIG $HOME/.config/omf

# Load oh-my-fish configuration.
source $OMF_PATH/init.fish # <-ここ

set fish_theme agnoster
```

 ２つめ　`.config/fish/conf.d/omf.fish`

```
# Path to Oh My Fish install.
set -q XDG_DATA_HOME
  and set -gx OMF_PATH "$XDG_DATA_HOME/omf"
  or set -gx OMF_PATH "$HOME/.local/share/omf"

# Load Oh My Fish configuration.
source $OMF_PATH/init.fish
```

確かに２回initされている。

[ここ](https://github.com/oh-my-fish/oh-my-fish/issues/465)を見ると、`.config/fish/conf.d/omf.fish`がおすすめのやり方で、` .config/fish/config.fish `はもう必要ないとのことだった。
` .config/fish/config.fish `のinit.fishの部分を消したところ解決。

## 参考
https://github.com/oh-my-fish/oh-my-fish/issues/465
RustでChromeを操作する

# TL;DR

[rust-headless-chrome](https://github.com/atroche/rust-headless-chrome)を動かしてみた、という話です。

[Puppeteer](https://pptr.dev/)を使えば同等のことはできるし色々と道具も揃ってはいるのですが、せっかくRustからChromeにWebSocketでつなぐインターフェースを作ってくれた方がいらしたので、試しに触ってみました。

# テスト用のcrateを作る

Rust使いにはおなじみのやつです。

```
> cargo init headless_chrome_test --bin
```

# Cargo.tomlを編集

これもまたおなじみのやつです。
dependenciesにheadless_chromeを追加します。
failureも後々使いたいので、ついでに追加しておきます。

```toml:Cargo.toml
[package]
name = "headless_chrome_test"
version = "0.1.0"
authors = ["Yuki Mitsui"]
edition = "2018"

[dependencies]
headless_chrome = "0.1.1"
failure = "0.1"
```

# サンプルを動かす

[rust-headless-chrome](https://github.com/atroche/rust-headless-chrome)に掲載されているテスト用のコードは「こんな感じで書くんだよ！」と書かれてはいますが、実際に動かすにはもうひと手間かける必要があります。とはいえ`main()`を足したりするだけなので、これもおなじみのやつです。

Windowsで試してみたので、バイナリのパスを変更しています。

Issuesを見ると、将来的には動作している環境にあわせてデフォルトのパス名をある程度変更してくれるつもりはありそうでした。

`headless: true`にすると`wait_for_element()`で固まってしまったので、`headless: false`にしています。

```rust:main.rs
use std::result::Result;
use failure::Error;
use headless_chrome::browser::{Browser, LaunchOptions};

fn main() -> Result<(), Error> {
    let browser = Browser::new(LaunchOptions {
        headless: false,
        path: "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
        ..Default::default()
    })?;

    let tab = browser.wait_for_initial_tab()?;

    tab.navigate_to("https://www.wikipedia.org/")?;
    tab.wait_for_element("input#searchInput")?.click()?;

    tab.type_str("WebKit")?;
    tab.press_key("Enter")?;
    tab.wait_for_element("#firstHeading")?;

    assert_eq!(true, tab.get_url().ends_with("WebKit"));
    Ok(())
}
```

# 動かす

`cargo run`しましょう。`headless: false`を指定しているので、WikipediaにアクセスしてWebKitを検索している様子が見て取れます。
Next.jsとReduxを連携させたいときはcreate-next-appを使うと便利

Next.jsを初めて使った時にReduxとの連携方法が分からず、Next.jsの公式リポジトリを参照しているとサンプルプロジェクトとしてNext.jsとReduxを連携させたものがありました。

そこを見ながら手入力で連携させていくのも良かったのですが、`create-react-app`的なコマンドでそのサンプルプロジェクトを自分のプロジェクトの雛形にする方法があったのでメモします。

## create-NEXT-app(not create-REACT-app)

Next.jsにはReactの`create-react-app`に似た`create-next-app`というライブラリが存在します。

[segmentio/create-next-app(GitHub)
](https://github.com/segmentio/create-next-app)

このコマンドを使うとNext.jsプロジェクトの雛形を生成できるが、`--example`オプションを使うと先に述べたNext.jsのサンプルプロジェクトを含めた雛形を作ることができます。

```terminal:素のNext.jsの雛形を作成
npm install -g create-next-app // create-next-appをOSにインストール

create-next-app my-app // 雛形を作成

cd my-app 

npm run dev // プロジェクトを起動！
```

```terminal:Reduxと連携済のNext.jsの雛形を作成
npm install -g create-next-app // create-next-appをOSにインストール

create-next-app --example with-redux my-app // Redux付きで雛形を作成

cd my-app-with-redux

npm run dev // プロジェクトを起動！
```

素のNext.jsの方ではreduxとの連携はもちろん行われておらず、`pages`ディレクトリにはindex.jsがあるだけです。

しかしreduxと連携済の方にはルートディレクトリにstore.jsが存在しており、`pages`には`_app.js(全体構成の設定用ファイル)`が作られていて、コードを見るとReduxに接続するためのコードが記述されています。

```react:_app.js
import App, { Container } from 'next/app'
import React from 'react'
import withReduxStore from '../lib/with-redux-store'
import { Provider } from 'react-redux'

class MyApp extends App {
  render () {
    const { Component, pageProps, reduxStore } = this.props
    return (
      <Container>
        <Provider store={reduxStore}>
          <Component {...pageProps} />
        </Provider>
      </Container>
    )
  }
}

export default withReduxStore(MyApp)
```

ここをスタート地点にすれば、Reduxの連携に手を煩わせることなくコーディングを進めることができますね！

### その他のexampleについて

`create-next-app`では`with-redux`サンプルに限らず、他にもたくさんあるサンプルプロジェクトを使って雛形を作ることができます。

Next.jsの公式サンプルプロジェクトは以下から参照可能です。

https://github.com/zeit/next.js/tree/master/examples/

利用したいサンプルプロジェクトのディレクトリ名を`--example`オプションの後ろにつけることで利用することができます。
とあるエンジニアの問題意識 2019-02-16

# プログラミング言語どれを覚えるか。



いろいろ使えた方が良い。

学習だと思うと大変だが、使える道具が増えると思うと面白い。

料理人でも何種類の包丁も用意する。

小刀や牛刀も。

プログラマは自分をシェフだと思うと良い。

#エンジニア <https://t.co/Ihb1P7Z1k4> <http://twitter.com/YumaInaura/status/1096542553443262464>

# 給与公開誰もしない問題。



僕は自分の給与をTwitterでつぶやいたりブログに書いたりした事はあった。

だが会社的にはよろしくない。

人事評価にも響きかねない。

これは戦争で言うなら情報戦の世界。

自分の身を危険にさらしてまでなかなか言えない。

#エンジニア <https://t.co/PHSw0Kee1i> <http://twitter.com/YumaInaura/status/1096545196592910336>

# プログラマの世界は売り手市場だと言う。



しかしこのビックウェーブに誰もが乗っているわけではない。

年齢の問題。

会社の給与体系は基本的に変わらない問題。

キャリアアップを真剣に考える人が勝つ。

業界のためにもなる。

だが僕のようにぬるま湯につかる人間が多いほど全体が損をするかな。

#エンジニア <https://t.co/KrIeCnW5Jm> <http://twitter.com/YumaInaura/status/1096546249782681600>

# 株式会社抽象。



3年半前にみなしごを拾ってもらった。

心からの感謝。

それからというもの子供はそれなりに頑張ったが親に認められなかった。

子の頑張りが足りなかったのだ。

親子契約の5年間を前に放逐の日は来るか。

こう語るとなんともわびしいもの。

この物語はフィクションであり一切の… #エンジニア <http://twitter.com/YumaInaura/status/1096552004560740352>

# ロジカルシンキングを覚えるならエンジニアになるのが1番早い。



僕も職業由来で習慣がついた。

たとえば電車での通話や独り言はなぜ耳に障るのか。

それは話し相手の声が他の人に届かず脳が混乱するから。

そんなことを会社のエンジニアと話していた。

なかなか楽しい世界。

僕らは雑学生成機。

#エンジニア <https://t.co/fyuJxROXI5> <http://twitter.com/YumaInaura/status/1096598176545394688>

# 就職転職の話を見るとすぐに自分の業界に照らし合わせて考えてしまう。

一般化してしまう。

だが大元がどの業界の話なのか。

どの業種の話なのかは考えたい。

企業は一般的にキャリアの空白期間を嫌うというが、例えばゲーム会社のシステムエンジニアという特性で考えるとどうなんだろう。

#エンジニア <https://t.co/Z9D6FryTv3>




# プログラミングのコツ。

ものすごく涼しくて静かな場所に行く。

カフェのざわめきも良いが集中力の担保には静音レベルが重要だ。

エネルギー状態が高いときにはどこでもプログラミングできる。

だがナイーブな時、肉体の繊細さが現れているときは、それに合わせて環境を選ぶ。

切実さ。

#エンジニア <https://t.co/jApZnwWdXI>

# プログラマにビールは必要か。

イエス。

#エンジニア <https://t.co/kd8VD5ljvH>

# どうにかプログラミングのストレスを減らしたい。

体力が弱っていると5分PCを触るだけで途方もなく疲れる。

少しずつしか歩めない。

呼吸法を工夫したりするがどうにも。

睡眠が大事なのはわかるが。

何とかTwitterでつぶやく程度のストレスレベルまで低減できないか。

方法はまるでわからない。

#エンジニア <https://t.co/ARQVnAjjZ9>

# プログラミングと呼吸法。

自律神経のリズムに合わせればストレスを最小化できるはず。

ものすごく、ものすごく体を上手に使う必要がある。

自分で驚くほど身体的な自己洞察力を上げる必要がある。

繊細な体なのでボディハックを最大化。

エンターキーも優しく打つ。

#マインドフルネス #エンジニア <https://t.co/jjNYFfPGuC>

# 1日の終わり。

タリーズの片隅に素晴らしい場所を見つけ、この時間帯にプログラミングがようやく面白くなる。

自分の想像以上に、刺激全般に対して過敏なのかもしれない。

光や音や温度。

なおかつ自覚症状がないのが深刻だ。

綱渡りをするようにいのちを守ろう。

#聴覚過敏 #エンジニア <https://t.co/TewjWuLulu>

# エンジニアはhello worldを習うのに挨拶が言えない。

なぜなのか。

それは人間関係が別言語だから。

C言語でhello worldを書くのに無限の苦労があるように。

挨拶ひとつでも言語習得のコストはあまりにも高い。

学習コストの高いプログラミング言語ningenkankei。

略してn10i。

#エンジニア @aoirubygirl <https://t.co/SikbalplZe>

# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->