OmniAICreator/Qiita-1.07M huggingface dataset:
Time Series Decomposition


# 月次リターンのカレンダー効果を検証
statsmodelsのdecomposeを用いて、ハロウィーン効果、Sell in Mayなど巷で言われるカレンダー効果が見られるか実験

```python

import numpy as np
import pandas as pd

import statsmodels.api as sm
import pandas_datareader.data as web

import warnings
warnings.filterwarnings('ignore')

import matplotlib.pyplot as plt
plt.style.use('seaborn-darkgrid')
plt.rcParams['axes.xmargin'] = 0.01
plt.rcParams['axes.ymargin'] = 0.01

window = 250*3

'''S&P500データ取得 '''
data1 = web.DataReader("^GSPC", "yahoo", "1980/1/1").dropna()

# Treasury Yield 10 Yearsデータ取得
data2 = web.DataReader("^TNX", "yahoo", "1980/1/1").dropna()

# 日々年率Volatility = 10%にレバレッジ調整した設定
ret = pd.DataFrame(data1['Adj Close'] / data1['Adj Close'].shift(1) - 1)
ret = 0.1 * ret / (ret.rolling(252).std()*np.sqrt(252)).shift(1)
data1 = 100*((1 + ret).cumprod()).dropna(axis=0)

data1_freq = data1.resample('M').last().fillna(method='ffill')
data1_freq['ret1'] = data1_freq['Adj Close']/data1_freq['Adj Close'].shift(1) - 1

# 月次ターンを再作成
data1_freq_equity_curve = 100*((1 + data1_freq['ret1']).cumprod()).dropna(axis=0)
data1_freq_equity_curve.index = pd.to_datetime(data1_freq_equity_curve.index)

# 通期、10年(120ヵ月)、5年(60ヵ月)
res_all = sm.tsa.seasonal_decompose(data1_freq_equity_curve, freq=12)
res_10Y = sm.tsa.seasonal_decompose(data1_freq_equity_curve[-120:], freq=12)
res_5Y = sm.tsa.seasonal_decompose(data1_freq_equity_curve[-60:], freq=12)

seasonality = pd.concat([res_all.seasonal, 
                         res_10Y.seasonal, 
                         res_5Y.seasonal], axis=1)

seasonality.columns = ['1981-', '10Y', '5Y']
m_seasonality = seasonality.groupby(seasonality.index.month).mean()

# Creat Figure
month = m_seasonality.index
height = m_seasonality * 100

bar_width = 0.3

plt.figure(figsize=(10, 4), dpi=80)
plt.bar(month, height['1981-'], tick_label=month, 
        width=0.3, label='1981-')
plt.bar(month + bar_width, height['10Y'], tick_label=month, 
        width=0.3, label='10Y')
plt.bar(month + 2*bar_width, height['5Y'], tick_label=month, 
        width=0.3, label='5Y')
plt.xticks(month + bar_width, month)
plt.legend()
plt.title("Average Return by Month")
plt.xlabel("Month")
plt.ylabel("Ave.Ret(%)")
plt.show()

```

seasonalにリターンを見ると

* Sell in Mayは近年言えてそう
* 年末売り/年初買い？

![M_ret.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509334/3921f091-e003-a82f-7947-a04167073b64.png)

# Decomposition(Trend, Seasonality, Residual)
```python
res_10Y.plot()
plt.show()
```
![Decomp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509334/06184349-ab1a-f7d5-1b71-08ffb30d28dc.png)

* 短期的な平均回帰や、マーケット動向を把握するのに使用
* 過去のマーケット環境(Volatility水準の差etc.)の調整が工夫入りそう
Ubuntu:マルチモニターのひとつだけ画面を回転させたい。

# 目的
片方の画面でPDFや書籍を快適に読むために、デュアルディスプレイにした画面の片方だけを縦向きにかえる。

# やり方
ターミナルを起動して以下を入力
```xrandr --output "$internal" --rotate "$xrandr_rotation"
```
例
`xrandr --output HDMI-0 --rotate left`
`xrandr --output HDMI-0 --rotate right`
`xrandr --output HDMI-0 --rotate normal`
`xrandr --output HDMI-0 --rotate inverted`

`"$internal"`の部分は`xrandr`コマンドを叩けば分かる。
あとは物理的にモニターを立てる必要がある。

