OmniAICreator/Qiita-1.07M huggingface dataset:
Angular 日付のフォーマット

## はじめに
Angularにて日付を扱う機会が増えてきたのでまとめてみます。
ミスあるかと思います。ご指摘大歓迎です。


## テンプレート(HTML)内で日付フォーマット
template で日付フォーマットを扱う場合、Angular標準パイプの`DatePipe`を使用するのが一般的かと思います。
構文は`datetime | date:format`です。
`format`は省略可能ですが、localeに関わらず日付の位置が固定化されてしまうため、できるだけフォーマット指定をおすすめします。

```app.component.ts
export class AppComponent {
  public now = new Date();
}
```
```app.component.html
<div>現在時刻：{{now | date:"yy/MM/dd HH:mm"}}</div>
```

## コンポーネント(component.ts)内での日付フォーマット
### その１
Angular全バージョンで共通して使えるのは、`@angular/common`にある`DatePipe`を使う方法です。
以下の手順で日付のフォーマットを行います。
1. app.module.tsの`providers`にDatePipeを追加
2. 使用したいコンポーネントにDIする
3. `transform(date, format)`関数で日付をフォーマットする

```app.module.ts
import { DatePipe } from '@angular/common';
@NgModule({
  providers: [ DatePipe ]  // 1
})
```
```app.component.ts
import { DatePipe } from '@angular/common';

export class AppComponent {
  constructor(
    public datePipe: DatePipe  // 2
  ) {
  }

  public alertNow() {
    let now = new Date();
    alert(this.datePipe.transform(now, "yy/MM/dd HH:mm"));  // 3
  }
}
```

### その2
Angular6の場合、`DatePipe`の関数を直接使うことができます。
※`app.module.ts`の設定も不要です

```app.component.ts
import { Component, OnInit, Inject, LOCALE_ID } from '@angular/core';
import { formatDate } from '@angular/common';

export class AppComponent {
  constructor(
    @Inject(LOCALE_ID) private locale: string
  ) {
  }

  public alertNow() {
    let now = new Date();
    alert(formatDate(now, "yy/MM/dd HH:mm", this.locale));
  }
}
```

## 参考文献
[StackOverFlow:Angular - Use pipes in services and components
](https://stackoverflow.com/questions/35144821/angular-use-pipes-in-services-and-components)
[Qiita:Angularのパイプをモデル内で使う](https://qiita.com/daikiojm/items/a28db195381dfbfebd07)
【Flow】React Native styleのtypeは？

## 背景 
styleはオブジェクトだとして`Object`を定義しがち。

```js
type Props = {
  style?: Object,
};
```

## 脱Object

各Styleのtypeは以下からimportできる

```js
import type {
  ViewStyleProp,
  TextStyleProp,
  ImageStyleProp,
} from 'react-native/Libraries/StyleSheet/StyleSheet';
```
[このIssue](https://github.com/flow-typed/flow-typed/issues/631)のこの[コメント](https://github.com/flow-typed/flow-typed/issues/631#issuecomment-411071838)と、この[コメント](https://github.com/flow-typed/flow-typed/issues/631#issuecomment-426737331)を参考にパターン洗い出し。


#### パターン1) importする

```js:importして使用する
import type {
  ViewStyleProp,
  TextStyleProp,
  ImageStyleProp,
} from 'react-native/Libraries/StyleSheet/StyleSheet';

type Props = {
  style?: ViewStyleProp,
};
```

#### パターン2) importなし

```js:importなし
type ViewProps = React.ElementProps<typeof View>;
type ViewStyleProp = $PropertyType<ViewProps, 'style'>;
```

#### パターン3) declsに展開
decls(declarations)に展開しておいて、使用する。 ([declarationsについて](https://flow.org/en/docs/libdefs/), [外部宣言ファイルの読み込み](https://qiita.com/kinzal/items/0498064bdabbfd70855e#%E5%A4%96%E9%83%A8%E5%AE%A3%E8%A8%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF))
declsでは当然Reactをimportしなければパターン2のように宣言できないので、importしてdeclare定義する

```jsx:decls定義)
import type {
  ViewStyleProp,
  TextStyleProp,
  ImageStyleProp,
} from 'react-native/Libraries/StyleSheet/StyleSheet';

declare type $styles = ViewStyleProp;
declare type $textStyles = TextStyleProp;
declare type $imageStyles = ImageStyleProp;
```

これでStyleの型定義ができました。

### 参照
> flow-typed issue https://github.com/flow-typed/flow-typed/issues/631
住所入力欄を適当に分けると痛い目に合う話

よくあるやつ。
Webの問い合わせだったり受発注だったりの受付フォームで住所を入れる項目があるけど、あれ事細かに分かれてる場合ありますよね、あれは良くないと思った。

# 結論：これでいいのでは

自分ならこうする。

* 都道府県（プルダウン必須）
* 市区町村・番地（テキスト必須）
* 建造物名・部屋番号（テキスト任意）



# 何の話

今あるWebアプリの住所入力欄が

* 都道府県（プルダウン必須）
* 住所1（テキスト必須）
* 住所2（テキスト任意）

っていう入力欄になっていて、それぞれの項目に入っている内容が、レコードごとにバラバラになってる

# 何が起きたか

例えば、住所の入力されるパターンとして

* 住所1：市区町村　番地　建造物名　部屋番号 / 住所2：空欄
* 住所1：市区町村　番地 / 住所2：建造物名　部屋番号
* 住所1：市区町村 / 住所2：番地　建造物名　部屋番号
* 住所1：市区 / 住所2：町村　番地　建造物名　部屋番号

みたいなことになる。

ひどいパターンになると、

* 住所1：市区 / 住所2：番地

みたいなエラーデータを誘発する。
この話に関しては今回言いたいことからは外れるのでこれ以上は書かない。

ここで問題になるのが、例えば戸建ての住所で

* 住所1：市区町村 / 住所2：番地

になった場合の住所2の扱い。

例えば、「2000-10-1」のようなデータが入ったとしよう
そして顧客管理部門の人間はコンピュータに不慣れなのでExcelでデータを管理したいと言い出したとしよう

察しのいい人はお分かりと思う

Excelが得意げに日付データとして解釈し、うまく動かない（＝住所へ送付物を出そうとしたのにあて先不明のオンパレード）となるのだ

これに限らず、数字記号のみのデータの形式を勝手に解釈して入れ込んでしまうトラブルは山のようにあると思う。
機能単体で見ると便利なんだけど、こういう場合は悪さをした話しか聞かないのはなんでだろう。

あとこのWebアプリをこの設計にしたやつはちょっとそこに正座しよう。おじさん怒らないから。
ROSのcatkin_makeで特定パッケージをビルドから除外する

英語で調べればROS Answersで速攻見つかりますが日本語の情報はすぐに引っかからなかったので一応メモ程度に．

特定パッケージの除外用オプションに関しては以下のページに書いてあります．
[How to exclude one package from the catkin_make build? - ROS Answers](https://answers.ros.org/question/54181/how-to-exclude-one-package-from-the-catkin_make-build/)

```bash
$ catkin_make -DCATKIN_BLACKLIST_PACKAGES="foo;bar"
```

除外したいパッケージをブラックリスト登録することでcatkin_make時に無視されるようになります．
;区切りで複数パッケージを選択可能です．
ここではfooとbarをビルド対象から除外しています．

メタパッケージ単位でGitリポジトリを作ってグループメンバー間で共有していると，自分がいじらないパッケージのライブラリが入っていなくてコンパイルが通らないことがままあります．
かと言ってコンパイル時だけそのパッケージを移動させてGitにコミットする時だけ戻すのも面倒……という場合に重宝するかと思います．
WebサイトのWebP対応の結果→画像ファイルサイズが62.38%削減

小規模なウェブサイトでWebP対応を行うためのシェルスクリプトを作成し、

[3ファイルでできるサイト全体の自動的なWebP対応](https://qiita.com/miyanaga/items/94b5bb42501e2292fb67)

自社の2サイトで試験的に稼働させています。

* アイデアマンズ株式会社 https://www.ideamans.com/
* アイデアマンズブログ https://blog.ideamans.com/

どのくらいのファイルサイズ削減に繋がったか、レポートを作成したので共有します。

<img width="626" alt="Webサイトの画像をWebPに変換した成果.png" src="https://qiita-image-store.s3.amazonaws.com/0/35178/32e1ff09-3231-5895-efc8-8e5e36c9887d.png">

Qiitaで[まだGoogleデータスタジオはまだ埋め込みができないみたい](https://qiita.com/i-ryo/items/865113a1c4876a024b9e)なので画像ですが、こちらでどなたでも閲覧できます。

https://datastudio.google.com/u/0/reporting/18R8iCxEQFM5D2rEBpIcC8pNTo288yd7P/page/c1Oa

# 概要

**全体で-62.38%**という大きな削減に繋がりました。

Jpegは-67.92%、PNGは-41.37%です。やはり非可逆圧縮をしたJpegの方が大きくファイルサイズを削減していますが、PNGは可逆圧縮にも関わらず、ここまで削減できているのは驚きです。

分布を見ると、PNGは元のファイルサイズとWebPのファイルサイズがほぼ線型の相関になりました。ファイルサイズをどのくらい削減できるか予測ができそうです。

一方、Jpegはかなりばらつきがありますが、PNGの圧縮率を下回ることはほとんどないようです。

# サイトのWebP対応はするべきか

WebPは2018年10月現在、対応ブラウザは国内シェアを考えると実質Chromeのみです(Operaファンのみなさんスミマセン…)。Edgeが次のバージョン(18)で対応するようです。

https://caniuse.com/#feat=webp

PCブラウザでのChromeのシェアは大きく、Android端末はほぼすべてがそうだと考えると、過半数を上回るサイトも少なくないと思います。

それらのブラウザしか恩恵を受けることができませんが、自動化して手間がかからなければもちろん、やらないよりやった方がよいでしょう。
汎用のMakefile ー これひとつで手間いらず ー

Makefileを書くのはめんどいがIDEをいちいち起動するのもタルい…とゆう問題意識を俺はこの２０年余りずっと持ち続けてきた。実に四半世紀近くにも渡る苦悩の日々であったのだが、先日インターネットをだらだら見ていたところ、g++/clang++のオプション指定で依存関係ファイルを自動生成しMakefileを汎用化している人を発見したのだった。すげー。

【Makefile】依存関係を自動生成する試み2014
https://td2sk.hatenablog.com/entry/20141213/1418429143

残念ながら俺のパチョコン(OS X 10.13.6)ではこのMakefileは正常に動作しなかったが、暇にまかせ自分で試行錯誤してみた結果まあまあ望み通りのものができたので以下にご紹介。

	CXX = g++
	
	FLGS = -std=c++14
	CXXFLAGS = $(FLGS) -g -Wall -W
	
	LDFLAGS =
	LDLIBS =
	
	OUT_DIR = out
	OUT_FLGS = $(FLGS) -O3 -DNDEBUG
	OUT_LDFLGS = $(LDFLAGS)
	OUT_LDLIBS = $(LDLIBS)
	
	################################################################
	
	SRCS = $(wildcard *.cpp)
	DEPS = $(SRCS:.cpp=.d)
	EXEC = $(shell basename `pwd`)
	CXXFLAGS += -MMD -MP
	OBJS = $(SRCS:.cpp=.o)
	OUT_SRCS = $(addprefix $(OUT_DIR)/, $(wildcard *.cpp))
	OUT_OBJS = $(addprefix $(OUT_DIR)/, $(SRCS:.cpp=.o))
	
	.PHONY: debug
	debug: $(EXEC)
	
	$(EXEC): $(OBJS)
		$(CXX) -o $(EXEC) $(LDFLAGS) $(OBJS) $(LDLIBS) 
	
	-include $(DEPS)
	
	.PHONY: clean
	clean:
		rm -f $(EXEC) $(OBJS) $(DEPS)
		rm -f $(OUT_DIR)/$(EXEC) $(OUT_OBJS)
	
	.PHONY: release
	release: $(OUT_DIR)/$(EXEC)
	
	$(OUT_DIR)/$(EXEC): $(OUT_DIR) $(OUT_OBJS)
		$(CXX) -o $(OUT_DIR)/$(EXEC) $(OUT_LDFLGS) $(OUT_OBJS) $(OUT_LDLIBS) 
	
	$(OUT_DIR):
		mkdir -p $(OUT_DIR)
	
	$(OUT_DIR)/%.o: %.cpp %.o
		$(CXX) $(OUT_FLGS) -c -o $@ $<

基本的な使い方は上記のコードをMakefileという名前のファイルにしてC++のソース群と同じフォルダに置く。コーディングが済んだらコマンドラインからmake(またはmake debug)と入力！するとフォルダと同じ名前の実行ファイルができあがる。楽チンw

最適化した実行ファイルを得たいときはmake releaseと入力するとoutというフォルダに出力される。またmake cleanと入力すると中間ファイルおよび実行ファイルを消去する。

注意点としてmakeはタブ文字以外のインデントを受け付けないので、上記のコードをテキストエディタに貼り付けた後にスペース文字のインデントをタブ文字に変換する必要がある。

欠点はソースファイル・中間ファイル・依存関係ファイル・実行ファイルがみんな同じフォルダにゴチャッと混ざること。これは上述のコンパイラオプションとの兼ね合いでこうなったのだが、改善の余地があるかもしれない。

カスタマイズは基本シャープ文字の横線より上の部分だけを編集する。参考までに、俺の環境でPython3.7を組み込みたい時のカスタマイズ例は以下のようになる。

	CXX = g++
	
	FLGS = -std=c++14 -I/Library/Frameworks/Python.framework/Versions/3.7/include/python3.7m
	
	CXXFLAGS = $(FLGS) -g -O0 -Wall -W
	
	LDFLAGS = -L/Library/Frameworks/Python.framework/Versions/3.7/lib
	LDLIBS = -lpython3.7m
	
	OUT_DIR = out
	OUT_FLGS = $(FLGS) -O3 -DNDEBUG
	OUT_LDFLGS = $(LDFLAGS)
	OUT_LDLIBS = $(LDLIBS)

いじょう
数学教材＠中学

#中学数学教材
[高校数学教材](https://qiita.com/WaterIsland/items/365bb0b9ab7bee696302)で呻きつつ。中学教材にも手を出そうという今日。
徒然なるままに投稿して行きますよ。


#中１

#中２
[二次関数（凸方向，広がり方）](https://ggbm.at/pbddszmt)

#中３
Python3のマイナーバージョンが競合し、venv内のコードが実行できなくなった場合の対処法

# 環境
Python 3.7（元々インストールしていたバージョン）
Python 3.6.7rc2（今回、後からインストールして競合の原因となったバージョン）

# いいわけ
どうしてもマシン本体にPython3.6をインストールする必要があったんです。。。

# 対処法
1. コードが動いていた時に使用していたバージョンのPython（今回で言うところのPython3.7）でvenv環境を再構築する。（例：$ python3.7 -m venv venv37）
2. 作成し直した環境をactivate（例：$ source ./venv37/bin/activate）し、で動かなかったソースコードを実行する。（例：python -m src.hist）
3. 神に感謝する。

以上。
gitlabにVMを認識させる

####1.cloneしたい階層の1つ上の階層に.sshディレクトリを作成
```
mkdir .ssh
```

####2.git clone するために公開鍵をgitlabに登録する
```
ssh-keygen
```
.ssh配下で↑をたたいて、何か聞かれたらEnter押下(おそらく3回

.ssh配下にid_rsa(秘密鍵) id_rsa.pub(公開鍵)が作成される

catでid_rsa.pubを開いて中身をコピー

gitlabにログイン

ProfileSettingsからSSH Keysタブ開く

Keyにコピーしたid_rsa.pubの中身を貼る

任意のTitle入力してAdd key

##3.cloneする
```
git clone -b ブランチ名 git@xxx.xxx.xxx.xxx..git ブランチ名
```
iOSで「ホーム画面に追加」はPWACompatを使うのが良さそうだよ(2018/10時点）

# はじめに

Reactのチュートリアルでいろいろ遊んでいたのですが、iOS(iPhone)のSafariでは「ホーム画面に追加」を押してもAndroidのようにアイコンとかうまく設定してくれないようです。
[PWACompat](https://github.com/GoogleChromeLabs/pwacompat)を使うと、iOSで動くようにタグを色々追加してくれそうなのでやってみました。

# 注意

2018/10月時点の情報です。iOSでの対応が進めば不要になる可能性が高いと思われます。

# 設定方法

manifest.jsonは、チュートリアルのままです。

```
{
  "short_name": "React App",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    }
  ],
  "start_url": "/",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}
```

index.htmlにPWACompatを組み込んでいきます。追加するのは2点です。

```
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>React Test</title>
    <link rel="manifest" href="manifest.json">
    <link rel="manifest" href="manifest.webmanifest" />
</head>
<body>
<div id="app"/>
<script type="text/javascript" src="/index.js"></script>
<script async src="https://cdn.jsdelivr.net/npm/pwacompat@2.0.6/pwacompat.min.js"
    integrity="sha384-GOaSLecPIMCJksN83HLuYf9FToOiQ2Df0+0ntv7ey8zjUHESXhthwvq9hXAZTifA"
    crossorigin="anonymous"></script>
</body>
</html>
```

逆にするとmanifest.webmanifestが404エラーになりますのでこの順番は重要です。

```
<link rel="manifest" href="manifest.json">
<link rel="manifest" href="manifest.webmanifest" />
```

# 結果

おお。追加されてますね。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/57686/61b5dccc-21ce-ade9-7bdf-e5cb590300ca.png)

あとは「ホームに追加」を押せばデスクトップにアイコンができているはずです。

<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/57686/77944d12-81d0-513b-5a37-11a79b3dc549.png">

起動すると、ブラウザのバーとかがなくなっているはずです。

<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/57686/844c8e98-9706-c781-a9d6-03aa5538d2c9.png">

# ソース

Reactのtutorialに少し手を加えたものを置いておきます。

`npm i`→`npm run build`→`npm start`すれば動くようにしてあります。

https://github.com/uzresk/react-tutorial

# 参考

* [ReactTutorial](https://reactjs.org/tutorial/tutorial.html)
* [PWACompat](https://github.com/GoogleChromeLabs/pwacompat)
AnyConnect で毎回接続するのが面倒になったので自動化した

# AnyConnect
VPNツールです。

起動のたびに、接続先とパスワード入力を求められれて面倒くさくなってきたので自動化しました。
※MacOS Mojaveにて動作確認

この自動化にあたり以下のサイトを参考にさせて頂きました。
ありがとうございます。
https://qiita.com/arks22/items/a792d9d43d913c373520
https://qiita.com/mamohacy/items/bcd3f575a9555d2f18a4
https://qiita.com/naname/items/3e69efb187be22109c69

## やりたかった事
会社支給のPCは、外出先でモバイルルータを使用する場合はAnyConnectで接続しろとのお達しが・・・
でも起動のたびに、接続先とパスワード入力を求められるのを解消したかった。

## やった事
AnyConnectへ接続／切断するスクリプトと、
接続状態を確認してAnyConnectの使用可否を判断するスクリプトの
３つを作りました。

あとはmacのplistを使用して、ネットワーク環境の変化を監視と
変更がある場合に接続確認のスクリプトを呼び出す様にしました。

## ソースコード
https://github.com/himitsudesu/wifi_switch

## インストール
1. ~/bin へ全てのファイルを保存
2. wifiswitch.sh のconfig を自分の環境に合わせて変更
3. 追加したファイルへ実行権を追加
4. .bashrc へ環境変数を追加

## インストール詳細
###wifiswitch.sh の変更
自分の環境に合わせて更新

```
# VPNを使用するネットワーク環境
use_vpn="Automatic"     <- 多分そのままで動く

# 自動接続しないSSID
exclude_ssid="mywifi"   <- 除外したいSSIDを記載　　複数SSIDには未対応
```
### 実行権の追加
以下のコマンドを実行

```
cd ~/bin
chmod +x anyconnect.sh
chmod +x wifiswitch.sh
chmod +x anyconnect_disconnect.sh
```

### 追加する環境変数
.bashrc に追加
1. VPN_ANYCONNECT_ADDR : AnyConnectで使用する接続先
2. VPN_ANYCONNECT_USER : AnyConnectで使用するユーザ名
3. VPN_ANYCONNECT_PASS : AnyConnectで使用するパスワード


### plistファイルの作成
plist ファイルを作ってネットワークの切り替えを監視
※ホームフォルダは、自分の環境に合わせて書き換えが必要

* ~/Library/LaunchAgents/github.com.himitsudesu.wifiswitch.plist

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
          "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>github.com.himitsudesu.wifiswitch</string>
    <key>ProgramArguments</key>
    <array>
      <string>/bin/bash</string>
      <string>--login</string>
      <string>/Users/himitsudesu/bin/wifiswitch/wifiswitch.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
    <key>StandardOutPath</key>
    <string>/dev/null</string>
    <key>WatchPaths</key>
    <array>
      <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
      <string>/Library/Preferences/SystemConfiguration/preferences.plist</string>
    </array>
  </dict>
</plist>
```

# 参考URL
com.apple.airport.preferences.plist
機械学習でいわれる教師なし学習とは

# 教師なし学習

入力データから規則性など探しだし知識を抽出する方法。教師あり学習とは違い出力データを入れない。そのためどういった結果がでるかはわからない。
特徴量の表現やデータのスケールは機械学習モデルの性能に大きく関係してくる。今回はそのデータの変換方法についてまず大きく２種類紹介、１つ目がデータセットの教師なし変換、２つ目がクラスタリングアルゴリズムである。


## ・教師なし変換
もとのデータを変換して、人や他の機械学習アルゴリズムによりわかりやすいデータ表現をつくるアルゴリズムのこと。

１、次元削減


もっとも一般的な利用方法。たくさんの特徴量で構成されるデータを可視化するために二次元に減らす要約方法をみつける。

２、トピック抽出

文書データなど個々のタスクから未知のトピックを見つけ出して学習する。ソーシャルメディアの話題解析などに向いている。


## ・クラスタリングアルゴリズム

データを似たような要素から構成されるグループに分けるアルゴリズム。例えば写真データより似た顔でグループ分けし、整理できたりする。


# 便利なアルゴリズム
機械学習においてデータの理解は大変大事な点。その理解を深めるためにデータを可視化できるようにしたり、圧縮したりとデータを変換する際便利なアルゴリズムを４つ紹介。


## ・主成分分析（PCA）
主成分分析（PCA）とはデータセットの特徴量を統計的に関連しないように回転し次元削除を行う手法。データを変換して散布図を可視化する。分散が小さい成分を落とし主成分を残し、データを説明する際重要な特徴量だけ抜き出す。

## ・非負値行列因子分解（NMF）
主成分分析（PCA）と同じく有用な特徴量を抽出する目的のアルゴリズム。NMFでは係数と成分が常に０以上であることが求められる。
組み合わされたデータを作り上げているもとの１つ１つの成分を特定することができる。


## ・多様体学習
主に可視化に用いられる。多様体学習の一つ、tーSNEアルゴリズムはデータの空間の点の近さだけを使い二次元表現を見つけようとする。多様体学習は訓練データの新しい表現を計算するけれど、新しいデータを変換することはできないためテストセットに適用することはできない。

## ・クラスタリング
データセットを「クラスタ」と呼ばれるグループに分割する。ここのデータポイントにその点が属するクラスタを表す数字を割り当てる。下記の３つの使い分けが大事となる。

### １、k-meansクラスタリング
もっとも単純でもっとも広く用いられているクラスタリングアルゴリズム。データの領域を代表するようなクラスタ重心を見つけようとする。


### ２、凝集型クラスタリング
個々のデータポイントをそれぞれ個別のクラスタとして開始し、もっとも類似したクラスタを併合していく。これを終了条件まで繰り返す。

### ３、DBSCAN

このアルゴリズムの利点としてはユーザがクラスタ数を先験的に与える必要がないこと、またどのクラスタに属さない点を判別できることである。k-meansクラスタリングや凝集型クラスタリングよりも遅いが、大きなデータセットにも適用できる。


k-means、凝集クラスタリングはクラスタの数が指定できる。DBSCANは近接度を指定し間接的にクラスタサイズを制御できる。３つそれぞれの長所は異なる。k-meansはクラスタの特徴を表すことができ、個々のデータポイントより成分分解としても使える。凝集型クラスタリングはデータの階層的な分割候補をすべて提示できる。DBSCANはどのクラスにも属さないノイズを検出できる。またクラスタの数を自動的に決められる。

データから”意味”を見出すために重要な手法である。

次回は特徴量エンジニアリングにうつります。


### 参考文献
・Pythonではじめる機械学習ーscikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
（著者　Andreas C.Muller、Sarah Guido 発行所　株式会社オライリー・ジャパン）
Pixel Format Identifiers

#Pixel Format Identifiersの列挙ケース名
デバッグの際に、深度情報の画素形式識別子(Pixel Format Identifiers)をprintすることがある。
しかし、そのままでは数字の羅列で意味がわからない。

よく使う列挙ケース名と識別番号をメモとしてここに残す。

```swift:
kCVPixelFormatType_DisparityFloat16 = 1751411059
kCVPixelFormatType_DisparityFloat32 = 1717856627
kCVPixelFormatType_DepthFloat16 = 1751410032
kCVPixelFormatType_DepthFloat32 = 1717855600
```

```swift:
print(self.depthData?.depthDataType)//Optional(1751411059)
print(self.depthData?.availableDepthDataTypes)//Optional([1751411059, 1717856627, 1751410032, 1717855600])
//→現在使用している深度情報の画素形式識別子はkCVPixelFormatType_DisparityFloat16であるが、
//kCVPixelFormatType_DisparityFloat16,kCVPixelFormatType_DisparityFloat32,
//kCVPixelFormatType_DepthFloat16,kCVPixelFormatType_DepthFloat32
//の４種類なら使用可能である

self.depthData = self.depthData!.converting(toDepthDataType: kCVPixelFormatType_DepthFloat32)
print(self.depthData?.depthDataType)//Optional(1717855600)
```
#参考文献
[Apple Developer  Pixel Format Identifiers](https://developer.apple.com/documentation/corevideo/1563591-pixel_format_identifiers?language=objc)
SambaでVMのディレクトリをエクスプローラから参照する

####1.sambaのインストール

```
sudo apt-get install -y samba
```
####2./etc/samba/smb.confを編集
```
[share]
path = <your VM workspace>
writable = yes
create mode = 0644
directory mode = 0644
```
末尾に↑を追加
※workspaceの例　home/akane/work

####3.Sambaにユーザを追加する
```
pdbedit -a <user name>
```
※user name はログインするときのアレ

####4.Samba再起動
```
systemctl restart smbd
```

####5.エクスプローラからアクセス
```
\\<your VM address>\share
```
Windowsでパスが長すぎでファイル削除できない

#1,管理者権限で「PowerShell」を開く

#2,下記のコマンドを打つ

    robocopy empty_dir will_delete_dir /purge

#3,説明

robocopy:windowsバッグアップ用コマンド
empty_dir:任意空ファイル
will_delete_dir:削除したいパスのルートパス
/purge:ファイルとディレクトリ削除の設定

#4,例 "C:\workspace\03_workapp\51_sub"の配下を全部削除したい場合は

    robocopy C:\temp C:\workspace\03_workapp\51_sub /purge
styled-components v4の新機能まとめ

先日、[styled-components v4](https://medium.com/styled-components/styled-components-v4-new-final-finalest-for-real-final-final-psd-fa4d83398a77)がリリースされました。
主なリリース内容は以下のものです。
- パフォーマンス向上
- `createGlobalStyle`API
- `as`prop
- `Comp.extend`の削除
- React v16のStrictMode準拠
- React v16の`ref`のサポート

`as`めっちゃ便利

## パフォーマンス向上
内部メモリの最適化やリファクタリングなどにより、16.1kBから15kB未満になり、コンポーネントのマウントは最大25%、再レンダリングは7.5%のスピードアップを実現しています。

## `createGlobalStyle`API
以前の`injectGlobal`は、動的なアップデートができない、ホットリロードに対応していない、コンポーネントとして利用できないと言った問題がありました。
新しい`createGlobalStyle`は、Reactのコンポーネントツリーに組み込むことができ、これにより動的なアップデート、ホットリロードが可能になり、他のstyled componentと同じようにツリーの中に組み込むことができます。

```javascript
import { createGlobalStyle, ThemeProvider } from "styled-components";
// Global styles but theme- and update-able!
const GlobalStyle = createGlobalStyle`
  html {
    background: ${p => p.backgroundColor};
    color: red;
    font-family: ${p => p.theme.fontFamily};
  }
`;
export default function App() {
  return (
    <ThemeProvider theme={{ fontFamily: "Helvetica Neue" }}>
      <GlobalStyle backgroundColor="turquoise" />
    </ThemeProvider>
  );
}
```

## `Comp.extend`の削除
ラップされたstyled componentは自動的に折りたたまれて、1つのコンポーネントだけがレンダリングされるようになりました。
以前は`Comp.extend`APIによって、拡張しているコンポーネントがstyled componentであることに基づいて最適化が行われていたのですが、`styled(StyledComp)`が自動的に同じような最適化を行ってくれるようになったため、`Comp.extend`は不要になり削除されました。

## `as`prop
実行時に動的にレンダリングされるものを変更するための`as`propがネイティブサポートされました。
どういうことかと言うと、`as`propで指定することによって他のHTMLタグでもスタイルが適用できます。

```javascript
import styled from "styled-components"
import { Link } from "react-router-dom"
// <Component /> renders a div to the DOM
const Component = styled.div`
  color: red;
`
<Component>Hello World!</Component>
// But we can also make it render any other HTML tag or component!
<Component as="span">Hello World!</Component>
<Component as={Link} to="home">Hello World!</Component>
```

## React v16のStrictMode準拠
React v16の`StrictMode`に対応しました。
StrictModeはアプリの潜在的な問題を検出するために追加されたコンポーネントです。
https://reactjs.org/docs/strict-mode.html
しかし、これによってv15以下のサポートは外さなければならなくなりました。

## React v16の`ref`のサポート
React v16で、`React.forwardRef`APIにより、`innerRef`が廃止されるため、それに対応しました。
https://reactjs.org/docs/forwarding-refs.html

```javascript
import styled from "styled-components"
const Component = styled.div`
  color: red;
`
// Later in your render function
<Component ref={element => { this.myRef = element; }}
```
Epson BT-350 Update Toolを起動したら「このアプリケーションのサイドバイサイド構成が正しくないため～」と言われた時の対処

## 状況
Epson BT-350 Update ToolのBT-350UpdateTool.exeを起動したところ以下のエラーが発生しました。

> このアプリケーションのサイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーションのイベント ログを参照するか、コマンド ライン ツール sxstrace.exe を使用してください。

## 対処

「Visual C++ 2008 Express Edition」のインストールで解決しました。

下記のページより「vcsetup.exe」をダウンロードし、インストール
http://go.microsoft.com/?LinkId=9348304

## 参考
【雑記】.exe を起動したら「このアプリケーションのサイド バイ サイド構成が正しくないため～」と表示された時の対応方法 - コガネブログ
http://baba-s.hatenablog.com/entry/2018/04/11/120000
Flutter 雑感


# 概要

Flutterをさわりはじめて一ヶ月程度、2,3個の単純なアプリを作ってみたので雑感を書いておこうと思います。

執筆時点での手元の環境は以下。

```
$ flutter --version

Flutter 0.9.4 • channel beta • https://github.com/flutter/flutter.git
Framework • revision f37c235c32 (3 weeks ago) • 2018-09-25 17:45:40 -0400
Engine • revision 74625aed32
Tools • Dart 2.1.0-dev.5.0.flutter-a2eb050044
```

# Dartは基本的に素晴らしい。が、少々オッサンくさい

先に述べておきますが圧倒的Dartファンです。

7,8年前にGoogleがJavaScriptを再発明すると言ってDashを公開したときから熱視線を注いでいました。当時、Android開発をJavaで書きつつ、これからはDashに移行していくんだろうと強い期待を寄せました。

ところが一向に「その時」は訪れず、そうこうしている間にSwiftやらKotlinなどモダンな言語が現れ[*1](#追記)、自分のなかでもDartは完全に忘れ去られた存在となっていました。

こうして再びDartを書けるとは思ってもみませんでした。

その間、Dartは2.0となりStreamやFutureなど新しい機能が取り込まれています。構文もnew不要でインスタンス生成ができるなど他のモダン言語を必死でキャッチアップしようとする姿勢に好感が持てます。

一方でセミコロンが必須だったり、null safetyが存在しなかったりレガシー感というかオッサン臭さがあるのも事実です。こうしたマイナスポイントはDart2.5や3.0などで解消してくれると嬉しいですね。

# 世界はWidgetでできている

基本的にあらゆるものがWidgetを継承します。ボタンやテキスト、レイアウトやマージン、グリッド、画面そのものもWidgetで構成されます。

Unityに置きかえるとGameObjectに相当するでしょうか。
Flashに置きかえるとDisplayObjectに相当...いや、やめよう。

# そこにはLayout.xmlなどない

Flutterではテキストやボタンなど上記Widgetの配置はすべてDartコード内で行います。他の開発環境のようにレイアウト定義のファイルは存在しません。また、React NativeのJSXのようなレイアウト専用記述フォーマットもありません。

ひたすらWidgetをnewしてコードを書いていきます。（new 演算子は省略可）

インタラクティブコンテンツやゲームの開発環境では割とよくある手法ですが、それ以外の領域（いわゆる一般的なアプリ開発）では何かしらのレイアウト定義ファイルがあって当たり前だと思っていました。個人的に一番驚いた点でした。

Flutterコミュニティでも議論されているようですが、当面はいまの手法が採用されていくんじゃないかと思います。

蛇足ですが、Column,RowといったWidgetの縦横が、自分の脳内とは真逆で混乱したのはナイショです。

# HotReload

前述した "ひたすらWidgetをnewしてコードを..." を繰り返しながらHotReloadでプレビューします。はっきりいって神機能です。

ですが、シンタックスエラーや例外が発生するとHotReloadに失敗し、エラーを修正しても反映されない場合があります。コードを修正しても見た目が変わらないな...と思ったら一度デバッグを止めて再度ビルドしたほうが確実そうです。

# Buildがいまいち不安定
必要なライブラリをimportしていなくてもビルドが成功し、ランタイムでFlutterErrorを吐くことがあります。VSCodeのPROBLEMSにWarningとして表示されますが、コンパイル時にエラーを出してほしいです。

ただし、このへんはAndroidStudioやrelease buildでは挙動が異なるかもしれません。

# VSCodeは快適
今更ですがVSCodeは快適この上ないです。軽量IDEなのでビルドタスクなど自前で構築が煩雑なのではと懐疑的でしたが全ては杞憂でした。

サクサク書いて、ビルドして、実機確認して、ホットリロードで更新する。今までどうやって開発してたのか思い出せなくなるくらい快適です。

# flutterstudioはまだまだ不完全
レイアウト構築ツールとしては https://flutterstudio.app/ でWYSIWYGな作業ができる...わけではありません。WYSIWYGな地平を目指してはいると思いますが、現状では実用には耐えうるものではありません。

いずれAndroidStudioにレイアウトツールが統合されるのではないかと期待しています。


それでは今回はこのへんで。



## 追記
*1 Kotlinは2011に発表されているので初出はDartと大差ないとツッコミを頂きました。
XCode10でReact-Nativeのプロジェクトを実機のiPhoneで試験する

## 概要
XCode10でReact-Nativeで作成したプロジェクトを実機のiPhoneで試験しようとした際に詰まったので、その対処法メモ

## 実行環境
- XCode10.0
- React-Native 55.4
- iPhone 7

## No member named '__rip' in '__darwin_arm_thread_state64'

XCode上にて実機でビルド実行を行おうとした際、上記エラーが表示された。

### 対処法
React-Nativeプロジェクトディレクトリ内の
`./node_modules/react-native/third-party/glog-0.3.4/src/config.h`
を開いて以下の行を編集する。

```config.h
/* How to access the PC from a struct ucontext */
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip
```
↓

```config.h
/* How to access the PC from a struct ucontext */
#if defined(__arm__) || defined(__arm64__)
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__pc
#else
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip
#endif
```

編集後、再度ビルドを試したら無事実行された

## 備考
React-Nativeの古いバージョンがXCode10に対応していない為に発生したっぽい？
RN0.57ならこのエラーは発生しないかも

## 参考リンク

[react-native issue #19839](https://github.com/facebook/react-native/issues/19839)
資料作成　ポイント

## 必要なモノ

googleスライド
写真


## プレゼンでのポイント

資料は、「ポイント、　ようやくのキーワード、図」をみせる

→　イメージを沸かせる為のモノ


## 手順

1. 情報収集
2. ロジックの組み立て
3. ベースのロジックをパワポに落とし込む（キーワードを繋げるイメージ）
4. 肉づけ
5. 練習

## スライドの小ワザ

フェードインで伝えたいところを、　シンプルに強調できる。
動的に動くものに人間は、注目するから
fedora で DNF アップデート失敗した

開発用に利用している fedora で dnf update した際に、HDD容量不足で中途半端にアップデートした状態で失敗した

日本語系パッケージが死んだみたいでログインの都度エラーが表示される。。

再度 dnf update しても解消されないし、dnf history undo しても失敗する

どのパッケージでどの程度失敗しているのか確認するのもめんどくさかったので、インストール済みパッケージを全部再インストールする力技で解決を図った


### まずはインストール済みパッケージリストを取り出して

```bash
$ sudo dnf list installed > /tmp/dnf.list
```

### パッケージ名称のみを取り出して reinstall

```bash
$ sudo dnf -y reinstall `awk '{print $1;}' /tmp/dnf.list | sed -e 's/\.x86_64.*$//i' -e 's/\.noarch.*$//i'`
```

これでなんとか復旧


でかい試験データを入れた後なのを忘れて update して失敗。。
気を付けないとな
WLinuxをいれてみた

# はじめに

先日、Microsoftから新しいWLinuxというディストリビューションがリリースされました。
なぜか有料なのですが、期間限定で割引していたので導入してみました。

# WLinuxとは

Microsoft製のdebianベースディストリビューション。
WSLに不必要なデーモン関係が削除され、代わりによく使う設定が事前にしてある。
セキュリティパッチも最速でリリースしてくれるそう。

# 導入手順

## Microsoft Storeでダウンロード

Microsoft StoreでWlinuxで検索します。
アプリケーションで見つかるかと思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38676/09abd1eb-e6c9-628c-c0d1-3e11a1046ecb.png)

購入をクリックすると購入できます。

その後、クレジットカード情報などを入力すると購入できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38676/67ba65fc-0f42-47e5-9cb8-147da8849fda.png)

その後、インストールをクリックするとインストールできます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38676/d757ba84-f75a-fe02-36db-ccdbcbfe72f1.png)

インストール完了すると、起動に変わるため、クリックすると起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38676/7ae30909-9d59-665e-0d7f-e95915f253f4.png)

起動するとしばらく待たされます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38676/0d59e7c8-e8ca-1225-0014-36ee0cb2ea3d.png)

その後、ユーザ名とパスワードを入れてください。
ここで入力するものはWindowsとは無関係です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38676/450b0c0e-ed00-5b47-2b65-66ec4ed58273.png)

あとは基本的にEnterキーを押していけばインストール完了します。
（一部パスワードを聞かれるので上記パスワードを入力しましょう。）

# スペック

インストールが終わったら、詳細を調べてみましょう。

```bash
$ cat /etc/issue
Debian GNU/Linux 9 \n \l
```

```bash
$ uname -a
Linux surface 4.4.0-17134-Microsoft #285-Microsoft Thu Aug 30 17:31:00 PST 2018 x86_64 GNU/Linux
```

# 日本語化

以下で日本語化できます。
実行したらWLinuxをいったん閉じて再起動しましょう。

```bash
sudo apt install language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8
```

# Xserver

こちらのXサーバを入れると、連携が簡単みたいです。
安いので買ってみてもいいかもしれません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38676/52c69eab-a89b-077f-7fa7-4b381a82936a.png)
condaでインストールしたgraphvizが動かない問題を対処した


自分用の備忘録ですが, 同じとこで躓いているひとの役に立てれば幸いです.

# 環境
- OS: Windows 10
- Miniconda: Miniconda3-4.5.4 (64bit)
- Python: 3.6
- pydot: 1.2.4
- graphviz: 2.38
- python-graphviz: 0.8.4

# 現象
`Anaconda prompt`を開く.
`conda`を使用して, `python-graphviz`と`pydot`をインストールした仮想環境を作成.

```shell
> conda create -n dot python=3.6 pydot python-graphviz
```

作成した仮想環境のシェルに入り, `python` インタプリタを実行して, 
`pydot.Dot.create(pydot.Dot())`を実行すると,
`FileNotFoundError: [WinError 2] "dot.exe" not found in path.` が発生する.

```shell
> conda activate dot
> python
>>> import pydot
>>> pydot.Dot.create(pydot.Dot())
FileNotFoundError: [WinError 2] "dot.exe" not found in path.
```

`pydot.Dot.create(pydot.Dot())`を直接実行することもあるとは思いますが,
`Keras`のモデルの可視化に使われているのでそこでもエラーが出て実行されないです.

(他の影響範囲は知らないので詳しい方は教えてください)


# 原因
`conda`で`graphviz`をインストールするとパスが通っているところには, `dot.bat` (`dot.exe`のラッパー) だけインストールされる.
`pydot`が`dot.exe`しか探さないので, `conda`では`graphviz`のバイナリは`dot.bat`でインストールされるが, 実行できない.

# 対処
- `dot.exe`のあるとこにパスを通す. (リンクでも可?)
- `pydot.py`を編集し, `dot.bat`をさがすように変更する. (https://github.com/ContinuumIO/anaconda-issues/issues/1666)
- `conda`を使わない.

# まとめ
おそらく近いうちに修正されると思いますが, このようにすれば直すことができます.
`conda`を使わないという対処は, デフォルトのパッケージマネージャがあるUbuntuなどであればいいですが, Windowsはバイナリのインストールとパスを通すのが面倒ですね.
【JavaScript】繰り返し処理をする時の便利メソッド(reduce編)

## はじめに
JavaScriptで繰り返し処理をする時に便利なメソッドを紹介致します。

## 対象読者
・ES2015をこれから使っていきたい
・for文を使わず繰り返し処理をスッキリ書きたい

### 注意点
これから紹介する記法は主にES2015以降の記法です。
レガシーブラウザに対応させる場合は、トランスパイラ（Babel等）を使用し、ES5記法にトランスパイルをおこなってください。
（参考記事）
https://qiita.com/mizchi/items/3bbb3f466a3b5011b509#%E3%81%84%E3%81%BE%E3%81%99%E3%81%90es2015%E3%82%92%E4%BD%BF%E3%81%86
https://qiita.com/hietahappousai/items/9570da4b9275425489b2

## reduce
**【出来ること】**
・配列から値を取り出し一つの値に集約する

例として、配列の中身を取り出し、合計値を求めるプログラムを書きます。

forの場合

```js
const evenNumbers = [2,4,6];
let sum = 0;

for (let i = 0; i < evenNumbers.length; i++) {
    sum += evenNumbers[i];
}
console.log(sum); //12
```

reduceの場合

```js
const evenNumbers = [2,4,6];
const sum = evenNumbers.reduce(function(accumulation,evenNumber) {
    return accumulation + evenNumber;
})
console.log(sum); //12


// アロー関数で記述した場合
const sum02 = evenNumbers.reduce((accumulation,evenNumber) => accumulation + evenNumber)
console.log(sum02); //12
```

## 書き方
```js
配列.reduce(function(累積値, 現在処理されている配列の値) {
})
```
## ポイント
・コールバック関数の第一引数に値を集約する為の変数を用意する
・returnで返却した値が、コールバック関数の第一引数に代入される
・計算結果（合計値、平均値、etc..）を求める際によく使われる

第二引数を設定する事で初期値も設定する事ができます。

```js
const evenNumbers = [2,4,6];
const sum = evenNumbers.reduce(function(accumulation,evenNumber) {
    return accumulation + evenNumber;
},10)

console.log(sum); //22
```

## まとめ
・reduceは配列から値を取り出し一つの値に集約する
・計算結果（合計値、平均値、etc..）を求める際によく使われる

以下の記事でreduceの色々な使い方が紹介されていましたので、
よろしければ参考にどうぞ

「JavaScriptの1行小ネタ集」
https://qiita.com/Tksi/items/130bcf82bbfb0379b58b

## 過去記事はこちら
・(forEach,map,filter編)
https://qiita.com/KORPLUS/items/6739209e9bc716e6a8b5
・(find,every,some編)
https://qiita.com/KORPLUS/items/2f85ddeb82e2306f3822
Python+Flask環境をDockerで構築する

## 概要

Pythonだと```venv``` コマンドで仮想環境が簡単に構築できてよいのですが、あえてDockerを利用して開発がしたい！となったとき用。

## 手順

```sh
> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> touch Dockerfile
> touch docker-compose.yml
> mkdir src
> touch src/requirements.txt
> touch src/app.py
```

requirements.txtファイルを```ADD``` してあげないと駄目なのがちょっと面倒ですね。けど、利用するモジュールが増えたときにrequirements.txtファイル利用したいので、悩ましいところ。

``` txt:Dockerfile
FROM python:3.6

ARG project_dir=/projects/

ADD src/requirements.txt $project_dir

WORKDIR $project_dir

RUN pip install -r requirements.txt
```

```flask run``` コマンドだとポート指定できるので便利です。

``` yaml:docker-compose.yml
version: '3'

services:
  flask:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - "./src:/projects"
    tty: true
    environment:
      TZ: Asia/Tokyo
    command: flask run --host 0.0.0.0 --port 5000
```

JSON形式でレスポンスを返します。日本語が含まれる場合は、```app.config['JSON_AS_ASCII'] = False``` するのが良いです。

```python:src/app.py
from flask import Flask, jsonify

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

@app.route('/')
def index():
  return jsonify({
    "message": "テスト!!"
  })

if __name__ == '__main__':
  app.run()

```

## Dockerコンテナを起動する

準備ができたらDockerコンテナを起動します。

```docker-compose up -d``` とすると、イメージがない場合はビルドしてくれるので、楽ですね。

```sh
docker-compose up -d
(略)
Building flask
任意のディレクトリ_flask_1 is up-to-date
```

コンテナに入りたい場合は```docker-compose exec flask bash``` で入れます。

アクセスできるかホストから確認します。

```sh
> curl http://localhost:5000
{"message":"テスト!!"}
```

やったぜ。


## 参考

DockerコンテナでFlaskを起動し, JSONデータのPOSTとGET
https://qiita.com/paperlefthand/items/82ab6df4a348f6070a55
ふりかえりを組織に広めるためのTIPS

# はじめに

ふりかえりを始めたけれども、自分のチームに広げるのが難しい、と壁にぶつかっている人が一定数いるようです。私自身も同じ経験はしていますので、自分の経験や、随所でふりかえりを導入してきた側から見えてきたものをまとめてみたいと思います。

# 対象

ふりかえりの種別は問いません。プロジェクトのふりかえりだったり、ひとりのふりかえりだったり、チームのふりかえりだったり。ここでは少人数で、短いサイクルで行う「チームのふりかえり」を広めることを想定しながら話を進めていきますが、他のふりかえりに関しても使える部分はあるかと思います。

# ふりかえりを広める際の障壁とその対策例

組織にふりかえりを広めるうえで、様々な障壁が存在します。この障壁も一概には言えず、組織の特色によってもどこが一番高い壁となるかは違ってくるはずです。

## チームの賛同が得られないケース

チームでふりかえりをしてみようとしても、「ふりかえりって何」「やって意味あるの？」という話になるケースです。このケースはよくありますが、解消もしやすいケースだと感じています。

この場合は、ふりかえりの効果を知ってもらう、実感してもらうのが効果的だと感じています。ふりかえりのワークショップを実施してふりかえりの効果を実体験する、というのが一番効果的です。そういった時間が取れないのであれば、会議の最後の2-3分で「会議の進め方の改善案」を議論してみる、というのがふりかえりの始め方として効果的なのかな、と。
この手法は「これだけ！KPT」にも載っていましたが、会議の終わりに差し掛かったタイミングで、ファシリテーターから会議の改善についてのフィードバックを全員からもらい、参加者同士でよりよくなるためのアイデアを出し合ってもらいます（ここではふりかえり、とは言わないでOKです）。そうした活動を何度かやって、慣れてきたタイミングを見計らって、「実はいつもやってるのが、ふりかえりで...」と切り出すと、知らないものへの恐怖は和らぐはずです。


## 上司の賛同が得られないケース（時間）

チームはふりかえりに前向きだが、上司が「そんな時間を作るくらいなら働け」と言ってくるケースです。
ふりかえりをやることによってどんな定量的な価値があるのか、というのを求めてくる上司もいます。
ふりかえりでどんな定量的効果があるのか、というのは、正直なところ提示するのは難しいと思います。毎週、チーム全員の60-90分の時間を割いているわけですから、それによる費用対効果を明示しろ、と言われると厳しい。
この場合は「ふりかえりをやらない場合にどんなリスクが発生するか」というマイナス面で攻めるのがいいのかな、と考えています。毎週ふりかえりをすることにより、チーム内で情報が共有され、プロセスがカイゼン方向へと向かい、チームの心理的安全性も徐々に向上します。ふりかえりをしないと、チームの状態はよくなりにくいので、過去に起こったプロセス周りの問題と同様の問題が発生してしまったり、チームの問題が隠蔽されたまま、あるときに爆発してしまう、というリスクも抱えています。そういったリスクの低減のためや、ふりかえりをすることによる知見や情報の共有といったメリットを両方提示したうえで、活動を提案するといいのではないでしょうか。
また、ふりかえりの場に上司を呼んで、効果を実感してもらう、というのもよいでしょう。ただ、この場合、効果を実感できなかった場合に更に否定的になったりしますので、注意が必要です。
最悪の場合は「業務時間外にやってる活動です」と言うしかなくなってしまいそうです。

## 上司の賛同が得られないケース（実績）

「そのふりかえりって、やった結果良くなった、という他のプロジェクトの事例があるの？」と言ってくるケース。過去事例がないとOKを出してくれないタイプの上司にありがちです。
この場合は、事例をもし知っているのであれば、その事例を伝えればよいですし、もし社内での事例がなく説明に窮する場合は、「社内外の有識者を連れてきて話をしてもらう」というのが手っ取り早いかと思っています。
（※私はこうして自身が有識者になる道を選びました...）

# ふりかえりに特に否定的なメンバーがいるケース

普段の業務外のことをやるのを嫌がる、または、変化を怖がるタイプのメンバーがいる場合です。
「とりあえず一回だけやってみよう」と言って話が収まるのであればいいのですが、人によっては「なぜやるのか、なんのためにやるのか」というのが腑に落ちないと行動に移さないタイプの方もいます。
この場合は、ふりかえりの目的や、行おうとしている内容をしっかり説明する必要があります。目的に付随して、「失敗してもいい活動であること」「チームみんなで楽しく取り組むものであること」というのも伝えると、「なら一度くらいやってみるか」となってくれる場合が多いです。この場合も、有識者からの話は素直に聞くタイプと被っている場合もありますので、その場合は社内外から有識者を読んでしまうのが手っ取り早いです。

## そもそも時間がチームにない、と全員が思っているケース

ふりかえりはやりたいけれど、そんな時間はない、とふりかえりを導入したいと思っている人自身もそう感じているケースです。ふりかえりはしなくてもいいので、まずは全員で立ち止まる時間を作るところから始めていく必要があるかと思います。全員で問題について話し合ったり、全員で休憩する、というだけでも一歩前進できるかと思います。

# おわりに

いろいろ書きましたが、組織によって、また、チームによって状況や問題は様々です。今回書いた対策例もあくまで例でしかなく、必ずうまくいくわけではありません。
ただ、多くの場合うまくいくのは、「他のチームがふりかえりをしている様子を見にきてもらう」ということです。ふりかえり自体に反対している人は、新しいものをすることによって失敗してしまうことが怖かったり、自分が理解や想像ができていないものへの恐怖が大きいと感じています。そんな人には、実物を見せて知ってもらう、というのがかなり効果的だと感じています。

みなさんの悩みも、募集中です。なんとかできないか、一緒に考えたいと思います。

よいふりかえりライフを。
使用するyarnのバージョンを指定する(homebrew)

## 概要
`yarn`のバージョンを特定の環境下に合わせる為に切り替える方法のメモ

## 使用するもの 
-[brew](https://brew.sh): macOS用パッケージマネージャ
-[yarn](https://yarnpkg.com/): jsのパッケージマネージャ

##手順
### インストールされているyarnのバージョン一覧を表示

```sh
$ brew list --versions yarn
```

### 指定のバージョンに切り替える

```sh
$ brew switch yarn <バージョン名>
```

### 使用しているyarnのバージョンを確認する

```sh
$ yarn --version
```

上記コマンドで無事yarnのversionが切り替わっていたら成功！

## 参考リンク
[How do I change the version of yarn used?](https://stackoverflow.com/questions/44448084/how-do-i-change-the-version-of-yarn-used)
materializecssでselectボックスが表示されない時に確認すること

https://materializecss.com/select.html

![スクリーンショット_2018-10-16_08-36-35.png](https://qiita-image-store.s3.amazonaws.com/0/25728/eb927b9d-629b-f3ea-6804-b56ea53feea9.png)

```html
<!-- CSS  -->
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<!-- Compiled and minified JavaScript -->
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>


<script>
  $(document).ready(function(){
    $('select').formSelect();
  });
</script>


<select>
(略)
</select>

```
Selenium Grid の使い方

Arch Linux でのインストール

```bash
yay -S selenium-server-standalone
```

1) Hub の起動

```bash
java -jar /usr/share/selenium-server/selenium-server-standalone.jar  -role hub
```

>ブラウザーで　http://192.168.8.100:4444/grid/console　にアクセス
![selenium_01.png](https://qiita-image-store.s3.amazonaws.com/0/179446/c269174d-80d0-2da4-57b3-6029500484df.png)

2) ひとつめの Node の起動

```bash
java -jar /usr/share/selenium-server/selenium-server-standalone.jar  -role node
```

>ブラウザーで　http://192.168.8.100:4444/grid/console　にアクセス
![selenium_02.png](https://qiita-image-store.s3.amazonaws.com/0/179446/56b014e0-a405-9c72-ff68-a21f4854e4c6.png)

3) ふたつめの Node の起動

```bash
java -jar /usr/share/selenium-server/selenium-server-standalone.jar  -role node
```

>ブラウザーで　http://192.168.8.100:4444/grid/console　にアクセス
![selenium_03.png](https://qiita-image-store.s3.amazonaws.com/0/179446/dda2376c-e002-bad5-43fa-e354df1bfa83.png)

テストスクリプト
>Python3 で、FireFox を使います。

```py:grid_follow_link.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
#	grid_follow_link.py
#
#				Oct/16/2018
#
# ------------------------------------------------------------------
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

url = 'https://ekzemplaro.org'

driver = webdriver.Remote(
	command_executor='http://192.168.8.100:4444/wd/hub',
	desired_capabilities=DesiredCapabilities.FIREFOX)
driver.get(url)

tag = driver.find_element_by_id('ekzemplaro')
tag.click()
#
tag = driver.find_element_by_link_text('English')
tag.click()
#
# ------------------------------------------------------------------
```
php-master-changes 2018-10-15

今日は空白/改行文字の整理と ext/intl の不要な一時変数の削除があった！コード整理だけだった！

# 2018-10-15
## carusogabriel: Trim trailing whitespace in tests
- https://github.com/php/php-src/commit/9c144e0d8217d1ef7a83c2498214308b21af749f
- テスト内の不要な行末空白文字の削除

## petk: Trim trailing whitespace in *.phpt
- https://github.com/php/php-src/commit/d7a3edd45db8d91ddf09cba7c594c63e63f62709
- [7.1~]
- テスト内の不要な行末空白文字の削除

## weltling: Remove assignment irrelevant for release build
- https://github.com/php/php-src/commit/a04cd4b948cc9199e40c2a57708e36ce3df80446
- ext/intl で、（assert() 内でしか使われていなかった）不要な一時変数を削除

## petk: Sync leading and final newlines in *.phpt sections
- https://github.com/php/php-src/commit/d679f02295ea079338f029b7f5f4cb65b37f190c
- [7.1~]
- テストファイル .phpt のセクション内にある最初と最後の改行文字を整理
- 不要な奴は消してファイル必要な箇所に足している

## petk: Fix failing Zend/tests due to newlines
- https://github.com/php/php-src/commit/6b8605d31f7f4b099a2a79d3d9bf0bcd607472af
- [7.3~]
- 改行文字によってテストのこけていた箇所を修正

## petk: Remove value from --CGI-- section
- https://github.com/php/php-src/commit/4f1274c59be613373c5b017f67791f5b01a1c55b
- .phpt の [--CGI-- セクション](http://qa.php.net/phpt_details.php#cgi_section)（7.3.0 からの追加）は値をとらない奴なので値を削除
時系列解析ライブラリProphet　公式ドキュメント翻訳１（概要＆特徴編）　

Facebookが公開している時系列解析用のライブラリProphetの公式ドキュメントを翻訳していきます。

目次
**1.Prophet公式ドキュメント翻訳（概要＆特徴編)**
[2.Prophet公式ドキュメント翻訳（インストール編)](https://qiita.com/japanesebonobo/items/a7309bc07c59c11bee7b)
[3.Prophet公式ドキュメント翻訳（クイックスタート編）](https://qiita.com/japanesebonobo/items/6f3234adb592f73bafbf)
[4.Prophet公式ドキュメント翻訳（飽和状態の予測編）](https://qiita.com/japanesebonobo/items/9a5a5a13440e90f06f30)
[5.Prophet公式ドキュメント翻訳（トレンドの変化点編）](https://qiita.com/japanesebonobo/items/26cccef8ee9d45006093)
[6.Prophet公式ドキュメント翻訳（周期性・イベント効果・説明変数の追加編）](https://qiita.com/japanesebonobo/items/e674359618a879a49c05)
[7.Prophet公式ドキュメント翻訳（増加し続ける周期性編）](https://qiita.com/japanesebonobo/items/ed02f49ea66eab432af8)
[8.Prophet公式ドキュメント翻訳（誤差の間隔編）](https://qiita.com/japanesebonobo/items/f1acdd4ec1a1d0948553)
[9.Prophet公式ドキュメント翻訳（外れ値編）](https://qiita.com/japanesebonobo/items/4eb36710c689bca80c71)
[10.Prophet公式ドキュメント翻訳（1日単位ではないデータ編）](https://qiita.com/japanesebonobo/items/7062dd300a14bda4f84b)
[11.Prophet公式ドキュメント翻訳（モデルの診断編）](https://qiita.com/japanesebonobo/items/2266729f849868581011)
[12.Prophet公式ドキュメント翻訳（ヘルプ編）](https://qiita.com/japanesebonobo/items/08f85d74371240568fff)

2018/10/16公開。原文リンクは以下。
・Prophet概要＆特徴：https://facebook.github.io/prophet/
・公式ドキュメント：https://facebook.github.io/prophet/docs/quick_start.html

今回の記事はProphetの概要と特徴編です。
![スクリーンショット (87).png](https://qiita-image-store.s3.amazonaws.com/0/296645/35671b6b-7426-ac98-d685-071f410e54da.png)

#1.Prophetの概要
　Prophetは加法モデルに基づいて時系列データを予測するためのライブラリです。Prophetでは、非線形の傾向を年・週・日単位の周期性や変動点にあてはめます。このライブラリは強い周期性を持つ時系列データや、いくつかの周期性を持つ歴史のデータに対して最もうまく予測できます。さらに、時系列データの傾向の間にあるデータの抜けに対して強く、一般的に外れ値をうまく扱います。
　ProphetはFacebookのCore Data Science team(1)によってリリースされたオープンソースソフトウェアです。そのライブラリはCRAN(2)またはPyPI(3)からダウンロードすることができます。

(1) https://research.fb.com/category/data-science/
(2) https://cran.r-project.org/web/packages/prophet/index.html
(3) https://pypi.org/project/fbprophet/
#2.Prophetの特徴

**正確で高速**
ProphetはFacebookだけでなく多くのアプリケーションにおいて、計画立案や目標設定のための信頼性のある予測をするために使われています。

**完全に自動**
手動の努力なしに、乱雑なデータから合理的な予測を得られます。Prophetは外れ値や抜けのあるデータそして時系列データの変化に対して強いです。

**予測モデルをチューニング可能**
Prophetのモデル構築プロセスではユーザが予測モデルを調整する多くのチャンスがあります。ユーザは自身のドメイン知識を用いることによって、人間が解釈可能なパラメータを予測モデルを改良するために調整することができます。

**RもしくはPythonで利用可能**
RまたはPythonでProphetの予測モデル構築プロセスを実行できます。RとPythonでProphetライブラリのコードは共通していて、同じStan(1)コードに基づいています。予測モデル構築の際にはRまたはPythonの内、あなたが快適に使える言語を使ってください。

(1) http://mc-stan.org/
【保存版】言語別Youtubeおすすめチャンネル

#💡新記事の紹介
言語学習から一歩先に進んだ記事書きました
→[【保存版】個人開発の進め方 -全５ステップ-](https://qiita.com/gjfcgmi/items/e7d60859a4d1b4c0658f)
良ければ見てみて下さい！

#はじめに
0からプログラミングが学べるおすすめのチャンネルまとめてみました。
IDEのショートカットやリファクタリングも学べます。

コメントを頂いたので、記事にしようと思いました。
→　[新卒, Webサービスを作ってみた話](https://qiita.com/gjfcgmi/items/13df66a96e6193ba608a)
 
---絶対に手を動かしながら、やってください！---
動画を進めては止めて進めては止めて、です。
３倍以上時間はかかりますが、、 
ディアルディスプレイ推奨です。
-------------------------------------------------------------

#Android
###Java
####[Android Instagram Clone App](https://www.youtube.com/watch?v=qpJRgr6HzAw&list=PLgCYzUzKIBE9XqkckEJJA0I1wVKbUAOdv)
インスタグラム似のアプリを作ります。
１動画は短いのですが、１００本の超超大作です。
中盤くらいから勝手に手が動くようになります。
動画と同じくらいのスピードでコーディングできるようになるので、ある意味すごくいい動画です。
自分はUPされているときにやっていたので、いつ終わるのかわからず、恐怖でした。。笑

#### []()

###Kotlin
[Kotlin Firebase Messenger](https://www.youtube.com/watch?v=ihJGxFu2u9Q&list=PL0dzCUj1L5JE-jiBHjxlmXEkQkum_M3R-)
チャットアプリの作れる動画
約３０分×10本　= 5時間　
Kotlin全くの初心者でもサクッと出来ました。

#Swift: iOS
- [Swift: Firebase 3 - Real Time Chat App](https://www.youtube.com/playlist?list=PL0dzCUj1L5JEfHqwjBV0XFb9qx9cGXwkq)
認証機能つきのチャットアプリが出来ます。
約３０分×25本　= 12.5時間　
ストーリーボードなしでコーディング

- [Lets Build YouTube](https://www.youtube.com/playlist?list=PL0dzCUj1L5JGKdVUtA5xds1zcyzsz7HLj)
名前の通りYoutubeのようなアプリが出来ます。
約３０分×20本　= 10時間　
基本が鬼のように学べます。
ストーリーボードなしでコーディング

#WebApp　
###Rails
[Ruby on Rails - Book Review Application Tutorial Series](https://www.youtube.com/playlist?list=PLsyJtAEU4pGw3PCKAA4POHK6C2G2nnpLF)
約3時間の動画です。
認証機能つきの本のレビューサイトを作成します。
本の投稿とレビューができます。
おそらく簡易Amazonを意識して動画作成されたのだと思います。
Active_recordのhas_many等わからなかったので、勉強になりました。

#####Rails その他
- [【デバッグ解説動画】RailsアプリでAjaxがうまく動かないときに確認するポイントあれこれ](https://www.youtube.com/watch?v=Nf0QjFx5O5k)
- [「プロを目指す人のためのRuby入門」のテストコードをRSpecに書き換える](https://www.youtube.com/watch?v=BmPD2KIZ5eY)
- [プログラミング初心者歓迎！「エラーが出ました。どうすればいいですか？」から卒業するための基本と極意](https://www.youtube.com/watch?v=5fyrGslhUcY)

###React
- [React Firebase Flashcards App](https://www.youtube.com/watch?v=pKCAtlsn1Eo&list=PL3_YUnRN3UhifMaaX273dJy4EtV6C04dz)
1時間の動画を２本アップされています。
デザインにもこだわっているので少し長く感じると思いますが、
こうやって作っているんだと実感できます。

- [React, Redux, Firebase Message Board](https://www.youtube.com/watch?v=e9Zzv1tCQ5A&list=PLfU58NU1ve6qwKQd7AGLZsDZ_H0DPqNx8)
Reduxの概念がわからずみました。
使い回しのできそうなコードが多くてよかったです。

- [React, Redux & Firebase App Tutorial](https://www.youtube.com/watch?v=Oi4v5uxTY5o)
firebaseの新しいCloud FunctionsやCloud Firestoreを勉強できます
10分動画が４０本なので, 20時間程で出来ます。
↓こんなサイトができます
![スクリーンショット 2019-01-13 15.56.24.png](https://qiita-image-store.s3.amazonaws.com/0/106634/56b51ac1-af4a-01c3-3930-f3f808548170.png)

#Design
###Sketch
[Angga Risky](https://www.youtube.com/channel/UCG1aEPR4NO2Sd_mmJFimfQQ)
海外の色使いやSketchの操作を知りたくて、気になった動画を真似て作っていました。

#最後に：　動画の探し方
Youtubeで「（興味のある言語・フレームワーク/デザインツール）+ clone + app」で検索
比較的新しい動画で２０分以上で絞り込むといい動画が出てきます。
vCenter Server Appliance 6.5 をマイナーバージョンアップする

# 登場人物
|適用先|ホスト名|IPアドレス|バージョン|
|:-:|:-:|:-:|:-:|
|vCSA 6.5|vcsa.sorarobe.local|192.168.100.254|6.5.0.15000|

# 手順
## vCSA の設定画面(5480ポート) へアクセスし、ログインする
https://192.168.100.254:5480
ユーザー名: root
パスワード: 任意設定したもの
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/b8101dad-245b-338f-3e06-3dd410da1bca.png)

## ナビゲータのサマリからバージョンを確認する (6.5.0.15000)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/b9efa7f0-d08a-bb7a-a1c7-4a43a099415b.png)

## ナビゲータの更新をクリックし、右ペインの更新の確認をクリック、リポジトリの確認をクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/1f6c4f1f-21bd-18d4-03a6-325cb695b67d.png)

## 利用可能なアップデートが表示されたら、アップデートのインストールをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/ef073944-a114-dccc-ae33-d0ac9f56d839.png)

## EULA を確認後、承諾をクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/7e29cdc9-c7a9-a497-a888-2c017a2afb80.png)

## アップデートが開始するのでしばらく待つ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/7b5d555d-c11c-cebf-7fd4-0e0100a03228.png)

## OKをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/0f97f5f3-38bc-d331-8eb2-f670b06c378b.png)

## 現在のバージョンの詳細、もしくはサマリ画面からバージョンが更新されたことを確認する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/91280/3eae63bd-b3dd-f618-1b85-af34377bb7f2.png)

以上。
std::function operator ==で関数同士を比較できない

プログラムを書いていて、ハマることあるよね。
ハマらなければ、スーパープログラマーなんだけどね
今回ハマったのが、std::function
まあ関数ポインタみたいなもんでしょ
って軽い感じで考えていました。
サクッと実装しようとしたら、STLの長ったらしいコンパイルエラー・・・

```
#include <list>
#include <iostream>
#include <functional>

int main()
{
  std::function<int(int)> f, g;
  std::list<std::function<int(int)>> li;
  li.push_back(f);
  li.push_back(g);
  li.remove(f);//こいつがNGなわけだ
}
```
なになに、「 no match for ‘operator==’ (operand types are ‘std::function・・・」
いやいや・・std::functionに==あるっしょと思ったけど・・

```
#include <list>
#include <iostream>
#include <functional>

int ident(int x) { return x; }

int main()
{
  std::function<int(int)> f, g;
  g = ident;
  if (f == g) {//やっぱりNG
   std::cout << "ok" << std::endl;
  }
}
```
はい、だめです。できません。
[stackoverflowの意見](https://stackoverflow.com/questions/20833453/comparing-stdfunctions-for-equality)
公式が無理って言ってるから無理なんでしょう

[それでも無理やりポインタ使って比較する](https://code.i-harness.com/ja/q/37630b)

ハマった挙句、ダメだったのでしばらく散歩します。
MarkdownのTableを良い感じに直接編集できるようにするアドオン

すでにwebサービスやAtomのPluginにある気がしますが。。。
Backlogのmarkdown内のtableを編集するのが面倒なのでFirefox Add-on 作成しました。

## Install
Firefox Add-onをインストールしてください。
https://addons.mozilla.org/ja/firefox/addon/markdown-table-editer/

## Usage
右クリックで表示されるコンテキストメニューにアイコンが登録されます。
Tableの中でクリックするとTableが編集できるようになります。

表示されたButtonをクリックすると、Clipbordに現在のTableの状態がコピーされるます。
編集画面に貼り付けましょう。

![markdown-table-editer.gif](https://qiita-image-store.s3.amazonaws.com/0/155890/019eb8eb-f44b-2f81-cf2d-628c16f11649.gif)

Githubでも使えます。Tableであればすべて編集できると思います。

![markdown-table-editer-addon.gif](https://qiita-image-store.s3.amazonaws.com/0/155890/a7720ddd-b3c9-2b1b-9e33-a3d2d5012993.gif)

## Feature
~~firefox Add-on や Chrome Extensionに暇があったら対応します。~~
~~またCORSが解決できずGithubで使えないのも気が向いたら対応します。~~

Firefox Add-on になりました。
CORSも解消しました。
Chrome Extentionには……もし要望があれば対応します。
(addonにビルド方法書かなかっためにrejectされていたので、再リリースしました。。。2019-01-23)

## 備考
ソースコードは下記です。
https://github.com/amanoese/markdown-table-editer
コミケの経験値で技術書典に行って若干もにょった話

今更ですが技術書典5お疲れ様です。今回の会場、めっちゃ大きかったですね。（前回比おおよそ3倍らしいです）なのにやっぱりすし詰め状態で笑いました。
まあそれでも前回技術書典4はすし詰めどころか **ハンバーグこねてる域** だったので、大きな会場取ってくれて運営マジ感謝って感じです。

とまあ、技術書典ってめちゃくちゃ混むんですよね。
混むんですけど、それは単純に人が多い以上に（コミケと比較して） **流れが遅い** というのが大きい気がします。
いやもうほんと、人が流れないんですよあの空間。なんでかなーって考えてみた結果いくつか要因が浮かんできたんですけど、殆ど「技術書典ならしょうがないか……」な結論だったので共有。

**運営等々を非難したいわけじゃないです。ただ「あれ？俺浮いてね？」って思ったので自分なりに考えてまとめただけです。運営等々を非難したいわけじゃあないんです。** 大事なことなので2回言いました。

# めっちゃお話してる

いやもうサークル前に人がたまるんですよ。めっちゃ立ち読みするしめっちゃお話してる。
コミケで大手はしごするマンにはなんというか色々別世界ですね。後ろで人がつっかえちゃうし、自分自身そんなゆっくりしてたら獲物が完売しかねないので……。

ただ技術書典の基本理念的なあれとしては「技術を中心としたコミュニケーション、頒布による普及活動」とあります（技術季報 vol.4より引用）。
サークル参加者向けアンケートにも「一般参加者と話す時間は十分でしたか？」の項目があるように **サークルさんとの会話はむしろめがっさ推奨されているようです。**
でもコミケ経験者とかならわかる人がいると思うんですけど、 **サークルさんの前を長時間占拠するのってものすごい迷惑かけてそうでめちゃくちゃ怖いんですよね……。**

# 半端な値段と電子決済

800円とか1200円みたいな絶妙に困る金額結構多いんですよ。個人的には小銭出すのが手間取るのでやめてほしくて。
お互いお釣りとか面倒じゃないですか？？？とか。もう600円にするぐらいなら1000円でいいよ！！！とか、かなり思うんですけど。

で、この半端な値段をある程度救済する仕組みとして技術書典公式の後払いアプリがあります。（サークルさんによってはPixivPAYも）

**でもこれ、正直遅いんですよ。**

QRコードの読み取りがもたつくんですよね。（この辺はサークルさんがどこにQRコード置いてるかにもよりますが）あと当日の回線状況にも左右されるのが悲しいところです。
当日QRコードで払う人を横で見てて、「ああ、これ1000円1枚出せば秒で終わるのに」みたいなのはかなりありました。

でも金額って、売り上げに関わる非常にデリケートな部分じゃないですか。安すぎて儲けが出ない、あるいは高すぎて買ってくれず赤字になったらどうしようもないですよね。
なので **サークルさんはサークルさんの意思を貫いてください。あなたの創作が末永く続くことが最優先です。**

# 「うるせえ買い専のクソオタクが！黙ってろ！！！」←わかる～～～！！！

はい。所詮買い専のクソオタクです。 **サークルさんはサークルさんの、運営は運営の都合を最優先してください。** 買う本や、イベントそのものがつぶれてしまってはどうしようもないのです。

それはそれとしてあの混雑は非常にしんどいのは確かです。
午後過ぎに入場してゆったり回ろうかなとも考えたりはしたんですけど、この手の本は個人的に紙媒体至上主義なのでDLカードしか残ってないなんてのは正直避けたい……。
（ちなみに私が紙媒体を買う一番大きなポイントが「人に貸すのが（精神的に）楽」な点です。データだと「これ渡したら再頒布になっちゃわないか？」みたいなあれそれを気にしちゃうので……）

　　
　　
でもまあ、食わず嫌いしないで一回午後ぶらっと回ってみるの、アリかもなぁ。それもまた一つの技術書典なんだろうなあ。
……いっそ、私も本書いてみようかな？
第37話 非正則素数

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

```math
\arg⁡\min_{p:prime}⁡[p∉regular] =37
```

最小の非正則素数は37という意味です。
非正則素数とは、正則素数ではない素数で、正則素数とは円のp分体の類数を割り切らない素数です。
つまり、非正則素数は円のp分体の類数を「割り切る」素数です。

素数pがabを割り切り、bがpで割り切れないなら、aはpで割り切れる。
具体的な数を入れると、30は5で割りきれます。
30を3×10として、3は5で割り切れないので、10は5で割り切れます。

当たり前のように見えますが、円分体という考えを導入したときにこの当たり前が成り立たない場合が出てきました。
　
フェルマーの最終定理を証明するときに円分体の考えが出てきました。

```math
x^3+y^3=z^3
```

このx,y,zを満たす自然数は存在しません。

```math
x^3+y^3=(x+y)(x+ωy)(x+ω^2 y)
```

ωは3乗すると１になる複素数です。
このとき、各項は互いに素なので、x+yもなにかの3乗になるはずだがそんな数はない、
という方法を使って、式を満たす自然数がないことを証明しています。

前にも書いたとおり、足し算というのは使いづらいので、掛け算にして考えたいわけです。
そこで、自然数だけで考える範疇でも複素数を持ち込んで掛け算にしています。

この方法、n=5と増やすとこうなります。

```math
x^5+y^5=(x+y)(x+ωy)(x+ω^2 y)(x+ω^3 y)(x+ω^4 y)
```

今回のωは５乗すると１になる複素数として使っています。

こんな感じでフェルマーの最終定理が解けたかと思いきや、実はn=23以降は「互いに素」の部分に問題が起きます。
整数なら「割り切る」事ができるかどうかなんて自明なのですが、
このように、円分体を用いるのなら、もう一度割り切るということを証明し直さないといけません。

そして、23では、aもbもpでは割り切れないが、かけ合わせたabならpで割り切れる、
という状態が存在することを証明されたわけです。

これは、23未満の素数がユークリッド聖域になる数でしたが23はそうではなく、
ユークリッド聖域の数は最大でも73なのでそれ以降は使えません。
要は、この考えは73より大きい素数には全く使えないわけです。

そこで、改良を加えイデアルという方法が考えだされました。
これを使うことにより、大体の素数に対してうまくいくようになります。

しかし、一部うまくいかない素数が存在し、具体的には100以下なら37,59,67がそれです。
こういう数を非正則素数と呼びます。 

非正則素数は無限に存在します。
もし、この非正則素数というものが存在してなければ、
フェルマーの最終定理はもっと早く証明されていました。