# 参照文献
[Rotate only one screen](https://askubuntu.com/questions/159086/rotate-only-one-screen)
「Automator」で右クリックからnkfを実行する

nkfを使ってSJISに文字コードを変換するサンプルです

#1.brewにてnkfをインストールする。

```ターミナル.
brew install nkf
```
#2.Automatorを起動
・新規
・クイックアクションを選択（※クイックアクションはMojave以降に追加されました）
・ユーティリティを選ぶ
・シェルスクリプトを実行を右のワークフロースペースにドラッグする
<img width="1126" alt="スクリーンショット 2019-11-27 14.40.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74178/5fb4da3b-0b59-5f07-ccb9-2172c16a7492.png">

ワークフローが受け取る現在の項目： ファイルまたはフォルダ
検索対象：　Finder.app

シェル: /bin/bash
入力の引き渡し方法： 引数として
コマンドを記述する

```
for f in "$@"
do
	FNAME="${f%.*}"
	EXT="${f##*.}"
	OUTFILE=${FNAME}_sjis.${EXT}
	/usr/local/bin/nkf -s "$f" > "${OUTFILE}"
done
```
ショートカットから下記のようなコードを実行しています
nkf -s　hogehoge.csv > hogehoge_sjis.csv

・実行ボタンを押して正常に完了する事を確認します。
・保存で名前をつけます(右クリックで表示される)

#3.実行
変換したいファイルを右クリックすると先程名前をつけたクイックアクションが出てくるので選択します。
DelegateProxy の Observable にイベントが飛んでこないケースがあった

RxSwift (RxCocoa) には、標準ライブラリの主要な delegate メッセージに対応する Observable が用意されています。DelegateProxy という仕組みです。

今回、その中で `UISearchControllerDelegate` の各デリゲートメソッドを、RxSwift を用いて非同期的に扱いたかったのですが、ハマったのでまとめておきます。

## うまくいかないパターン
```swift

class TheViewController: UIViewController, UISearchControllerDelegate {
    
    var searchController = UISearchController()
    let disposeBag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        searchController.delegate = self
        
        // 1
        searchController.rx.willPresent.subscribe(onNext: { _ in
            /** これが呼ばれない **/
        }).disposed(by: disposeBag)
    }
    
    // 2
    func willPresentSearchController(_ searchController: UISearchController) {
        /** こっちは呼ばれる ***/
    }
}
```


上記の例では、`UISearchControllerDelegate` を、`TheViewController` 自身にセットして、`willPresentSearchController` を実装していますが、同時に RxSwift を使って `willPresentSearchController` の Observable 変数である `willPresent` に何らかの処理を非同期で行おうとしています。

こうすると、willPresent を subscribe しても実際にここにイベントが飛んでくることはありませんでした。

1 と 2 は同じタイミングで発火するものですが、delegate が viewController にセットされていることで 2 が優先されているといった状況になっているようです。

===
※ 実際には1つのクラス内でこんな妙な実装をすることはなく、プロトコルなどを使ってデリゲートの宣言や共通処理を切り出していたりするので、この問題のパターンになっていることに気付きませんでした。

## うまくいくパターン

```swift

class TheViewController: UIViewController {
    
    var searchController = UISearchController()
    let disposeBag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 1
        searchController.rx.willPresent.subscribe(onNext: { _ in
            /** 呼ばれる **/
        }).disposed(by: disposeBag)
    }
}
```

上記サンプルを見れば当たり前なのですが... 

RxSwift の DelegateProxy で与えられる Observable を購読して非同期で処理したい場合は、それに集約する必要があります。つまり UIViewControllerDelegate を ViewController に指定して、デリゲートメソッドを実装する方法を同時に行わないということです。

親にあたるクラスやプロトコルでデリゲートが実装されていると、末端のクラスでこのように RxSwift の DelegateProxy 経由の Observable が飛んでこないことがあります。
ソースコードが大規模になってくるとプロトコルや継承によって見通しが悪くなると起こりやすいので、気を付ける必要がありそうです。
juicerで謎のドメインが表示される

#知らないドメインが表示されている！

![2019-11-27_14h31_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359386/47f6669f-9fe5-6d03-4ca5-8d3ced6e4f1b.png)

知らないドメイン(仮にhogehoge.comとします)が表示されている。
なんだこれは・・・？

#該当のサイトでソースコードを見てみる
まさかとは思うが、当社のアナリティクスタグを使用しているのか？と疑い、このドメインのサイトで「ページのソースを表示」してみたが、アナリティクスタグがあるだけで、当社のものは見当たらなかった。

#ソースが表示できないページがある
hogehoge.comとリンクしていないランディングページを見つけたので、同様にソースを確認しようとしたが右クリックできない。

#右クリック禁止のサイトのソースコードを表示する
下記の方法でソースの表示しました。

・ソースコードを表示させたいURL
　https://hogehoge.com/

・URLの頭に下記をくっつけます。

　「view-source:URL」

・こうなります
　view-source:https://hogehoge.com/

この状態でChromeならF12(or 右クリックで「検証」)を押すと下記のようになります。

![2019-11-27_13h53_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359386/fc631468-cfa2-62f3-7d76-4b7f9b08cf08.png)

このページを表示させたまま(これ重要)、別のタブで元のURLにアクセスすると右クリックで「ページのソースを表示」が表示できるようになります。

#結果
当初疑った通り、当社のアナリティクスタグが設置されていました。恐らく当社のページからソースをコピペして、その際に修正し忘れたものかと思いますが、タグを設置しておいてアナリティクスで確認をしていないのか？と心配になりました。
Mac環境でRails内で別プロセスが立ち上がる処理をすると落ちてしまうとき

## 概要
Railsで`task runner`を実行しようとすると以下のエラーが起こり、途中で処理が止まってしまいました。

```
$ bundle exec rails runner -e development [タスク]
objc[13178]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called.
objc[13178]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
```

## 解決法

```
$ echo 'export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES' >> ~/.bash_profile
$ exec $SHELL -l
$ bin/spring stop
$ bundle exec rails runner -e development [タスク]
```

## 参照
[macOS High Sierra で "__NSPlaceholderDictionary initialize" エラー](https://qiita.com/ybiquitous/items/b43ffd2389e66a3a1c32)
AWSでJupyterHub (概要)

# はじめに
こんちには，こんばんわ．
今年は，AWSやらPythonやらをいじっていた時間が長かったのか，「なにかしたいな～」と考えていた時，一人で黙々とやるのも好きなんですが，協同でなにかするのもそこそこ好きなので，ふと「そうだ，JupyterHubの環境を作ろう」と．
今回は，その時の内容を何回かに分けて記事にしようと思います．

でも，普通に「インストール後起動」だけじゃ物足りないので，次のような点を解決しながら環境を作ってみようと思いました．

* 普通に「インストールして，起動して，アクセスする」的なものじゃ物足りない
* アクセスするURLが `http://localhost:8080/` のようなものも味気ない
* ドメインが何かよく分からないものはイヤ（自分の好きなドメインにしたい！）
* URLにポート番号付けるのとかカッコ悪い
* 通信を暗号化させたい（HTTPS化）


# ゴール
最終的に，以下の要素が達成できるようにしていきます．

1. 好きなドメイン(サブドメイン)でJupyterHubにアクセスできること
2. 通信の暗号化(HTTPS化)
3. 複数アカウントを用意して，別々の環境が用意できること
4. 各アカウントがJupyterHubで作成したデータやコードがJupyterLabが起動しているボリュームと別にあること
5. WAFを利用した簡単なアクセスポイントの制御と監視

# 道のり
ゴールに向けて，AWSでやってみたことを順を追って書いていきます．
AWSをしっかりと勉強したわけでもないし，今回取った方法がベストプラクティスでもないと思うし，「こっちの方法が良いよ」とか「これじゃ面倒だよね」とかあると思います．
私の勉強不足のため，AWSを使いこなしてないです，IAM使ってセキュリティをしっかりとするとかね，今回やってません．

1. [EC2を使ってJupyterHubのサーバを用意](https://qiita.com/ryouka0122/items/2869d2a7c9f8948c7d88)
    1. EC2インスタンスの作成
    2. TeraTermからのログイン
    3. EBSを使ってJupyterHub専用ストレージをマウント
2. [webサーバとしてnginxを用意](https://qiita.com/ryouka0122/items/a8c4bb12b6a958b3da04)
3. [Pythonの準備](https://qiita.com/ryouka0122/items/af48af3fb3a2b35300e5)
    1. Pythonのインストール
    2. Anacondaのインストール
4. [JupyterHubのインストール](https://qiita.com/ryouka0122/items/bfccfb3c222e96a66d9a)
    1. Anacondaを使ってJupyterHubのインストール
    2. nginxとの接続(リバースプロキシの設定)
5. [JupyterHubのアカウント](https://qiita.com/ryouka0122/items/019c1e2bd106b8758f7f)
    1. jupyterhubユーザのsudo権限付与
    2. shadowの設定
6. [Route53でドメインの設定](https://qiita.com/ryouka0122/items/67d8d44dc49c3ac15dff)
    5. JupyterHub用のサブドメインの設定
7. [通信の暗号化とリクエストの制御](https://qiita.com/ryouka0122/items/9197ab35715eca6704e9)
    1. ACMで証明書の発行
    2. AWS WAFでACLを作成
    1. ALBにACLを設定
8. サービスの自動化
    1. ログの設定
    2. 毎日リブートさせる
9. WAFのログを使ってアクセスの監視
    1. CloudWatch+SNSを使って監視メールの送信

各項目は，記事が出来次第，リンクに差し替えていきます．
Openning アソビュー！Adventカレンダー

# asoview!（アソビュー！）とは？
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242212/9ad558a0-7ae6-f078-7281-160bb08483c6.png" width="400">

アソビュー！は、日本全国のレジャー／遊び／体験などを取り扱う日本最大級のワクワクの予約サイトです。
最近では公共施設との連携も多く行っており、世界遺産の二条城のオンラインチケット販売や、[11月26日に小泉環境相から発表](https://www.sankei.com/life/news/191126/lif1911260031-n1.html)がありましたとおり、新宿御苑の入園券のネット購入なども取り扱っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242212/145ae126-2dc3-cfaa-4d51-c01ea7fe2c99.png)

# そんな私は

私はそんなアソビューで執行役員CTOをしている山崎賢です。多くの場合「**やまけん**」と呼ばれています!
アソビューでは開発組織の拡大やエンジニアの将来に寄り添い、日本で最も働きやすく圧倒的成長が出来る開発組織を作るために、日々楽しく仕事をしています。

# 初のAdvent Calendar

アソビュー！のエンジニア組織もここ数年で安定的に組織化され文化が醸成されてきました。
エンジニア組織内部から自発的に、多くの勉強会や外部発信が産まれてきており、このAdventカレンダーの開始もエンジニア同士の毎週実施しているTechTalk会の中で自発的に産まれました。

# アソビューの開発って？

明日から、それぞれのエンジニアからそれぞれのアドベントカレンダーが発信されます。
内容について特に制限を設けていないので、内心どんな記事が公開されるのかドキドキしていますが、それもアソビュー！流の自由度の高さなのでドキドキしながらワクワクしています。

私からは最初にアソビュー！の開発体制や取り扱っている技術について、おおざっくりと紹介します。


# 組織体制

よく組織論で事業組織／機能組織という議論がありますが、アソビュー！では組織を立体的に捉えており、2次元で捉えていません。
ただし、顧客の課題と事業の課題にエンジニアリングが直結出来る組織を作ることに対して、徹底的にこだわっています。

開発組織は多くの場合スクラムチームで構成されており、構成要素は以下の要素となります。

- サーバーサイドエンジニア
- フロントエンドエンジニア
- QAエンジニア
- SRE
- Scrum Master
- Product Owner

これらのチームで開発の粒度に応じてフレキシブルにチームを組成しています。

また、ベトナム（ホーチミン）にも開発拠点を立ち上げおり、日本＋ベトナムで開発を実施しています。

:point_down_tone3:アソビューキックオフ風景
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242212/51f8ea49-cbea-fad0-3b92-2eadd1c9753d.png)



:point_down_tone3:ベトナム開発メンバー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242212/1f72ac9e-5d8f-833f-90d1-5293ce0a8e48.png)


# 技術要素

アソビュー！では、以下の技術要素を使ってプロダクト開発を実施しています。

|用途 |技術要素 |
|---|-----------------------------|
| サーバーサイド開発言語／フレームワーク | Java ( Spring Boot ) ときどき Python (Django)、Golang|
| フロントエンド開発言語／フレームワーク | React、 flux( Redux )、 es2015〜 |
| インフラ | AWS ( RDS, ECS, EKS, EC2, ElasticSearchなど、フル活用 |
| CI／CD | CircleCI, Jenkins
| その他 | Confluence, JIRA, github, slack, InteliJなど 便利なものは積極的に導入 |

# 最後に

ここから途切れなく記事が続くか少し不安ですが、アソビュー！エンジニア陣で楽しみながらアドベントカレンダーを開始します！！！！
継続してお読みいただけると幸いです。
Dictionaryをfilterするとき、別の配列から参照して絞り込む方法


```
contents = [
	["name": "banana"
	"id": 1],
	["name": "cabbage"
	"id": 2],
	["name": "tomato"
	"id": 3],
	["name": "strawberry"
	"id": 4],

]

contentsId = [1, 3]
```
こんな配列があった時、contentsIdに含まれるIDのものだけ取り出したい時

```
filted = content.filter({  contentsId.contains($0.id) })
```
↓

```
 [
	["name": "banana"
	"id": 1],
	["name": "cabbage"
	"id": 3],

]
```
【UE4】HotReload vs Live++ の調査と Live++ の使い方





# 最初に

本記事は、Unreal EngineでC++プロジェクトを作るにあたって、この「HotReload」と「Live++」という機能について調べ、まとめたものとなります。Unreal EngineでC++プロジェクトを作るにあたって、Live++は役に立つ場面が多いかと思います。間違いや更に良い方法があった場合にはそっとTwitter( [@ろっさむ](https://twitter.com/4_mio_11) )やコメント、修正リクエストなどでお知らせ頂けるととても有難いです。



## 作業環境

記事内で使用する作業環境は以下の通りとなります。

- Unreal Engine：4.23
- Visual Studio：Community 2017 or Community 2017 for Mac or Enterprise 2019



## Live++ VS HotReload

### Live++

- Windowsのみでサポートされている。
- Live++ではC++のイテレーション時間が最大3倍高速化される。
  - コードの変更部分のみバックグラウンドでコンパイルし、DLLをリロードする。
- メソッド内の処理を変更するようなマイナーコードであれば使用できる。
- クラス構造の変更（メソッドやプロパティの追加/削除）は失敗する。
- Live++の場合は実行中でも変更が可能。
- Live++を使用する場合、Engine側のモジュールやPluginを含めると動作不安定に。



### HotReload

- enumやstructを除くほぼ全てのコードをリロードできる。
- DLL全体を構築し直すためLive++よりも大幅に時間がかかる。
- 公開変数を.hにて変更や追加した後にホットリロードを行うとBP上で値がリセットされるか見えなくなる。
  - その場合、再起動。



### 使い分け

メソッド内の処理を変更するだけなら**Live++**.

プロパティやメソッドの追加も行うなら**HotReload**、又は再起動.



## Live++を有効にする



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/17dd030e-7ec9-99d9-551e-abe76eaf12fd.png)



`Edit`から`Editor Preferences > Live Coding`を開いてください。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/9e0bffc7-2a86-95fe-c473-e6badb70f179.png)



ここでいくつか設定項目が表示されるので、関連があるものを見ていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/6f4f6b8f-9f5b-aefd-600b-635a7e5f1884.png)



| 項目               | 要素                                                | 概要                                                         |
| ------------------ | --------------------------------------------------- | ------------------------------------------------------------ |
| Enable Live Coding | true                                                | Live++を有効にする.                                          |
|                    | false                                               | Live++を無効にする.                                          |
| Startup            | Start automatically and show console                | 起動時にLive++も立ち上げ、コンソールも表示する.              |
|                    | Start automatically but hide console until summoned | 起動時にLive++は立ち上げるが、コンソールは呼び出すまで非表示. |



## Live++を実行する

`Enable Live Coding`を有効にした状態で、ファイルを変更し保存、`Ctrl + Alt + F11`を押下でC++コードのリコンパイルが実行される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/3a191e52-50d9-e7aa-003f-084f71b89b02.png)



### Live Codingがうまくいかない場合

以前にホットリロードを使用していた場合に起こることがあります。



その場合、[Binaries]フォルダ内のdllやpdbファイルを削除してから再起動を行ってください。

# 参考

- [UE4 Live++による高速ライブコーディングについて - Let's Enjoy Unreal Engine](http://unrealengine.hatenablog.com/entry/2019/03/24/170336)
- [LIVE ++](https://molecular-matters.com/products_livepp.html)
- [[GTMF2019]Unreal Engine 4の2019年上半期 アップデート情報まとめ]( https://www.slideshare.net/EpicGamesJapan/gtmf2019unreal-engine-42019 )
- [Live Coding vs Hot Reload?]( https://forums.unrealengine.com/development-discussion/c-gameplay-programming/1602121-live-coding-vs-hot-reload )
Kotlinでinterfaceの実装を分ける場合は委譲を利用する

## 問題

以下のようなRepositoryをinterfaceとして定義したとする。

```kotlin
interface HogeRepository {
    suspend fun hoge()
}
```

さらに先のRepositoryが次のように実装され本番で運用されていたとする。

```kotlin
class HogeRepositoryProduction : HogeRepository {
    override suspend fun hoge() = withContext(Dispatchers.IO) {..}
}
```

また、開発時にローカル上から固定値を返したい場合があり、次のようなRepositoryも実装していたとする。

```kotlin
class HogeRepositoryDevelopment : HogeRepository {
    override suspend fun hoge() {..}
}
```

このとき `HogeRepository` へ追加があった場合などにどちらのRepositoryにもその実装が必要になり少し面倒くさい。

## 解決策

先の問題をKotlinの **class delegation** を利用し解決することができます。今回の例では、`HogeRepositoryDevelopment` の `HogeRepository` 実装を `HogeReposiyoryProduction` に任せるようにします。

```kotlin
class HogeRepositoryDevelopment(
        private val production: HogeRepositoryProduction
) : HogeRepository by production
```

このようにすることで `HogeRepository` の実装を委譲することで `HogeRepositoryDevelopment` は、必要な個所だけ上書きすればよくなり、interfaceに変更があっても本番用のみ変更を加えるだけでよくなります。
データコアサーバー復旧後にすみやかにパスが戻るようにする

ここの続き https://qiita.com/tsurun/items/14c9f43f10b731e44462 でもありますが、単独でも活用できます。

サーバー再起動後に片方のパスがなかなかもどらないことがあります。
ことがありますっていうかぶっちゃけリスキャンしないとなかなか戻りません。

なのでミラーvDiskが復旧したら自動でESXiがリスキャンするようにしておくと安心です。

まずはリスキャン用のパワーシェルスクリプトを作りましょう。
下記をメモ帳に貼り付けて、.ps1の拡張子で保存してください。

```
#サーバーとユーザーとパスワードは自分の環境で書き換えて
Connect-VIServer -Server x.x.x.x -User administrator@vsphere.local -Password xxxxxxxx
Get-VMHost | Get-VMHostStorage -RescanAllHBA
Disconnect-VIServer -Confirm:$False
```
GCP/GKE よく使うコマンド

#Kubernetes
##現在の操作中のKubernetesクラスタを確認する
```
kubectl config current-context
```

##選択可能なKubernetesのクラスタ一覧を表示する
```
kubectl config get-clusters
```

##Kubernetesクラスタを選択（変更）する
```
kubectl config use-context ${CLUSTER_NAME}
```

---

#GCP

##GCPにログイン
```
gcloud auth login
```

##現在選択中のGCPプロジェクト情報を確認する
```
gcloud config list
```

##選択可能なGCPプロジェクト一覧を表示する
```
gcloud projects list
```

##GCPプロジェクトを選択（変更）する
```
gcloud config set project ${PROJECT_ID}
```

---

#GKE

##GKEクラスタ一覧を表示する
```
gcloud container clusters list
```

##GKEクラスタを選択（変更）する
```
gcloud container clusters get-credentials [-z ${ZONE}] ${CLUSTER_NAME}
```

---

#その他

##kubectx
```
# 選択可能なKubernetesのクラスタ一覧を表示する
kubectx

# Kubernetesクラスタを選択（変更）する
kubectx ${CLUSTER_NAME}
```

##kubens
```
# 選択可能なKubernetesのnamespace一覧を表示する
kubens

# Kubernetesのnamespaceを選択（変更）する
kubens ${NAMESPACDE}
```
ヒルが吸った血に含まれるDNAから、吸われた動物を特定して、生態学の研究をする

# 野生哺乳類とヒルの研究がDNAで出会った

[屋久島](https://ja.wikipedia.org/wiki/%E5%B1%8B%E4%B9%85%E5%B3%B6)の野生哺乳類と吸血性のヤマビルに関する分子生態学研究の論文を紹介します。
> **Host selection of hematophagous leeches (*Haemadipsa japonica*): Implications for iDNA studies.**
> Goro Hanya, Kaori Morishima, Tomoya Koide, Yosuke Otani, Shun Hongo, Takeaki Honda, Hiroki Okamura, Yuma Higo, Masamichi Hattori, Yuki Kondo, Yosuke Kurihara, Sakura Jin, Aji Otake, Izumi Shiroisihi, Tomomi Takakuwa, Hiroki Yamamoto, Hanami Suzuki, Hisashi Kajimura, Takashi Hayakawa, Nami Suzuki‐Hashido, Takafumi Nakano.
> *Ecological Research* (in press). [DOI: 10.1111/1440-1703.12059](https://doi.org/10.1111/1440-1703.12059)


# 登場動物の写真

[ヤマビル（*Haemadipsa japonica*）](https://ja.wikipedia.org/wiki/%E3%83%A4%E3%83%9E%E3%83%93%E3%83%AB)
> <img src="https://wol-prod-cdn.literatumonline.com/cms/attachment/7fffa7f9-ae92-45c3-851e-16b4a0d95ea7/ere12059-toc-0001-m.jpg" width="300">
> *Ecological Research* 誌の [graphical abstract](https://wol-prod-cdn.literatumonline.com/cms/attachment/7fffa7f9-ae92-45c3-851e-16b4a0d95ea7/ere12059-toc-0001-m.jpg) より


[屋久島](https://ja.wikipedia.org/wiki/%E5%B1%8B%E4%B9%85%E5%B3%B6)の[ヤクシマザル（*Macaca fuscata yakui*）](https://ja.wikipedia.org/wiki/%E3%83%A4%E3%82%AF%E3%82%B7%E3%83%9E%E3%82%B6%E3%83%AB)と[ヤクシカ（*Cervus nippon yakushimae*）](https://ja.wikipedia.org/wiki/%E3%83%A4%E3%82%AF%E3%82%B7%E3%82%AB)
> ![屋久島のヤクシマザルとヤクシカ](https://noah.ees.hokudai.ac.jp/hayakawa/res1.jpg)
> [早川研究室](https://noah.ees.hokudai.ac.jp/hayakawa/research.html#t1)より


# 論文の概要

- **【対象】** 吸血動物（[hematophagous animal](https://en.wikipedia.org/wiki/Hematophagy)）の[ヒル](https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%AB_(%E5%8B%95%E7%89%A9))（環形動物門ヒル綱）。ご存じの通り、動物の血を吸って生活している。じめじめした森を歩いていると、気づいたら足が血まみれになっていることがあるのは気配なく忍び寄られたヒルに血を吸われた結果。

- **【調査地】** [屋久島](https://ja.wikipedia.org/wiki/%E5%B1%8B%E4%B9%85%E5%B3%B6)（世界自然遺産を有する鹿児島県の島）で[ヤマビル（*Haemadipsa japonica*）](https://ja.wikipedia.org/wiki/%E3%83%A4%E3%83%9E%E3%83%93%E3%83%AB)を収集。

- **【方法】** ヒルの腸内に含まれている**ヒルが他の動物から吸った血液**からDNAを抽出。哺乳類のミトコンドリアDNAのバーコード配列を、従来のサンガーシークエンサーや次世代シークエンサーを用いて同定。

- **【結果1】** ほとんどのDNA配列が**ヤクシカ**であると同定。**ヤクシマザル**や、[**ヤクシマタゴガエル**（*Rana tagoi yakushimensis*）](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%82%B4%E3%82%AC%E3%82%A8%E3%83%AB)も検出。同じサンプルから複数種が検出されることもあり、ヒルは同時に複数の動物から吸血している可能性がある。

- **【結果2】** ほとんどがシカというのは、同所での**カメラトラップに観察できる動物相の頻度と異なっていた**。

- **【考察】** 地上性で体サイズが大きいシカは**吸血対象としやすく、ヒルは頻度高く選択した結果と考えられる**。[ヒメネズミ（*Apodemus argenteus*）](https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%A1%E3%83%8D%E3%82%BA%E3%83%9F)やヤクシマザルは樹上性傾向が強く、さらにサルにいたっては自身や他者についたヒルを物理的に除去できるため、**哺乳類側の吸血回避戦略も関係してるだろう**。

# 論文の波及効果は？（私見含む）

- ヒル由来の環境DNA（iDNA = invertebrate-derived DNA）でその環境の生物相を把握しようという研究は2012年に提唱されている（[Schnell et al. 2012 *Current Biology*](https://doi.org/10.1016/j.cub.2012.02.058)）。

- しかし、ヒルのiDNAデータは、ヒル自身のホスト選択（host selection）の影響を受けており、生物相の多様性の理解には直接用いることができないことを、今回の屋久島での研究が示している。

- むしろ、ヒルのホスト選択と、四足動物（シカ、サル、カエル）の吸血回避戦略を示唆するということで、ヒルの生物学研究が進んだのかもししれない。

- 哺乳類の生態学研究と、無脊椎動物の生態学研究が、分子生態学研究で繋がるというのが面白いですね。
Misskey移行メモ(V10)

こんにちは。

Misskeyのサーバー変更作業したのですが、またそんな事態になった時のために(滅多にないはずなのですが…)

相変わらず自分用程度の感覚で書いてるのでほかの人が見ても全く参考にならないです。はい。

2回やってるので2回分書きます。

というか2回目がヤバかった。


# 1回目(自宅鯖→自宅鯖)

## そもそもなぜ移行？
別記事で問題にしたが、最初設置した自宅サーバーがあまりにオンボロすぎて、1日1回ほどの頻度でいきなりフリーズという事態が発生したため。
HDDフルアクセスのままフリーズは最悪HDD寿命の場合もあるというので即座に移行を決断。
~~尚そのHDDは最悪の場合のバックアップとして安置してある。~~

PCはそのままでSSDにするのも考えたが、入れ替えるのすら面倒という怠惰な性格が発動したのと、純粋にこのPCのままの運用は良くないと判断したためPC自体の移行も決定。

##移行方法
最初はHDDまるごとクローンしようと思ったが、MongoDBさえ移行してあればいいらしいのでその方針に変えた。
必要なバックアップデータをわかりやすい場所に配置して、旧HDDを新PCに直接接続して引っ越しする。
自宅鯖ならではですかね。

## MongoDBのリストア(旧PC)
前提としてDB名はmisskeyで認証無しです。
わけでまぁ簡単です

```bash

mongodump -d misskey --out dump
```
で、旧PCでの主要な作業はこれだけ。
あとはMisskeyのコンフィグ、藍Bot(うちの場合衣亜だけど)のコンフィグとメモリファイルをわかりやすい場所にコピーするぐらい。

## 新PC準備(新PC)
OSは旧PCに合わせてUbuntu系を。
最低限の初期設定は済ませる。
本来はMisskey導入直前にやることだが、今回はこのタイミングでNginxを導入。
やれるなら公開フォルダにメンテナンス中のページでもおもむろに置いておく。
元々不安定で長期停止がザラだったのでもはや本当に申し訳程度にしかならない。

## 旧PC停止(旧PC)
新PCで同じローカルip使うので衝突防止にここでシャットダウン。まぁ設定変えるだけでも良いけど今回の手段では結局このあとHDD取り出すのでシャットダウンは必然的に。

## 新PCにMisskeyとか入れる(以降すべて新PC)
先にローカルipセット。
あとは旧HDD取り出すのでを接続。
あとは基本的に今までのメモ書きとか同様にMisskeyやNginxリバースプロキシを新規構築する。
コンフィグとか旧HDDに置いておいたやつをここで流用。つまりコピペ。

### MongoDB入れたタイミングで旧HDD取り出すのでからリストア

```bash

mongorestore <PATH>
```

こうします。これでデータは復帰...したよね？

## リストア終わったらいつもの
最後にいつものyarn操作(インストールとビルド)やってデーモン設定前に念のため起動して、問題なければまた停止してsystemd設定してまた起動します。
以上です。

## 2回目(GCP→自宅鯖)
で、問題はここから。

## 移行理由
破産フラグ。
以上。

## 移行方法
基本的には1回目同様。DBバックアップまではできた。

## 発生した問題
DBバックアップファイル、どう回収する？

## 解決法(=オチ)
SFTPで鍵使えばよかっただけでしたとです。
そういうの食わず嫌いしてた私は実行するまでに1時間ロスしました。

## 次の問題
nginx一回消してたからかなんなのか、起動しない。

## 解決法
410送信用にApache入れっぱだった。そりゃぁ起動できるわけ。
その後勘違いしてコンフィグが吹っ飛んでおり別の意味で地獄になった。
そのオチについては、設定自体やらかしまくってた上に、misskey.nginx入ってるフォルダを読み込ませてなかった。
**だいたいこれが6時間に及ぶ大手術の原因である。**

## 最終作業
やはり1回目同様、リストアして、新Misskeyビルドして、**ドメイン設定変えて**、起動した。

変動IPなのでMyDNS使った。

以上。
macOS CatalinaにあげたらROS2 Dashingがすぐには動かなかった話

##結論
動きました


##概要
macのOSをcatalinaにアップデートしたらROS2動かすまでにいろいろめんどくさかったのでメモ

##環境
* mac OS 10.15.1 Catalina
* ROS2 Dashing
* bash

##colcon buildが通らない

以下のようなエラーが出てcolcon buildが失敗します

```bash
admin$ colcon build --packages-select image_tools
Starting >>> image_tools
--- stderr: image_tools                         
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
---
Failed   <<< image_tools	[ Exited with code 1 ]
```

調べるとgitなど他のツールでも同様の症状が出るようです（そっちは試してなかった）
以下の記事にある解決策で解決可能です（多謝）

[macOS CatalinaにしたらGitコマンドが動かなくなった](https://qiita.com/n0bisuke/items/3aebc4ab635030119f6c)

##ros2 runがセキュリティ云々で実行できない

ros2 runしようとすると、以下のようなエラーダイアログが出てきます
![スクリーンショット 2019-11-27 13.34.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166634/c26e8791-2331-17b7-985d-9bbcac5061a0.png)

これがめちゃくちゃ鬱陶しくて、キャンセルしてもキャンセルしても出現しやがります。

こいつを出てこなくするためには

1. このダイアログが出ている状態にする
1. `ros2 run`を実行したターミナル画面を選択し、ctrl+Cを入力する
2. その後ダイアログに戻り、キャンセルする

あるいは`ros2 run`を実行したターミナルを終了してももちろんOKです

この現象が発生しないようにするためには、よくやるやり方でセキュリティ制約を解除してやれば良いです

りんごマーク
↓
システム環境設定
↓
セキュリティとプライバシー　「一般」タブ
↓
![スクリーンショット 2019-11-27 13.45.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166634/8985c91b-4cf1-ce7f-1d45-9144e91a3f57.png)
「このまま許可」を押す
（カギの解錠は不要です）

これをやった後にもう一度`ros2 run`すると、今度は_rclpy.cpython...を「開く」できるようになるので開きます

・・・と他のプログラムも同様に引っかかります
![スクリーンショット 2019-11-27 13.47.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166634/3b88a043-59d2-90fb-fd05-3983eecce7f7.png)
・・・などなど

「セキュリティとプライバシー」ウィンドウを開きっぱなしにしておくと、引っかかった奴が逐一出てくるのでぽちぽちと次々許可していきます
・・・としていたのですが無限に出てきて一向に動く気配がないので一斉に許可できないか探しました。

ありました

Mac - すべてのアプリケーションの実行を許可 - PC設定のカルマ　　（多謝）
[https://pc-karuma.net/macos-sierra-allow-apps-from-anywhere/](https://pc-karuma.net/macos-sierra-allow-apps-from-anywhere/)

ここに書いてあるコマンドを入れると、「全てのアプリケーションを許可」項目が出現します。
![スクリーンショット 2019-11-27 14.01.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166634/c10d8325-3c05-3bf1-7d5f-67248a5f65a7.png)

これをすると動きました。やったね！
（これでもセキュリティ的にやばくなるの大丈夫なんかな）

##まとめ
やらないといけないこととして

* xcode関連のツールの再インストール
* セキュリティ関連の許可

かなという感じです

ちなみに、実行できませんダイアログで「ゴミ箱に入れる」をするとあとでだいぶめんどくさいことになります。ご注意ください
Javaで電卓アプリ作ってみる 〜アプリケーションウィンドウを表示させる

まずは、JavaSwingを使って、アプリケーションウィンドウを表示させるところから初めていきます。

Javaの開発環境は、Ubuntu 18.04にインストールしたOpenJDK 11.0.4を使用しています。

## JFrameでウィンドウ表示

```java:MyFrame.java
import javax.swing.JFrame;

public class MyFrame extends JFrame{
    public static void main(String[] args) {
        JFrame frame = new JFrame("JavaSwingのテスト");
        frame.setVisible(true);
        // x(バツ)ボタンでアプリケーションを終了させる。
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // ウィンドウの表示位置とサイズ (座標x, 座標y, 幅, 高さ)
        frame.setBounds(300, 80, 500, 600);   
    }
}
```

このコードを実行すると、指定された位置(x=300, y=80)に指定されたサイズ(500, 600)で空のウィンドウが表示されます。

### ウィンドウを画面中央に表示

上記コードのsetBoundsでは、ウィンドウの位置とサイズを指定しましたが、setBoundsを下記コードに置き換えることで、ウィンドウを画面中央に表示させることができます。

```java
// ウィンドウのサイズ (幅, 高さ)
frame.setSize(500, 600);
// ウィンドウを画面中央に表示
frame.setLocationRelativeTo(null);
```

ウィンドウは。画面中央に表示させたいので、実際に置き換えてみます。

```java:MyFrame.java
import javax.swing.JFrame;

public class MyFrame extends JFrame{
    public static void main(String[] args) {
        JFrame frame = new JFrame("JavaSwingのテスト");
        frame.setVisible(true);
        // x(バツ)ボタンでアプリケーションを終了させる。
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
        // ウィンドウのサイズ (幅, 高さ)
        frame.setSize(500, 600);
        // ウィンドウを画面中央に表示
        frame.setLocationRelativeTo(null);
    }
}
```

実行結果はこちらです。

![JavaApp001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150278/04f55e8d-1283-98cc-de40-882dbf1327aa.png)


---

### 本記事目次ページ

[Javaで電卓アプリ作ってみる](https://qiita.com/tsweblabo/items/a77d1146c9057c369e39)
Javaで電卓アプリ作ってみる

Javaの開発環境は、Ubuntu 18.04にインストールしたOpenJDK 11.0.4を使用しています。

以前勉強していたJavaを使ってGUIの電卓アプリを作ってみます。
GUIの部分はjavax.swingを使います。

下記目次は、当面の目標としてざっくりしたものを挙げておきます。進行に合わせて随時更新していこうと考えています。

不慣れな部分も多々あると思うので、プログラミング用語など間違った使い方や解釈をしている部分があるかもしれません。その時はアドバイスいただけると幸いです。

## 目次
1. [アプリケーションウィンドウを表示させる](https://qiita.com/tsweblabo/items/23e7e858cc81ccabed59)
1. [ウィンドウの中に表示領域を作る。](https://qiita.com/tsweblabo/items/27ffa4802762b12ff896)
1. ボタンの追加

---

### 参考サイト

- [Java® Platform, Standard Edition & Java Development Kit
バージョン11 API仕様](https://docs.oracle.com/javase/jp/11/docs/api/index.html)
- [Let's プログラミング Swingを使ってみよう](https://www.javadrive.jp/tutorial/)
jQueryで顔認識機能を実装できる「jQuery Face Detection Plugin」を試してみた

#jQuery Face Detection Pluginを試してみた
いつの間にかJavaScriptで顔認識を実装できるような時代になっていたので[jQuery Face Detection Plugin](http://facedetection.jaysalvat.com/)というjQueryライブラリを使ってみました。


##ダウンロード
まず、[公式サイト](http://facedetection.jaysalvat.com/)よりjQuery Face Detection Pluginをダウンロードします。
ダウンロードしたら**jquery.facedetection.zip**というファイルが落ちてきます。
解凍したら、**jquery.facedetection.min.js**と**jquery.facedetection.js**が入っているので好きな方を
bodyの閉じタグの上あたりに読み込ませます。

##読み込み
bodyの閉じタグの上に以下のスクリプトを読み込ませます。

```html:HTML
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="js/jquery.facedetection.min.js"></script>
<script>
// 顔認識の処理を書いていく場所
</script>
```

##プラグインで取得できる値
取得できる値については[こちらのブログ](https://syncer.jp/how-to-facial-recognition-by-javascript)で丁寧に解説されていますが主に取得できる値は以下になります。

|値|内容|
|---|---|
|x|画像の中の顔範囲のX座標|
|y|画像の中の顔範囲のY座標|
|width|顔範囲の横幅|
|height|顔範囲の縦幅|
|positionX|親要素内の顔範囲の横位置|
|positionY|親要素内の顔範囲の縦位置|
|offsetX|ドキュメント内の顔範囲の横位置|
|offsetY|ドキュメント内の顔範囲の縦位置|
|confidence|顔認識の信頼性を示すレベル値|


#顔認識のサンプルを試してみた

##HTML
```html:HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>faceDetection</title>
<style>
  .picture-container {
    position: relative;
  }
  .face {
    border: solid 3px #fff;
  }
</style>
</head>
<body>
<div class="picture-container">
<!--　認識させたい顔の画像 -->
<img id="picture" src="img/face.jpg">
</div>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="js/jquery.facedetection.min.js"></script>
<script src="js/script.js"></script>
</body>
</html>
```

##JavaScript

```javascript:JavaScript
$('#picture').faceDetection({
    complete: function (data) {
        for (var i=0; i<data.length; i++) {
            /*顔認識したところをボーダーで囲む*/
            $('<div>', {
                'class':'face',
                'css': {
                    'position': 'absolute',
                    'left'    : data[i].x * data[i].scaleX + 'px',
                    'top'     : data[i].y * data[i].scaleY + 'px',
                    'width'   : data[i].width * data[i].scaleX + 'px',
                    'height'  : data[i].height * data[i].scaleY + 'px'
                }
            }).insertAfter(this);
        }
    },
    error: function (code, message) {
        alert('Error: ' + message);
    }
});
```
##検証結果

しっかり顔を認識してボーダーが付きました！
![face.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10793/f8dbb321-9091-7b2c-3deb-3224889e4a7f.jpeg)

###複数人でも認識するか？

![faces.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10793/a61f292d-a5f7-e77a-d956-02e6456813d5.jpeg)

なぜか一人だけ認識されない結果になりました…。
複数人いた場合、認識の精度はイマイチのようです。

#まとめ
実務で取り入れるには若干精度に不安が有りそうですが、遊びでやるには面白いかなと思いました。
ちなみにJavaScriptで顔認識のできるライブラリは他にもあって[clmtrackr.js](https://www.npmjs.com/package/clmtrackr)というライブラリも良く使われており、そちらは顔の目や口などパーツ単位での認識も可能なようです。
jupyter自動立ち上げメモ

ubuntu18.04で起動時に自動でjupyterを立ち上げれるようにするときの設定

jupyterが立ち上がったとしても、cuda, cupy の環境変数あたりの読み込みがうまくいってなかったようで、スクリプト上で ./bashrc を強制的に読み込ませた

今回の動作ユーザ名は「samacoba」で、適宜書き換えが必要

### jupyter立ち上げ用スクリプトを作成

systemdからだとbash環境が読み込まれていないようで、bashrcを読み込んだあと、jupyterを実行するスクリプトを作成（とりあえずDesktopに置いた）

* ~/Desktop/run_jupyter.sh

```
#!/bin/bash

source ~/.bashrc
jupyter-notebook
```

### 実行権限を追加

```
$ chmod +x Desktop/run_jupyter.sh 
```

### .bashrcのブロックをコメントアウト

https://qiita.com/takaram/items/17e739e9b7d4d7b6de42

スクリプト上でsource ~/.bashrcをしても、ブロックされるので、ブロックしているところをコメントアウトする

* ~/.bashrc

```
# If not running interactively, don't do anything
#case $- in
#    *i*) ;;
#      *) return;;
#esac
```
### sytemdのserviceファイルの作成

https://qiita.com/k0kubun/items/3c94473506e0e370a227

systemdのサービスファイルを作成する。systemd/userフォルダがないときは作成。

* ~/.config/systemd/user/jupyter.service

```
[Unit]
Description=Jupyter Notebook

[Service]
Type=simple
WorkingDirectory=/home/samacoba
ExecStart=/bin/bash /home/samacoba/Desktop/run_jupyter.sh

[Install]
WantedBy=default.target
```

### sytemdサービス自動起動有効

```
$ systemctl --user enable jupyter
```

⇒再起動すると自動でjupyterが立ち上がっていた


### systemctl　サービスコマンド一覧

https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9
それぞれが任意の分布に従う，相関を持つ２確率変数の（近似的）作り方メモ

# 要点
- 標準正規分布に従う確率変数X，χ2分布に従う確率変数Yを，任意の相関係数ρで作成する方法を探していました．
- X, Yともに標準正規分布に従うならば，以下の方法で作成することができます．
  - numpy.random.multivariate_normal関数を使用する．
     - 多次元標準正規分布ならば，分散共分散行列が相関行列と等しくなるので, covmtx=[[1,ρ],[ρ,1]]
- 標準正規分布でなくても，平均がゼロで分散が等しい分布ならば，[horiemさん解説のこの方法](https://qiita.com/horiem/items/30a8783604ae67cdd63e)で生成できます．
- X~標準正規分布とY~χ2分布はこの方法の条件を満たさないので、別の方法で生成する必要があります．
- 一時しのぎの荒業として，多次元標準正規分布で相関を持たせて2確率変数を生成し，その片方を別の確率分布に従うように変換する方法をメモしておきます．
  - Y -> 標準正規分布の累積分布cdf(Y) -> 任意の分布のパーセント点関数ppf(cdf(Y)) -> Z
  - なんのこっちゃ、というときは[こちらを参照](http://kaisk.hatenadiary.com/entry/2015/02/17/192955)のこと．
  - 変換後の相関係数の値を厳密に指定できないという欠点があるので、要注意．

# コード
```python3:sample.py
# import numpy as np
# import scipy.stats as spstats

# generate X,Y ~ multinormal(mu = [0,0], cov = [[1,ρ],[ρ,1]])
rho_norm = 0.8 # correlation coeff for multinorm
mu = [0, 0] # mean of X, Y
cov = [
         [1, rho_norm], 
         [rho_norm, 1]
      ] # cov matrix

vals_norm = np.random.multivariate_normal(mu, cov, 100000)
x_norm = vals_norm[:,0]
y_norm = vals_norm[:,1]
# np.corrcoef(x_norm, y_norm) gives a rho value around rho_norm

# convert Y to Z ~ chi2(k)
k = 3 # parameter of chi2 dist
z_chi2 = spstats.chi2.ppf(spstats.norm.cdf(y_norm, loc = 0, scale = 1), df = k)

# x_norm ~ norm(mu = 0, var = 1) and z_chi2 ~ chi2(k = 3)
# np.corrcoef(x_norm, z_chi2) gives a rho value a bit smaller than rho_norm
```
# 結果
相関係数0.8で生成したX, Yの散布図と周辺分布はこんな感じになります．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206520/300a535d-6447-819d-56f4-12c59e8148ee.png)
で，上記の変換を噛ませたZについて，Xとの散布図と周辺分布はこんな感じになります．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206520/c17eafc6-3fec-0aee-22b3-b399a18651f8.png)
Z(縦軸)について，周辺分布がk=3のχ2分布に変換されていることがわかります．
このときの相関係数（相関行列が求まるので，[0,1]成分）は
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206520/6e406a34-9318-82c6-508c-b34cd7b81681.png)
正の相関は保たれていますが，多次元標準正規分布でX-Y間に指定した相関係数(0.8)より小さくなっちゃってますね．# -> 2021/12/15 コメントを受け末尾註追記

今回はYをχ2分布へ変換しましたが，任意の分布へ変換することが可能です．また，Xも同様に変換可能です．

# 注意点
この方法では変換後の相関係数を厳密に指定することができません．
もっと正攻法は方法があるように思いますが，ちょっと見つけることができなかったので，ここにメモしておきます．
誰かもっとやりやすい方法教えてください．

11/26追記：matlabの本家解説に[こんなの](https://jp.mathworks.com/help/stats/copulas-generate-correlated-samples.html)ありました．ほぼ同じアプローチですが，より詳細に記述されています．FMI(For My Info)

2021/12/15追記：非線形な関係に変形しているので、ピアソンの相関係数が小さくなるのは当たり前でしたね。コメントで指摘いただいたように、スピアマンの順位相関係数などで評価をするなら、相関係数は大きく変化していないはずです。
関連1:[Pythonで相関がある任意の確率分布に従う乱数を生成する](https://qiita.com/yasuyuki-s/items/6e54abe7fee69b677c1e)
関連2:[Pythonでモンテカルロ法を用いた建設コストリスクの定量化（多変量解析）](https://qiita.com/yasuyuki-s/items/0ec94fc879b9f0876cc2) <- 多変量で同様の変換を実施
PyInstaller3.5がPython3.8でエラーになる場合の対応(TypeError: an integer is required (got type bytes))

## 事象
記事投稿時点(2019/11/27)だとPyInstallerをPython3.8で実行すると、以下のエラーが発生する
>TypeError: an integer is required (got type bytes)

## エラーの理由
現在(2019/11/27)の安定板であるPyInstaller3.5が、Python3.8に対応していないため。

## 対応策
Development版をダウンロードする。
pipでインストールするなら以下の通り。
>pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
Sketchののメニューが中国語になった時の解決方法

_-デイビッドチャンに捧ぐ-_

突然ですが私のSketchが中国語になりました。
私の仕事はディレクターで、デザインカンプをクライアントから貰うことから案件が始まります。

最近はデザインカンプをXDでもらう事が多く、Sketchを開くことも少なくなってきました。
だから、久しぶりにSketchを開いた時、焦りました。
だって、、、メニューが全部漢字になっているのですもの、、、

↓こんな感じ
<img width="1429" alt="222.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384872/6b6d72ae-2fd3-09a3-e6b5-e1506e2ae89b.png">

↓
<img width="809" alt="スクリーンショット 2019-11-27 13.35.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384872/d42acce8-7e45-5bd3-e9fa-18583b82067d.png">



結論として**英語の世界**に戻ることが出来たので、ココに共有します。
(ググっても出てきませんでした。)


##中国語メニューから英語メニューに戻す方法
システム環境設定の言語と地域の優先する言語を`日本語>英語>簡体中国語`にする。
↓こんな感じ
<img width="780" alt="スクリーンショット 2019-11-24 22.30.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384872/fb6147db-7ffe-9c8f-c23e-2b8e024b6f20.png">


Sketchはこの言語設定部分を見て`中国人か？`、`中国人以外か？`を見てメニューの設定を自動で変えているようです。
Preferenceの中に言語設定入れてほしいです。。。


ここまでたどり着くのに**2ヶ月**かかりました。（ほとんど使っていないから、中国語のままでも良かったのですが。。。）

## 中国語から英語になるまでの仮説と検証
以下が中国語になったSketchを英語い変更する際に実施した仮説と検証です。（読む価値ないです）

**仮説 キーボードの入力ソースに中国語を入れたから？**
仕事上中国語を入力する場面がありましたので、追加しました。
私は中国語を入力できないので、適当にタイプして適当なタイプから漢字に変わるのを見て遊んでいただけです。
その、遊んでいたことが原因で私のSketchが中国語になったのだと思い、キーボードから中国語を削除しました。

**結果**
変わらない。そして諦める。（たまにググって同じ現象の人が現れないかに期待する）
＼ 諦めても解決する事ってあるんですね！（ポジティブ）/


### サンシーアでは一緒に働くフロントエンドエンジニアを募集中です！！
特にWordPressがDeepに得意な方大募集中です！！

**詳しくはコチラ↓**
https://www.sunseer.co.jp/recruit/careers/frontend.html
クラウドワークス

#クラウドワークス　途中契約終了
契約して仮払したのに、なかなか作業を進めてくれない場合。

期限が来たら自動でキャンセルになる。
仮払したお金は、銀行振込で返金してもらうか
次回以降の依頼に使用することが可能。

でも、もう途中で終了したい場合
「途中契約終了」ボタンで申請が可能。
【メモ】viモード（set -o vi）でコマンドライン入力

最近になって知ったので備忘録としてメモ。

ターミナルログイン時に以下を実行

```
set -o vi
```

コマンドライン入力時に`ESC`キーを押すと、viが使えるになる。
`/`+keywordでヒストリーからコマンド検索が使えたりして便利に。

また、直接profileに`set -o vi`を追記して、毎回ログインした際にコマンド打たなくても使えるようになります。

# 参考文献
[viモード（set -o vi）で楽ちんコマンド入力](http://g-network.boo.jp/wiki/2017/02/post-106/)
WebRTCでストリームの音量を変更する

### やりたかったこと
音声通話をするときに、マイクの音量を変更したい。
そのときにストリームの音量を変更して、通信相手にも変更した音量で音声が聞こえるようにしたい。

### MediaStreamの音量を変更する方法
1. getUserMediaでMediaStreamを取得する
2. AudioContextを作成する。
   AudioContextはユーザーの操作（クリックなど）があったときに生成しないとエラーやWarningがでたりする。

    ```js
    audioContext = new (window.AudioContext || window.webkitAudioContext)();
    ```

3. 1で取得したMediaStreamを指定して、MediaStreamAudioSourceNodeを生成する。
   MediaStreamAudioSourceNodeオブジェクトからの音声は再生や編集が可能になる。

    ```js
    source = audioContext.createMediaStreamSource(stream);
    ```
4. AudioContextからMediaStreamAudioDestinationNodeを生成する。
   MediaStreamAudioDestinationNodeのstreamプロパティはMediaStreamと同じような使い方ができる。
   このstreamをRTCPeerConnectionで送信することができる。

    ```js
    audioDestination = audioContext.createMediaStreamDestination();
    ```
5. AudioContextからGainNodeを生成する。
   GainNodeで音声のボリュームを操作できる。
   
    ```js
    gainNode = audioContext.createGain();
    ```
6. 3〜5で生成したNodeをconnectで接続する
   audioDestination(MediaStreamAudioDestinationNode)のstreamで音量が変更されたstreamにアクセスすることができる。

    ```js
    source.connect(gainNode);
    gainNode.connect(audioDestination);
    ```

↓ Sample(スライダーで音量変更するだけ)

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="js,result" data-user="mossan245" data-slug-hash="YzzbNPz" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="gainNode-test">
  <span>See the Pen <a href="https://codepen.io/mossan245/pen/YzzbNPz">
  gainNode-test</a> by mossan245 (<a href="https://codepen.io/mossan245">@mossan245</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

### WebRTCで通信相手に音量変更したStreamを送信する

送信しているMediaStreamの音声のトラックをMediaStreamAudioDestinationNodeのstreamのAudioTrackで置き換えることで実現できる。
Trackの置き換えにはRTCRtpSender.replaceTrack()を利用する。

[RTCRtpSender.replaceTrack()](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack)

しかし、FFやSafariだとうまく音量が変更されたStramの送信がうまいくが、Chromeから送信すると受信側で音声が再生されなくなってしまう。
どうやらChromeにバグがあるらしく現状のバージョンだとうまく動かない。
そのため、Chromeの場合は別途音量変更を通知する仕組みを用意して、通信相手側で直接音量を変更する必要がある。

### 参考

* [Changing Volume on Remote WebRTC Streams in Chrome](https://blog.twoseven.xyz/chrome-webrtc-remote-volume/)
* [GainNode.gain](https://developer.mozilla.org/en-US/docs/Web/API/GainNode/gain)
* [RTCRtpSender.replaceTrack()](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack)
今更ながらRe:VIEWに手を出す

## 黒歴史

PDFで配布する資料の作成のため、いろんなものを試してきた。

### Word

デザインの指定がすごい面倒。
たまに崩れたり、項番のインデントがうまくいかなかったりでまず先に捨てた。

### TeX

学生時代のノリで使っていたが、

「他のメンバーが誰もメンテできない」

と理由で(それはどうかと思いつつ)却下。

### Markdown to PDF

VSCodeの拡張機能からインストール。
単ページの印刷はちょうどよかった。

ただし、章立ての文章などは作れないので、
併用し続けることにした。

### Gitbook

長らくお世話になっていたツール。詳しくは[この記事](https://qiita.com/hikaruright/items/0123f63be52bb2e0f4a4)を参照。
デザインのカスタマイズも可能で、Web/PDFの両出力が可能であった。

ただし、問題点が2点あり、

**画像サイズをうまく変更できない**
  正確には変更できるが、WebとPDF両対応の方法がなかった

**section/subsectionがうまく動かない**
  改ページを入れると項番がずれる。
  PDF化する際に結局うまくいかなかった。

### Pandoc

インストールが少し戸惑うが、PDF出力前提であればきちんとした物が作れる。

しばらくはこれを使用していた。

## たどり着いた真理

PDFとWeb両対応はやめよう。

## 新しい選択肢を試す

### Re:VIEW

実際に技術系同人誌を作成するにも使われているらしく、
結構高性能。

#### 始め方

とてもいいDockerImageがあったので、
何も考えずにそちらを使用します。

#### Dockerのインストール

省略。

#### プロジェクトの作成

以下のコマンドでプロジェクトを作成します。

```shell
% docker run -it -v $(pwd):/work vvakame/review /bin/bash -c "cd work && review-init introduction-of-review"
```

#### ビルド

以下のファイルを作成します。

```shell:pdf.sh
#!/bin/bash
docker run -it -v $(pwd):/work vvakame/review /bin/bash -c "cd /work && rake pdf"
```

作成後、実行権限を与えましょう。

```shell
% chmod +x pdf.sh
```

あとは、以下のコマンドを打ち込むだけでPDFが生成されます。

```shell
% ./pdf.sh
```

簡単にそれっぽい文章が出てくるので、
書き始めるには良さそう。

ただ、Pandocの方が生Markdownをそのまま変換できるので楽っちゃー楽。

比較はまた今度。
GoogleColaboratoryでデータ入出力をする（1. ブラウザ経由編）

# はじめに
この手の記事は腐るほどあるけど、自分の欲しい用途で素直にしっくりくるやつが
見つからなかったので、自分なりに整理しなおした

# 参考情報
https://qiita.com/5at00001040/items/d7867974d2fd1d21dbbf

# 入出力の方法
GoogleColaboratory(以下、colab)にはいくつか入出力のやり方があります。
1.ブラウザ経由でファイルアップロード/ダウンロード　　←　今回はココ！
2.GoogleDriveからインポート/エクスポート
3.Googleスプレッドシートからインポート/エクスポート

# 入出力にあたっての注意点
ファイルをダウンロードをするには一度colabのローカルにファイル保存する必要がある。

なので、pandasのdataFrameを直接ダウンロードしたらcsv形式で
出力される。ということはできない。残念。

ただ、配列データ([1,2,3,4]みたいな）に限って言えば
　③Googleスプレッドシートからインポート/エクスポート
が使える。逆に③は配列データでなければ使えない。一長一短。

# 1.ブラウザ経由でファイルアップロード/ダウンロード
ある意味、これがわかればもう自分が知りたいことは十分な感じなので一番最初に書く。

## ローカルPCからColabへアップロード
このcsvファイルをアップロードする。以下のコマンド実行。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/87d76999-8cc6-091e-c9be-b835c233f837.png)

```Python
from google.colab import files

files = files.upload()
file_name = list(files.keys())[0]
file_string = files[file_name].decode()

file_string
```
実行すると、ファイル選択フォームがあらわれるのでそこにファイルをD＆D。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/a9afe7f0-e759-38db-e3b4-a89c63ffb059.png)

成功したときの画面がコチラ。
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/fcb449c7-40d2-948e-6721-e074b1dfb276.png)


このファイルを読み込んでどうのこうのしたい場合は、毎度おなじみのopen()を使ってもいいけど
自分はcsvファイルをよく扱うpandasを使って読み込んでみて結果確認。

```Python
import pandas as pd
df = pd.read_csv('iris_dataset.csv')
df
```

実際の画面がコチラ。
![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/9bbe80bb-67dc-2e58-aeb3-a9dbd51dd74f.png)

アップロード成功～

# ColabからローカルPCへダウンロード
ひとまず、Colabのローカル状況をチェック。

![キャプチャ10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/527ddb09-346a-8c82-e7c1-a1946933ef78.png)

さっきUPしたiris_dataset.csv（黄色ハッチング部）をダウンロードする。
やり方は超簡単。

```Python
from google.colab import files

files.download('iris_dataset.csv')
```

結果がコチラ。
ダウンロード結果、ダウンロードされた場所、ダウンロードしたファイルの中身。
ぜんぶぶち込んだので混雑してるけどちゃんとできたことが確認できた。

![キャプチャ12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/a5a70b43-ee68-ef70-f358-c26bbe239451.png)

ダウンロード成功～

# おわりに
ブラウザ経由でデータのやり取りをするのは案外簡単。
コードをまじないのように覚えておくだけでも十分な気がする。
とはいえ、いちいち覚えておくのは辛いので折に触れてこの記事を読み返すことにしよう。
ポアソン分布に従う互いに独立な確率変数の差が従う確率分布

#Poisson分布
確率変数Xが$P(X=k)= \frac{\lambda^ke^{-\lambda}}{k!}$を満たしているときPoisson分布に従っている。
Poisson分布の確率質量関数を$\lambda=3...10$を図示すると以下になる。
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330569/ba338cee-d78a-2763-63ac-e9134cec14ff.png)

#2つのポアソン分布
$\lambda=5$であるポアソン分布に従う列を二つ用意する。

```python

poisson1 = np.random.poisson(lam=5, size=10000)
poisson2 = np.random.poisson(lam=5, size=10000)
```
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330569/ddd64fd6-c45a-1d2b-ecc1-da3532a2465e.png)

#確率分布の差分

```python
diff = poisson2 - poisson1
```
図示すると
![download-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330569/3f919529-6cbe-c909-2c7b-f14c4f9a9c0b.png)

上のように正規分布に従っているように見える。

これは[Skellam分布](https://en.wikipedia.org/wiki/Skellam_distribution)と呼ばれる分布の一つである。
PowerShellでピザの面積を求める方法

初心者向けです。こういう計算をしたいとき電卓なんか使わずにPowerShellを使う習慣を身に着けよう。
当環境はこちら

```powershell
> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.771
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.771
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
```

半径から求める方法
---
半径が11.5のとき、次のコマンドを実行してください。

```powershell
11.5*11.5*[math]::PI
```
結果

```powershell
415.47562843725
```

`*`はアスタリスクという記号ですが、PowerShellで数値型に挟まれた場合には掛け算の意味になります。

`[math]` は`System.Math`というクラスを表します。特別に`math`が`System.Math`の別名になっているわけではありません。PowerShellがそんたくして型名を検索してくれます。

`::PI`は`System.Math`の`PI`メンバを表します。

直径から求める方法
---
直径が23のとき、次のコマンドを実行してください。

```powershell
23*23*[math]::PI/4
```
結果

```powershell
415.47562843725
```

`/`はスラッシュという記号ですが、PowerShellで数値型に挟まれた場合には割り算の意味になります。

問題
---
半径11.5cmのピザ600円と直径33cmのピザ1500円はどちらのほうがコスパがいいでしょう？

解き方
1円あたりのピザの面積を求めて、どちらが大きいか比べます。
半径11.5cmのピザについて

```posh
11.5*11.5*[math]::PI/600
```
結果

```posh
0.69245938072875
```

直径33cmのピザについて

```posh
33*33*[math]::PI/4/1500
```
結果

```posh
0.570199066626548
```

半径11.5cmのピザのほうが1円あたりの面積が大きいので、コスパがいいです。
`[math]::PI`いらんよねと気づいた人には特別に加点します。
Dockerコマンドメモ(fish)

# Dockerコマンドメモ(fish)
最近dockerとfishをよく使う。
fishでdockerのコマンドを実行しようとしたらbash,zshばかり…。
docker+bashとかの情報はよくあるけど、docker+fishはないことが多いので、メモしておきます。
まあ、kubernetesが主流になって使わないかもだけど・・・。

**Kill all running containers**

```fish:fish
docker kill (docker ps -q)
```
**Delete all stopped containers (including data-only containers)**

```fish:fish
docker rm (docker ps -a -q)
```

**Delete all ‘untagged/dangling’ () images**

```fish:fish
docker rmi (docker images -q -f dangling=true)
```

**Delete ALL images**

```fish:fish
docker rmi (docker images -q)
```
理解　fork() マルチプロセス 

```c:fork_test.c
#include <unistd.h>
#include <stdio.h>
int main ()
{
    pid_t fpid;
    int count=0;
    printf("This will not be forked.\n");
    fpid=fork();
    printf("Will be forked from here.\n");
    if (fpid < 0)
        printf("error in fork!");
    else if (fpid == 0) {
        printf("i am the child process, my process id is %d\n",getpid());

        count++;
    }
    else {
        printf("i am the parent process, my process id is %d\n",getpid());
        count++;
    }
    printf("count= %d\n",count);
    return 0;
}

```

gcc fork_test.c 
a.out

```
 ./a.out
This will not be forked.
Will be forked from here.
Will be forked from here.
i am the parent process, my process id is 28355
count= 1
i am the child process, my process id is 28356
count= 1


 ./a.out
This will not be forked.
Will be forked from here.
i am the parent process, my process id is 28369
Will be forked from here.
count= 1
i am the child process, my process id is 28370
count= 1


 ./a.out
This will not be forked.
Will be forked from here.
i am the parent process, my process id is 28383
count= 1
Will be forked from here.
i am the child process, my process id is 28384
count= 1

./a.out
This will not be forked.
Will be forked from here.
i am the parent process, my process id is 28420
count= 1
Will be forked from here.
i am the child process, my process id is 28421
count= 1
一人でフリーランスとしてWebプログラマーをする限界

# 15年ぐらい前は1人でフルスクラッチできたけど・・・

　自分が独立した15年ぐらい前のWebページは、SPAとかアニメーションたっぷりなWeb画面でもなかった。
そもそもデザインもそれほど技巧的なものもなく、HTMLでも完結するぐらいの比較的単純なものだった。

　開発スタイルは、ローカルにXAMPPいれて、エディタとか、IDEならEclipseとか使うことが多かった。
バージョン管理もCVSとかあったけど、それを使わない人もたくさんいた。

　つまり、昔はやることがすくなかったので、一人でWebシステムをすべてつくろうと思えばできた。

# ユーザーの要求は増え、作業も増え、役割分担が当たり前の時代

　今は、「フロントエンジニア」とかいう言葉が確立するほど、JS、CSS、サーバサイドがきっちり別れている。
分けてやらないといけないほど、お客さんの要求も増えているし、作業量も増えている。

　まして、いまは、ローカルにXAMPPいれてエディタかEclipseいれて開発したら終わりというわけにはいかない。
Gitなどのバージョン管理、VimやVSCode、JetBrainsのIDE、CicleCIやJenkins、AWSやGCPなどのインフラなどなど、いろいろと用意しないと行けないものが増えている。
　
　正直、一人でするには限界があるシステムが多い。いくらフレームワークやテンプレートセットをつかったとしても、案件にはいれば、細かいところを修正することになり、一般的な開発スタイルですればかなりのタスク量になる。

 以下に、Web開発が年を経るごとに分業化していることについて概要を書いてます。

[▶ 2000年～2019年にかけてWebのフロント開発は進歩しているのか？](https://qiita.com/SFITB/items/4310fd64011bf4793cc4)

# マネージメント・設計をおろそかにするフリーランスの案件に炎上がつきもの

　自分も経験があるし、同業のフリーランスからもよく聞くのが炎上案件。
　その原因はいろいろあるけど、要件定義、設計を行わない、いい加減である。マネージメントもまともにできてないなどが挙げられる。
　正直、一人で、要件定義、設計、テスト、製造、打ち合わせなどできるわけがない。小さい仕事ならいざしらず。

# フリーランスのプログラマーは繋がりを求める

　フリーランスのプログラマーは、営業目的にしろ、技術的な情報交流のためにしろ、つながりを求める。
そして、チームで仕事をしたいという提案がでたりもする。
　
　昔ならそこまでチームで動くというニーズはなかったかもしれないが、最近は、冒頭に述べたように一人でするには限界があり、多くのフリーランスのプログラマーはそれを認識しはじめている。

# 「一人でもない、雇われ社員でもない働き方」がより一層求められる時代へ

　だからといって、会社に入って雇われポジションで仕事をしたいかといわれたら、そういうわけではない。
一人でもない、雇われ社員でもない働き方を求める。

　自律的で裁量が高く、自由に動ける。でも、仕事は役割分担をするチーム・ユニット。

 最近は、フリーランスのプログラマーを奨励するようなサービスや風潮もあるが、本当に一人でフリーランスとしてWebプログラマーをするには限界がある。
　自分もいろいろな会社を手伝うがチームが前提で、その中の一部を担うことが多い。特にWeb開発の場合、それが今はあたり前になっている。
　一人で全部する案件は、大体自動化したシステムがあり、定型業務になっている。そういうものは、一人で全部しあげて報酬もすべて自分のものになる。
　でも、やはり過去の蓄積があり、システムをつくっているからこそ一人でできるのであって、何も道具がなければそうした仕事は難しい。

　いずれにしろ、法的な存在としてフリーランス・自営業主はあれど、実際の働き方として、一人でなんでもする時代はWeb開発においては難しくなっている。設計や打ち合わせ、マネージメントの担当、デザイン担当、コーディング担当、インフラ担当、テスト担当など、最小限の独立した個人がチームをつくるという働き方が、ますますふえてくるのではないかという気もする。

　会社に業務委託で入るのともまた違って、そのチームとして独立したユニットになるというスタイルが増えるのではないかと思っている。
（思っているだけだけど）

# ベンチャー企業のように事業化目的ではなく、チームユニットを作るための法人化

　私が知っているある会社は、法人だけれど、よくあるベンチャー企業のように特定の事業を大きくするために作ったものではなく、あくまでも自立した職人が便宜上法人になっているものだった。
　法人化することで、役割分担、完全にくつろぐわけではないけど、秘密基地的なオフィス、サークルや倶楽部のような雰囲気、人間関係をフリーランスの寄せ集めではなく、もう少し強制力をもって実現しているケースがあるように思う。
　
　こうした今までとは違う、法人化の形もあるのではないだろうか。