OmniAICreator/Qiita-1.07M huggingface dataset:
Texture2DをC#ScriptでReadableに変更するには？

```C#
texture2D.EncodeToPNG();
```
↑でいつもErrorになってしまう方へ。
Google先生に聞いても、答えは「Inspectorから操作して解決できる。」
いやいや、自分Scriptで解決したいんです:sweat_smile:
という方はお試しあれ:point_down:

# ・Console上のError

>ArgumentException: Texture '' is not readable, the texture memory can not be accessed from scripts. You can make the texture readable in the Texture Import Settings.

:angry: :angry: :angry: :angry: :angry: :angry: 



## ・Unity公式では？
[こちら](https://docs.unity3d.com/jp/460/ScriptReference/Texture2D.EncodeToPNG.html)をご覧ください。
いや、解決しないぞ:disappointed_relieved:
## ・対処方法
下記のメソッドを呼び出せばOK！

```C#:
   Texture2D createReadabeTexture2D(Texture2D texture2d)
    {
        RenderTexture renderTexture = RenderTexture.GetTemporary(
                    texture2d.width,
                    texture2d.height,
                    0,
                    RenderTextureFormat.Default,
                    RenderTextureReadWrite.Linear);

        Graphics.Blit(texture2d, renderTexture);
        RenderTexture previous = RenderTexture.active;
        RenderTexture.active = renderTexture;
        Texture2D readableTextur2D = new Texture2D(texture2d.width, texture2d.height);
        readableTextur2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
        readableTextur2D.Apply();
        RenderTexture.active = previous;
        RenderTexture.ReleaseTemporary(renderTexture);
        return readableTextur2D;
    }
```

```C#:呼び出し元
byte[] pngData = createReadabeTexture2D(notReadableTexture2D).EncodeToPNG();
```
もっと深くしりたい方は[公式](https://docs.unity3d.com/ja/2018.2/ScriptReference/Graphics.html)をどうぞ。

Texture関連をきちんと理解するとUnityでワンランクアップできますよ♪
【Houdini】あるポイントを含むフェイスをいろいろな vex コードで得る

いろいろなランオーバーで同じことをやってみようシリーズその２です。
ガリガリ vex で頑張る時用のメモなので、あのノードでやると簡単にできる、みたいなのは考慮しておりませぬ。

## あるポイントを含むフェイス一覧を得たい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/3799f8e8-2b5e-c25c-3633-429bbc482dd2.png)
ポイント１２を頂点として含むフェイスに色をつけるコードを、ポイント、頂点、プリミティブ（フェイス）、ディティールのそれぞれのランオーバー指定で書いてみました。全て同じ結果になります。コードでは対象フェイスを hoge グループに格納して、そのグループ対象で色を付けています。

### ポイント

```c
if(@ptnum==12)
{
    int prims[] = pointprims(0, @ptnum);
    foreach(int prim;prims)
    {
        setprimgroup(0, "hoge" , prim, 1);        
    }
}
```
ただ `@primnum` でプリム番号を取るだけだと、代表の１フェイスしか返ってこないので 複数のフェイスを返す `pointprims` 命令を使っています。

## 頂点

```c
if(@ptnum==12)
{
    setprimgroup(0, "hoge" , @primnum, 1);        
}
```
頂点を対象にするコードはとても簡潔になりました。1頂点に対応するポイントもフェイスもそれぞれ一つだからですね。


## プリミティブ

```c
int pts[] = primpoints(0, @primnum);
foreach(int pt; pts) {
    if(pt==12) {
        setprimgroup(0, "hoge" , @primnum, 1);
    }
}
```
プリミティブの場合、ポイントと同じようなコードとなりました。

## ディティール
```c
int numvert = nvertices(0);
for(int i=0;i<numvert;i++)
{
    if(vertexpoint(0, i)==12)
    {
        setprimgroup(0, "hoge" , vertexprim(0, i), 1);
    }
}
```
ディティールの場合、いろいろ書けそうですが、頂点一覧を取得して処理をすすめる形にしてみました。一番内側の if 文以降は頂点のコードと同じ構造（使う命令は違うものの）になってます。まあ当然ですね。foreach でなく for での処理になっているのは、頂点一覧を得る命令がとりあえずは見当たらなかったからです。

## まとめ
プロシージャルモデリングをするにあたって、既存のノードではできない || できても回りくどい処理、を行うために vex を使っているわけですが、動くものは作れるけれど、整理された状態には程遠いので、基本を押さえるためにこのような単純な命題を異なったランオーバーで記述する試みをしています。一般のチュートリアルや教材ではポイントで処理を回す例が多いですが、モデリングを行うに当たっては頂点の処理が欠かせないため、処理対象を頂点としたほうが、簡潔にすむことが多い、、のではないかと思っています。
Pyprojで測地系変換を高速に行う

変換元と変換先の測地系が決まっている場合、大量の座標を変換するのに時間がかかっていたので、調べたら良さそうな方法があったので記載

csvなどで付加情報もある場合はtransformerクラスを使うとよい
https://pyproj4.github.io/pyproj/latest/optimize_transformations.html

```proj_trans.py
import pyproj
from pyproj import Transformer

class GeoTrans(object):
	def __init__(self, from_epsg=4301,to_epsg=4326):
		"""コンストラクタ
		
		Keyword Arguments:
			from_epsg {int} -- [変換元のEPSGコード] (default: {4301})
			to_epsg {int} -- [変換先のEPSGコード] (default: {4326})
		"""
		self.from_epsg = pyproj.Proj('+init=EPSG:{}'.format(from_epsg))
		self.to_epsg = pyproj.Proj('+init=EPSG:{}'.format(to_epsg))
		self._transformer = Transformer.from_proj(self.from_epsg,self.to_epsg)

	def transform(self,lon:float,lat:float): 
		"""測地系変換
		
		Arguments:
			lon {float} -- [経度]
			lat {float} -- [緯度]
			
		Returns:
			[taple] -- [経度,緯度]
		"""
		return self._transformer.transform(lon,lat)
			

if __name__ == "__main__" :
	tky2wgs = GeoTrans(4301,4326)
	wgs2tky = GeoTrans(4326,4301)
	
	lonlats = [(139.742631,35.723784)]
	
	for ll in lonlats:
		# 日本測地→世界測地（WGS84）
		wgs = tky2wgs.transform(ll[0],ll[1])
		print('wgs84:{0[0]:f},{0[1]:f}'.format(wgs))
		# 世界測地(WGS84)→日本測地
		tky = wgs2tky.transform(wgs[0],wgs[1])
		print('tky97:{0[0]:f},{0[1]:f}'.format(tky))
	

```

座標列を変換する場合はproj.itransformを使うでもよい。

昔pyprojをつかった時はtransformerクラスとかあったかな？と思ったら
今年の3月に追加されてた・・・
Pythonのクラス化

こんにちは。まずはこの記事を見ていただきありがとうございます。
実は昨今まで関数だけを羅列したコードを書いていたのですが、
それだとまとまりがないと思い、クラス化してみることに手を出してみました。

ただ最初クラスとして書く際の書き方がいまいち釈然としなかったのもあり、
同じくクラス化をしてみたいと思っていた人の助けになればとおもいますが、
初心者の備忘録的なものと思ってください。



## 基本的なクラス化の書き方

``` Python:test.py

class Test:
    def __init__(self,a):
        self.b = a;
    
    def test(self):
        print(self.b)
        return;

Test("a").test()
#  出力結果
#  a
```

class内ではselfという変数を使って、変数や関数を
呼び出すことができます。
そしてclassの呼び出しの際の変数を指定するのが\_\_init\_\_の個所です。
ここでselfに変数を格納しています。
この時の名前は自由なので、サンプルではbにaを入れています。
そしてclass内の関数に変数を呼び出す際はselfを使用して
呼び出します。

------
## 関数の呼び出し

``` Python:test2.py

class Test:
    def __init__(self,a):
        self.b = a;
    
    def test(self):
        print(self.b)
        return;
    
    def test2(self,b):
        self.test()
        print(b)
        return;
    

Test("a").test2("b")
#  出力結果
#  a
#  b
```

同じclass内の関数を呼び出す際は
self.関数名で呼び出します。
またclass内の関数は別途入力する関数を指定できます。


------
## 継承

``` Python:test3.py

class Test():
    def __init__(self,a):
        self.a = a
        self.b = "b";
    
    def ta(self,a):
        #  aを設定
        self.a = a
        return;
    
    def tb(self,b):
        #  bを設定
        self.b = b
        return;
    
    def tt(self,c):
        #  a,bを表示し、cを設定
        print(self.a)
        print(self.b)
        self.c = c
        print(self.c)
        return;
    
class Test2(Test):
    def __init__(self,a,b,c):
        #  改めてa,b,cを変数として入力
        self.ta(a)
        self.tb(b)
        self.c = c;
    
    def td(self,d):
        # dの設定と表示
        self.d = d
        print(self.d)
        return;
    
    def tt2(self,d):
        self.tt(self.c)
        self.td(d)
        return;
        
Test2('a','b','c').tt2('d')
#  出力結果
#  a
#  b
#  c
#  d
```
継承したクラスの関数の呼び出しです。
変数はセットしないといけないものの、関数はそのまま使えます。


------
## 別の関数の呼び出し

``` Python:test2.py

class Test():
    def __init__(self,a):
        self.a = a
        self.b = "b";
    
    def ta(self,a):
        #  aを設定
        self.a = a
        return;
    
    def tb(self,b):
        #  bを設定
        self.b = b
        return;
    
    def tt(self,c):
        #  a,bを表示し、cを設定
        print(self.a)
        print(self.b)
        self.c = c
        print(self.c)
        return;
    
class Test2:
    def __init__(self,c):
        #  改めてa,b,cを変数として入力
        self.c = c;
    
    def td(self,d):
        # dの設定と表示
        self.d = d
        print(self.d)
        return;
    
    def tt2(self,a,d):
        Test(a).tt(self.c)
        self.td(d)
        return;
        
Test2('c').tt2('a','d')
#  出力結果
#  a
#  b
#  c
#  d
```

別の関数を呼び出すときはクラス名.関数名と呼び出します。
この時に最初に入力を求められる変数の入力は必須です。



一応ここまでまとめてみました。いかがだったでしょうか。
小規模なプログラムだとあまりクラス化の恩恵は感じにくいらしいですが、
実際に機能ごとにクラスでまとめられるため、
ソースの整理にうってつけとは思いました。（書き方はややこしくなりますが）

またこのほかに＿＿で囲まれた特殊属性なるものがあるということで、
そちらについてもこれから学んでいきたいと思います。


ご意見や私的などございましたら、気軽にコメントください。

# 2019/7/13 クラス名について修正
WSLでwindowsディレクトリがマウントされないのを対処した「備忘録」

# あらすじ
VSCode RemoteでWSLをベースにやろうとしたら[ここ](https://github.com/microsoft/vscode-remote-release/issues/21)のようなエラーが起きていた。

```
VS Code Server for WSL closed unexpectedly. Check WSL terminal for more details

Launching C:\WINDOWS\System32\wsl.exe bash -i -c "./scripts/wslServer.sh 473af338e1bd9ad4d9853933da1cd9d5d9e07dc9 insider .vscode-remote  " in c:\Users\User\.vscode-insiders\extensions\ms-vscode-remote.remote-wsl-0.31.0
```

VSCode側のエラーだと思っていたのだが、wslの```/mnt/c```を見てみるとなにもないのでこりゃマウントできてないなということで直したところ直った

# 結論
私の場合は```/etc/wsl.conf```が誤った記述になっていたので修正した。

```wsl.conf
[automount]
enabled = true
root = /mnt/
options = "metadata, umask=22, fmask=11"
mountFsTab = true
```
をコピペして上書きすれば直ります。

私の環境ではなぜか```options = "metadata. umask...```カンマがピリオドになっているためにおかしくなっていた。


# 概要
## 1.状況の確認
マウントされていないということで、いつもの```df -hT```でマウント状況を確認。

```
$ df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
rootfs         wslfs  167G   96G   71G  58% /
none           tmpfs  167G   96G   71G  58% /dev
none           tmpfs  167G   96G   71G  58% /run
none           tmpfs  167G   96G   71G  58% /run/lock
none           tmpfs  167G   96G   71G  58% /run/shm
none           tmpfs  167G   96G   71G  58% /run/user
cgroup         tmpfs  167G   96G   71G  58% /sys/fs/cgroup
```

これを見ると普通にマウントされていないことがわかる。
再マウントを行う```mount -a```では効果がなかったので、おそらくconfigが間違っているのであろうと推測

## 2.設定の確認
通常、Linuxでmountしたいときは```/etc/fstab```に記述をするが、WSLでは```/etc/fstab```にはwindowsディレクトリは書かれていない。
WSLでは```/etc/wsl.conf```にwslの設定が書かれている。[参考](https://www.atmarkit.co.jp/ait/articles/1807/12/news036.html)
（通常？初期状態では/etc/wsl.confファイルは存在していなさそうであるが、何らかの理由で作成されているときがある）

wsl.confを消してみたが変化がない
-> おそらく前回の設定を引きずるようになっている．

参考のリンクをもとに設定を修正．
修正したところ無事にマウントされるようになりましたと．
PythonでSeleniumを使うならWebDriverのラッパーを定義すると見通しがよくなる

PythonからSeleniumを扱う場合、書きがちなコードは次の通り。

~~~python:sample.py
import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

try:
    opt = Options()

    # optの初期化コード

    driver = webdriver.Chrome(options=opt)

    # スクレイピング

finally:
    driver.quit()
~~~

この書き方だとスクレイピングの処理が長くなった時に見通しが悪くなりがち。
改良版がこちら。

~~~python:sample2.py
from webdriver_wrapper import WebdriverWrapper

with WebdriverWrapper():
    # スクレイピング
~~~

~~~python:webdriver_wrapper.py
import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

class WebdriverWrapper:
    def __init__(self):
        self._opt = Options()
        self._driver = None
        # optの初期化コード

    def __enter__(self):
        self._driver = webdriver.Chrome(options=self._opt)
        return self._driver

    def __exit__(self):
        self._driver.quit()
~~~

コード量は増えたがモジュール毎に役割が明確になったので処理の見通しはよくなった。
(積分)「youtubeの【高校数学】今週の積分」 をsympyでやってみたい

オリジナルリンク

https://www.youtube.com/watch?v=s8XM-hd9wso

```fullscript.py
# wolframalpha
# https://www.wolframalpha.com/input/?i=sin(1%2Fx)%2Fx**3
# Cos[x^(-1)]/x - Sin[x^(-1)]
from sympy import *
var("x")
f=sin(1/x)/x**3
print(integrate(f,x))
# -sin(1/x) + cos(1/x)/x
```

# 
https://www.youtube.com/watch?v=NZ1lPPmx89k

```fullscript.py
# wolframalpha
# https://ja.wolframalpha.com/input/?i=-1%E3%81%8B%E3%82%891%E3%81%AE%E7%AF%84%E5%9B%B2%E3%81%A7x**2%2F(1%2Bexp(x))%E3%82%92%E7%A9%8D%E5%88%86
# -1から1の範囲でx**2/(1+exp(x))を積分
# 0.333333
from sympy import *
var("x")
f=x**2/(1+exp(x))
print(integrate(f,(x,-1,1)))
# sympyで計算してくれない。
# Integral(x**2/(exp(x) + 1), (x, -1, 1))
```
[jquery] 目次 TOC - Table Of Contents


メモ

```ruby:example.html.erb
<div id="toc" class="toc"></div>
```




```ruby:example.html.erb

<script type="text/javascript">
$(function(){
        var idcount = 0;
        var toc = '';
        var currentlevel = 3;
        $(".listingText h1, .listingText h2, .listingText h3, .listingText h4 .listingText h5 .listingText h6",this).each(function(){
            this.id = "chapter-" + idcount;
          idcount++;

            var level = 0;
            if(this.nodeName.toLowerCase() == "h1") {
                level = 1;
            } else if(this.nodeName.toLowerCase() == "h2") {
                level = 2;
            } else if(this.nodeName.toLowerCase() == "h3") {
                level = 3;
            } else if(this.nodeName.toLowerCase() == "h4") {
                level = 4;
            } else if(this.nodeName.toLowerCase() == "h5") {
                level = 5;
            }
            while(currentlevel < level) {
                toc += '<ul class="chapter">';
                currentlevel++;
            }
            while(currentlevel > level) {
                toc += "</ul>";
                currentlevel--;
            }

            toc += '<li><a href="#' + this.id + '">' + $(this).html() + "</a></li>\n";
        });
        while(currentlevel > 0) {
            toc += "</ul>";
            currentlevel--;
        }
        $("#toc").html(toc);

});


$(function() {

  $("#toc").hover(function() {

    // カーソルが当たった時の処理
    $(this).css("background-color", "gray");

  }, function() {

    // カーソルが離れた時の処理
    $(this).css("background-color", "#CCC");

  });
});

$('div#toc').css({
    'color':'gray',
    'text-align':'left',
    'font-weight':'none',
    'list-style': 'none',
});
</script>
```
bashでファイルを待つ

##bashでファイルを待つときの関数メモ

Loggingは[@Ets](https://qiita.com/Ets/items/cd3baa5cecbf553f822d)さんを参考にしています。

```bash:utils.sh
#!/bin/bash

readonly PROCNAME=${0##*/}
function log() {
  if [ "${LOGFILE}" = "" ];then
    return 99
  fi
  local fname=${BASH_SOURCE[1]##*/}
  echo -e "$(date '+%Y-%m-%dT%H:%M:%S') ${PROCNAME} (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $@" | tee -a ${LOGFILE}
}
 
function filecheck() {
    FILENAME="$1"
    INTERVAL=$2
    RETRY=$3
    CNT=0
 
    while :
    do
        if [ -f "$FILENAME" ]; then
            log "file exists."
            return 0
        fi
        if [ $RETRY -lt $CNT ]; then
            log  "file not found."
            return 99
        fi
        CNT=$(( $CNT+1 ))
        log "Count=$CNT"
        sleep $2
    done
}
``` 

呼び出し側

```bash:wait.sh
#!/bin/bash
LOGFILE="./log.txt"
. ./utils.sh
 
filecheck "test.trg" 5 5
log "return=$?"
exit 0
```
DockerでGoの開発環境を構築する

Go言語の勉強を始めたので備忘録がてら書いてみます。
今回は環境構築のみですが、Go言語でのAPIサーバーの開発編を続編で書けたらいいなと思ってます。

# なぜDockerで？

Dockerでの環境構築は、様々なメリットが存在します。

1. どのOSでも簡単に環境構築が出来る
2. ホストOSと開発アプリが隔離されるので安全
3. デプロイやテストが楽になる
4. ホストOSにインストールするソフトウェアが減る

Dockerは最高です。

# そもそもDockerとは？

コンテナ型の仮想環境を扱うためのプラットフォームです。
コンテナと呼ばれる軽量、高速に動作する仮想マシンのようなものを作成、配布、実行することができます。
詳細についてはさくらナレッジの記事がわかりやすいのでそちらをご覧ください。
>[さくらナレッジ
Docker入門（第一回）～Dockerとは何か、何が良いのか～](https://knowledge.sakura.ad.jp/13265/)

# Dockerのインストール
Windows と Mac は docker hub の公式ページでインストーラーがダウンロードできます。

- [windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows)
- [mac](https://store.docker.com/editions/community/docker-ce-desktop-mac)

Linux系は`apt-get`や`yum`を使用し、インストール出来ます。

詳細については、以下の記事が参考になります。
> - [Dockerインストールメモ @n-yamanaka](https://qiita.com/n-yamanaka/items/ddb18943f5e43ca5ac2e)
> - [LinuxにDockerをインストールする @yoshiyasu1111](https://qiita.com/yoshiyasu1111/items/f2cab116d68ed1a0ce13)

# 環境構築

はじめに、端末で作業ディレクトリを作成し、そこに移動します。

```shell
mkdir work # workディレクトリ作成
cd work # 作成したworkディレクトリに移動
```

## Dockerコンテナの設定を書く

Dockerは、docker hubで配布されているDockerイメージをもとに、コンテナのインスタンスを作成することが出来ます。
今回は、配布されているDockerイメージをそのまま使うのではなく、`Dockerfile`を駆使してカスタマイズしたイメージを作成します。

また、docker-composeというツールを使用することで、コンテナのビルドから連携までの設定をyml形式のファイルベース(`docker-compose.yml`)に記述し、自動化できます。

作業ディレクトリに`Dockerfile`と`docker-compose.yml`を作成します。
作成したファイルをお好きなエディタで開き、編集していきます。

```Dockerfile:Dockerfile
# ベースとなるDockerイメージ指定
FROM golang:latest
# コンテナ内に作業ディレクトリを作成
RUN mkdir /go/src/work
# コンテナログイン時のディレクトリ指定
WORKDIR /go/src/work
# ホストのファイルをコンテナの作業ディレクトリに移行
ADD . /go/src/work
```

```yaml:docker-compose.yml
version: '3' # composeファイルのバーション指定
services:
  app: # service名
    build: . # ビルドに使用するDockerfileがあるディレクトリ指定
    tty: true # コンテナの起動永続化
    volumes:
      - .:/go/src/work # マウントディレクトリ指定
```

`Dockerfile`、`docker-compose.yml`はもっと色々遊べるので、調べてみてください！

## buildする
docker-composeのコマンドを使用して、コンテナを作成します。
> [Docker Compose - docker-compose.yml リファレンス @zembutsu](https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa)

`Dockerfile`、`docker-compose`がある作業ディレクトリで

```shell
docker-compose build
```

を実行。
すると`docker-compose`による`Dockerfile`で構成したDockerイメージの作成が始まります。
正常に終了するとイメージファイルが用意され、Dockerコンテナの立ち上げが可能になります。

下記のコマンドで、用意されているイメージファイルを確認できます。

```shell
docker-compose images
```

## Dockerコンテナ起動

同じディレクトリで

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

を実行するとdockerが起動します。
`-d`オプションをつけることでバックグラウンドでの起動となります。

コンテナの状態確認は、以下のコマンドで出来ます。

```shell
docker-compose ps
```

## 開発してみる

Goで Hello, World! を書いて実際に動かしてみます。
ホストの`work`の中に`main.go`ファイルを作成し、以下のコードを書きます。

```go:main.go
package main

import "fmt"

func main() {
	fmt.Println("Hello, World!")
}
```

ホストの`work`ディレクトリはコンテナの`work`ディレクトリにマウントされているので、作成した`main.go`はコンテナからもアクセスが出来ます。
以下のコマンドで、main.goをコンテナの環境で実行できます。

```shell
docker-compose exec app go run main.go
# docker-compose exec サービス名 コマンド
```

**Herro, World!**
できましたか？

コンテナのシェルに入って実行することも可能です。

```
docker-compose exec app /bin/bash # コンテナのシェル起動
go run main.go
```

これで環境構築は完了です！
作業ディレクトリをそのままGithubでソース共有すれば、Dockerさえあれば誰でも簡単に環境が構築できてしまうのです...！
DjangoでOpenCVが動かないと思った時の対処法

# Background
`try ~ except` でもエラーが検知しなかったので、OpenCVとhttpd(Apache)が原因じゃないかと思って調べたらそうだったという話です。

## Environment
- Python 3.6.8
- Django 2.0
- Apache 2.4.39


# Method
mod_wsgi の設定で1行追加するだけです。

```
WSGIApplicationGroup %{GLOBAL}
```

### Supplement

他のmod_wsgiはこんな感じ

```apache
LoadModule wsgi_module /usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

WSGIPythonPath /home/path_to/django_project/:/usr/local/lib/python3.6/site-packages/:/usr/local/lib/python3.6/

WSGIScriptAlias /XXXXX /home/path_to/django_project/setting_folder/wsgi.py

<Directory /home/path_to/django_project/setting_folder/>
        <Files wsgi.py>
                Require all granted
        </Files>
</Directory>

Alias /static/ /home/path_to/django_project/static/
<Directory /home/path_to/django_project/static/>
        Require all granted
</Directory>

```

# Reference
[django apache mod-wsgi hangs on importing a python module from .so file
](https://stackoverflow.com/questions/4236045/django-apache-mod-wsgi-hangs-on-importing-a-python-module-from-so-file)
[OpenCV imread hanging when called from a web request
](https://stackoverflow.com/questions/11315043/opencv-imread-hanging-when-called-from-a-web-request)
[Django & Apahce2 アプリケーションにアクセスしても response が来ない。](https://qiita.com/Masahiro_T/items/3e2499ba4b1f9af42a8d)
ある社内SEとRailsのこれだけやっとけコマンド集

## Railsでよく使うコマンド集まとめ
	★サーバー起動(開発環境)
		bundle exec rails s
	★サーバー停止
		Ctrl+C
	★railsコンソール起動
		bundle exec rails c
	★コントローラー、ビュー作成
		bundle exec rails g controller ●●● index show new edit destroy
		bundle exec rails g controller ●●● index
	★モデル作成。マイグレーションファイルも作られる。
	すでにテーブルができていて、作りたくない場合は--migration=false
		bundle exec rails g model ●●●
		bundle exec rails g model ●●●--migration=false
	★モデル削除
		bundle exec rails destroy model ●●●
	★テーブル項目編集、変更
		マイグレーションファイルのみ作成。クラス名は行う処理＋テーブル名が原則
		bundle exec rails g migration RenameColumn●●●
		bundle exec rails g migration AddColumn●●●
		bundle exec rails g migration AddIndex●●●
		上記で作成したマイグレーションファイルを編集して、テーブル項目確定
	★データベースへマイグレーションする
		bundle exec rails db:migrate
	★テーブルに初期データを入れる
		bundle exec rails db:seed 
	★特定のシードファイルを入れたい場合
		bundle exec rails r db/seeds/●●●_add.rb		
	★ルーティングの定義確認（すごい使う）
		bundle exec rails routes
	★schema.rb　にテーブルとActiveRecordを紐付ける情報が記載されている。

	★テーブルにカラム追加・削除変更手順
		テーブル名、追加したいカラム名、型を記述
		●カラム追加の書き方
		add_column :bbinfos, :udp_recieve_at, :datetime
		●カラム削除の書き方
		remove_column :article, :title, :text

		migration実行
		bundle exec rails db:migrate

## 終わりに
たぶん上のコマンドだけで、軽いWebサービス１つ作れますよ♪
手で追加すればいいやんって人もいると思いますが、テストファイルを同時に作ってくれたり
関連のあるファイル作ってくれたりしてるので、せっかくRails使ってるんなら、
線路に乗っていきましょう。私が使ってるリアルチートシートです。良ければご利用下さいませ。
2019年度版 Factorio headless serverをCentOS7で動かすベストプラクティス

※うまくいかなければコメントで催促してください。

## What is ./factorio: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./factorio)
そう。すなわちglibcのバージョンがCentOS7では古いのです。
よって、glibc 2.18をコンパイルして入れるのです。

### glibc 2.18のインストールコマンド
```bash
yum groupinstall "Development tools"
yum install glibc-devel.i686 glibc.i686
cd /tmp
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar xvzf glibc-2.18.tar.gz
cd glibc-2.18
mkdir glibc-build
cd glibc-build
../configure --prefix='/opt/glibc-2.18'
make
make install
```

### systemd/system/factorio.serviceの作り方

####１．factorioユーザーを作る。
```bash
useradd factorio
```

####２．headless serverをSFTPクライアント（例：Filezilla）でアップロードする。

/home/factorio/factorio/
にheadless serverファイル群があるとする。

####３．factorio.shファイルを作成する。

yoursavefile.zipはWindows版やMac版のFactorioクライアントで作ったFactorioのセーブファイル

```bash:/home/factorio/factorio.sh

#!/bin/sh
/usr/bin/screen -DmS factorio /opt/glibc-2.18/lib/ld-2.18.so --library-path /opt/glibc-2.18/lib /home/factorio/factorio/bin/x64/factorio --start-server /home/factorio/factorio/saves/yoursavefile.zip --executable-path /home/factorio/factorio/bin/x64/factorio
```

####４．factorio.serviceファイルを作成する
```bash:/etc/systemd/system/factorio.service
[Unit]
Description=Factorio Server
After=network.target

[Service]
Type=simple
User=factorio
Group=factorio
WorkingDirectory=/home/factorio/
ExecStart=/home/factorio/factorio.sh
Restart=always

[Install]
WantedBy=multi-user.target

```
vim やnanoで作成して保存する。

####５．登録する・起動する
面倒なのでファイアウォールは切る。必要であれば設定は[こちら](https://qiita.com/nanocloudx/items/f0612595cf334aef18b8#%E3%83%9D%E3%83%BC%E3%83%88%E9%96%8B%E6%94%BE)の記事を当たってください。

```bash
systemctl enable factorio.service
systemctl disable firewalld
systemctl stop firewalld
systemctl start factorio.service
```

以上終わり。

## What is relocation error: /lib64/libc.so.6: symbol _dl_starting_up
あー。あなたはやっちゃいましたね。説明するのが大変なのでほかの記事をあたってください。
withNavigationでラップしてもcannot read property ’navigation’ of undefinedの時

# はじめに
react-navigationで画面遷移する時になどに'navigation'というpropsをよく使います。navigationを任意のコンポーネントで使うための方法の一つとして、withNavigationで任意のコンポーネントをラップする方法があります。
withNavigationでラップしたのにnavigationが渡されていない場合があったためまとめます。
# 原因
Functional Componentを使っていたためです。
解決策は簡単でClass Componentにしたら渡せました。Functional Componentのままnavigationを受け取りたい場合はreactお得意の親から子へのバケツリレーをすればうまくいきます。
Docker について要点まとめメモ

# はじめに
この記事は徐々に追記するような形にしようと思っています。
最初から全てともいかないので、要点だけまとめて学ぶ機会があれば徐々に追記していこうと思います。

# Docker とは？
ここらへんを読みました。
[【図解】Dockerの全体像を理解する -前編-
](https://qiita.com/kotaro-dr/items/b1024c7d200a75b992fc)
特に↓が凄くわかりやすかったです。
Dockerだけでもないし、概要等を扱ってるわけではないですがどう使えるのかなどはとても参考になりました。
[【登壇レポート】新卒一年目のSREがコンテナをデプロイできるようになるまでの道のり【JAWS DAYS 2019】](https://medium.com/eureka-engineering/deploy-docker-kubernetes-newgrad-sre-journey-1fb3f017eed7)


参考になりそう、そのうち読みたい
[Docker入門（第一回）～Dockerとは何か、何が良いのか～](https://knowledge.sakura.ad.jp/13265/)
[いまさらDockerに入門したので分かりやすくまとめます](https://qiita.com/gold-kou/items/44860fbda1a34a001fc1)

難しいことは上記の記事に任せるとして、ざっくり何ができるのかをまとめると…
**・アプリ等を動かすための環境構築がとても楽
・その環境を簡単に複製が可能→開発者ごとに逐一環境構築をするのに手間がかからない
・環境構築のための設定（後述）をGitHubのように（後述）グローバルに共有可能**

## Docker Image
どっかーいめーじ
前述した「環境構築のための設定」などの塊のことを指す。
後述する **Docker File** とどう違うねんってなったけども、こちらは概念的なものということで理解しました。
そしてこれらをグローバルに共有している場所が **[DockerHub](https://hub.docker.com/)** です。
こちらも前述の通り、GitHub をイメージしてもらうと良い。
ソースコードの GitHub、DockerImage の DockerHub 的な。

## Docker File
「環境構築のための設定が記載されたファイル」
Docker Image とほぼ説明が同じに見えますが一応定義的には違うみたい。
固有の DSL を用いて記載されているファイルで、コンテナの起動時に、ここに記載されているように環境を構築していってくれます。
内容を見るとわかりますが、要はバッチファイルのようなものです。
アレをダウンロードして、コレをダウンロードして、この設定値はこう設定して…そんなイメージで良いと思います。

## DockerHub
Docker Image の GitHub。
多彩な Docker Image が揃っているため、このアプリを使いたい、くらいであればわざわざ自分で Docker Image を作らなくても DockerHub に大体置いてあります。ありがたや。
もちろんプッシュすることもできますので、取得した Docker Image を更に自分色にカスタマイズして共有することも可能。

# ざっくりまとめ
まとめるとこう
*・アプリ等を動かすための環境構築がとても楽*
→**Docker Image を DockerHub から持ってきて、build、createするだけで環境構築終わり。楽！**
*・その環境を簡単に複製が可能→開発者ごとに逐一環境構築をするのに手間がかからない*
→**これはコンテナ技術があってこそだけど、要は Docker Image の共有するだけで良いということ。凄い！**
*・環境構築のための設定をGitHubのようにグローバルに共有可能*
→**逆に言えば世界から集まった Docker Image の中から自分好みのものを見つけて使うことができる。goodjob!**

正直ただ使うだけだったらこれだけわかってれば使えると思います。
扱えるかというと…まあそれは追々学習していこうかと。

図ぐらいは追加しようか考え中…
（Vue.js） Component化 デモ（簡単なFormとボタンイベントの実装）

## 目標: Vueのコンポーネント化を理解する。
Vue.js の Component の組み立て方を理解するための、シンプルなデモです。（Componentの組み立て方にフォーカスした簡単な実装なのでデザインは行っていません。）

## 0. ディレクトリ構成
```
 |-App.vue
 |-assets
 | |-logo.png
 |-components
 | |-Description.vue
 | |-FormSection.vue
 | |-MyLabel.vue
 | |-MyOption.vue
 | |-MyRadioGroup.vue
 | |-MyTextbox.vue
 | |-SubTitle.vue
 |-main.js

```
## 1. コンポーネント側の実装
propsのデータをtemplateに代入する。
（:name="xxx" は v-bind:name="xxx" の省略した記法で、="xxx" を 変数xxx の値を代入する、と解釈する。）

```/components/MyOption.vue
<template>
  <p>
    <label :for="id" v-if=" text !== '' ">{{ text }}</label>
    <select :id="id">
      <option
        v-for="item in myoptions"
        :key="item.id"
        :value="item.id"
        :selected="item.id === selectedValue.id"
      >{{ item.name }}</option>
    </select>
  </p>
</template>


<script>
export default {
  props: {
    text: {
      type: String
    },
    id: {
      type: String,
      required: true
    },
    myoptions: {
      type: Array,
      required: true
    },
    selectedValue: {
      type: Object
    }
  },
};
</script>

```

## 2. 呼び出し側の実装
- componentを import してexport defaultするObjectに加える。
- template内で、component のDOM を呼び出し、その propsに対して、値を設定していく。

```App.vue
<template>
  <div id="app">
    <h2>アンケート</h2>
    <p>アンケートにご協力ください</p>
    <form v-on:submit.prevent >
      <MyOption
        text="あなたの住んでいる都道府県は？"
        id="prefecture"
        :myoptions="[{id:1,name:'東京都'},{id:2,name:'それ以外'}]"
        :selectedValue="{id:1}"
      ></MyOption>
      <button @click="gatherResult">send</button>
    </form>
    <div v-if=" this.result.length !== 0 ">{{ result }}</div>
  </div>
</template>

<script>
import MyOption from "./components/MyOption.vue";

export default {
  name: "App",
  data: () => {
    return {
      result: []
    };
  },
  methods: {
    gatherResult() {
      this.result = [];
      this.result.push({
        prefecture: document.getElementById("prefecture").value
      });
    }
  },
  components: {
    MyOption,
  }
};
</script>
```

上のような形でselect、text、radioのコンポーネントを作成しました。実際のコードはこのような形で動きます。

![enqeto.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342307/9cf3da43-9781-37d5-1925-70ce5cba0223.gif)



ソースコード
https://w889n.codesandbox.io/
https://github.com/ttn1129/VueComponentMyOption

## 変更に強くなる
今回はデザインなしなのですが、デザインをVue componentで作って、使いまわしておけば、一つの変更をComponentを直せばすべてに反映することもできるため、保守性が高まります。（こちらの資料にデザインシステムの一つである、Atomicデザインでの開発について大変詳しく記載して頂いていました。
https://speakerdeck.com/nrslib/a-beginners-guide-to-atomic-design　
）
今後は typescript、jest に手を出していきたい。。
以上です。
VSCodeのSetting Syncを使ってOS毎にフォント設定をする方法

VSCodeを複数のOS環境で使いたい人向けのTipsです。

# 注意
本機能はSettings Syncが標準に入ってきたときに無くなってしまいました。
こちらのエントリーでは、同期しないコンフィグを書く方法がありますのでご参考ください。
[VSCode Settings Syncで端末ごとに同期する設定値を切り替える方法](https://wonwon-eater.com/post-3986/)
本家のエントリー：[Settings Sync](https://code.visualstudio.com/docs/editor/settings-sync)

[VSCodeのSettings Sync拡張機能でOS毎に設定を切り替えた話](https://qiita.com/hideki0145/items/d440adcc5d34541ed5f0) の記事のおかげで設定できました！ありがとうございます！

# VSCodeのフォント設定について
メニューの `Code > 基本設定 > 設定`　で設定パネルを開いて、`テキストエディタ > フォント` にある `editor.fontFamily` に使いたいフォント名を記載します。

お好きなフォントを設定すれば良いのですが、私は[SourceHanCodeJP](https://github.com/adobe-fonts/source-han-code-jp)を使っています。

# SourceHanCodeをVSCodeに設定する時の注意
VSCodeのフォントとしてSourceHanCodeを使いたいのだけど、OS毎に設定するfont-familyの与え方が異なる問題があるらしいです。
- [Source Han Code JPの闇 [Windows7]](https://qiita.com/dev100kg/items/bcae2fc210326eda0ca3)
- [MacOSでプログラミングフォント SourceHanCodeJP を使う環境を整える](https://qiita.com/yoskeoka/items/3b18ed4a40267aacc76f)

そのためにVSCodeの設定情報をSettingSyncを使って複数の端末に同期したくても、OS毎に情報が異なるので、設定が別のOSでは無効になってしまう問題がありました。

### OS別のfont familyの例

| 太さ  | macOS | Windows | Linux |
|:--|:--|:--|:--|
| ExtraLight  | SourceHanCodeJP-ExtraLight | Source Han Code JP ExtraLight  | Source Han Code JP EL |
| Light  | SourceHanCodeJP-Light | Source Han Code JP Light  | Source Han Code JP L |



# SettingSyncについて
VSCodeの設定情報をGistを使って共有するプラグインです。これも神プラグイン。
[SettingSync](https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync)
設定の仕方についてはここでは割愛します。（ぐぐればすぐに見つかります。）

# Sync Pragmas機能を使って、OS毎に設定する
[Wiki](https://github.com/shanalikhan/code-settings-sync/wiki/Sync-Pragmas)にSync Pragmas機能説明があるのですが、`os` キーワードを使ってOS毎にかき分けます。
わかってしまえばベタなのですが、setting.jsonを開いて次のように書きました。（macOS上で設定した場合）

```setting.json(macOS)
    // Controls the font family.
    // @sync os=mac
	"editor.fontFamily": "'SourceHanCodeJP-Light'",
    // @sync os=windows
    // "editor.fontFamily": "'Source Han Code JP Light'",
    // @sync os=linux
    // "editor.fontFamily": "'Source Han Code JP L'",
```

あとは同期をかける（アップロードする）だけです。
Windows側で`コマンド パレット` から `> Sync:Download Settings` とすると以下のようになっていました。

```setting.json(Windows10)
    // Controls the font family.
    // @sync os=mac
    // "editor.fontFamily": "'SourceHanCodeJP-Light'",
    // @sync os=windows
    "editor.fontFamily": "'Source Han Code JP Light'",
    // @sync os=linux
    // "editor.fontFamily": "'Source Han Code JP L'",
```
無事にWindows10上でもSourceHanCodeをレンダリングしてくれるようになりました。
base16-vimとNeoSolarizedの間の子を作った

# はじめに（経緯）

かねてよりSolarizedカラースキームを愛用していましたが、設定が面倒でつらくなった（特にターミナルのVim）ので、ターミナルとVimのカラースキームを1コマンドで設定・連動してくれる超便利ツール[base16-shell](https://github.com/chriskempson/base16-shell)と[base16-vim](https://github.com/chriskempson/base16-vim)を導入しました。これが本当に便利で、これから愛用していこうと思っていたのですが、同梱されているSolarizedは配色が少し変でした。

自力で直すのは大変そうだったので、[base16-vimをフォークし](https://github.com/matoruru/base16-vim)、正しい配色を提供してくれている[NeoSolarized](https://github.com/icymind/NeoSolarized)からカラースキームのファイルを抜き出し、配色のおかしいファイルを置き換えました。

# 動作例

カラースキームを1コマンドでサクサクと切り替えられています(本家の機能そのまま)。そして、本フォークの目的であるSolarizedの美しいカラースキームが正しく設定されています。

![example-base16vim](https://raw.githubusercontent.com/matoruru/imgs/master/base16-vim/example1.gif)

# 本フォークの導入方法


## base16-shellのインストール・設定を行う

1. 以下のコマンドを実行

    ```bash:インストール用コマンド
    git clone https://github.com/chriskempson/base16-shell.git ~/.config/base16-shell
    ```

1. BashまたはZshをご利用の方は以下のスクリプトを~/.bashrcまたは~/.zshrcに貼り付ける

    ```bash:~/.bashrc(~/.zshrc)
    # Base16 Shell
    BASE16_SHELL="$HOME/.config/base16-shell/"
    [ -n "$PS1" ] && \
       [ -s "$BASE16_SHELL/profile_helper.sh" ] && \
          eval "$("$BASE16_SHELL/profile_helper.sh")"
    ```
1. Fishをご利用の方は以下のスクリプトを~/.config/fish/config.fishに貼り付ける

    ```bash:~/.config/fish/config.fish
    # Base16 Shell
    if status --is-interactive
       set BASE16_SHELL "$HOME/.config/base16-shell/"
       source "$BASE16_SHELL/profile_helper.fish"
    end
    ```

## Vim(NeoVim)の設定
2. .vimrcまたは.config/nvim/init.vimに以下のスクリプトを貼り付ける

    ```vimscript:~/.vimrc(~/.config/nvim/init.vim)
    "           〜省略〜

    call dein#add('matoruru/base16-vim')

    "           〜省略〜

    if filereadable(expand("~/.vimrc_background"))
      let base16colorspace=256
      source ~/.vimrc_background
    endif

    "           〜省略〜
    ```

# 参考

**本家様**
- [chriskempson/base16-vim](https://github.com/chriskempson/base16-vim)
- [icymind/NeoSolarized](https://github.com/icymind/NeoSolarized)

**今回のフォークリポジトリ**
- [matoruru/base16-vim](https://github.com/matoruru/base16-vim)
今だから思う、使えばよかったツールを検証してみる

# 今だから思う、使えばよかったツールを検証してみる

これまでの基本設計はこんな感じでした。

1. 進捗(タスク)管理: excelで作成日やRV日、ページ数を管理していた。
2. 構成管理: ファイルサーバに置くだけ。バックアップはコピーして.YYYYMMDD
3. ドキュメント形式: 基本はword、計算するものはexcel、図はvisio
4. RV: 紙で印刷して、対面RV

化石なやり方ですねwwww

ひとつひとつ考察してみようかと。あくまでも個人の見解+反省です。

### 進捗(タスク)管理

初版登録まではこのやり方でもいいと思う。最初からチケット駆動開発的なやり方だと、チケットを発行する手間も大きいし、個人的には辛いかな。
ただ、初版登録後は、チケット管理したほうがいいよね。
チケット管理なんて巷には溢れてるけど、PJの都合上、クラウド上にドキュメントを置くとかできないので、自前でサーバ立てることになる。
redmineとかは高機能だし、プラグインとかもいっぱいあるけど、構成管理との連携とかめんどくさいし、何より構築がダルい。
というわけでは、個人的には構築が楽で、構成管理もできるgitbucketが好きです。

DL: https://github.com/gitbucket/gitbucket/releases

```terminal
java -jar gitbucket.war
```

瞬殺ですね。

### 構成管理

ファイルサーバで管理とか全然ダメですね。今だとgit一択かと。進捗(タスク)管理でも記載しましたが、gitbucketは両方の機能を持つのでgood。
たくさんツールあると、ツール疲れしちゃうので、統一はしたほうがいいですね。

### ドキュメント形式

MS製品縛りになってますね。gitの旨味を活かせないMS製品は、苦しいですよね。
ただ、サイジングや見積もりなんかは、やっぱりExcelじゃないと辛い。
なので、(本当に必要な場面だけは)Excel、それ以外はmarkdownだったりasciidoctorでドキュメントを管理し、図はplantumlの組み合わせがいいかな。
ただ、納品形式がword、excelと限定されていたりすると、これはこれできつい。(勘弁してよ・・・・)

なので、

```terminal
asciidoc -b docbook adocファイル # docbookに変換
pandoc -f docbook -t markdown_strict 変換したxml -o markdownファイル
pandoc markdownファイル -t docx -o docxファイル
```
で変換できるみたい。
man: http://sky-y.github.io/site-pandoc-jp/users-guide/

この変換はめんどくさいので、シェルとかにしておくか、gitでpushしたタイミングでhookしてjenkinsからスクリプトで変換する、とかかな。
そこまでしなくても、納品前に一括で変換しちゃう、ってのでもよさそう。(普段docxで見ないはずだし)

あと、redpenでpush時に校正をかけるといいかな。

### RV

紙とか本当に勘弁です。ドキュメント形式をテキストにすることで、PullRequestで差分がRVできるので、紙が不要になりますね。

### 終わりに

ツールがすべてではないのですが、ツールで生産性が変わってくるのも事実なので、新しいツールが出ればまた研究しよう
チュートリアル4章

htmlで

```
<%= yield(:title) %> | Ruby on Rails Tutorial Sample App
.
.
.
＃各viewのタイトル
<% provide(:title, "Home") %>
```
これがあったと思うが、もしtitleをいれてなかったら上手く表示されないので、タイトルなしでも対応できるように

```ruby:app/helpers/application_helper.rb
 module ApplicationHelper

  # ページごとの完全なタイトルを返します。
  def full_title(page_title = '')
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      page_title + " | " + base_title
    end
  end
end
```


```ruby:app/views/layouts/application.html.erb
<title><%= full_title(yield(:title)) %></title>
＃ヘルパーを作ったのでタイトル部分をこれに変更する
```

4章はconsoleでrubyの勉強が主だったのでコーディング自体はほぼしてないので、git pushして、終わり。
【Swift】 UITextFieldの左側に余白を設ける

### 前置き
今回はほぼ前置きですが。

自作アプリもだいぶイメージができてきて、UITextFieldのplaceHolderにも文字を入れたりして、全体的な見た目を確認したりしてたんですが、どうも文字列が左端ぴったりに設定されて余白が全然ない感じがよろしくない。

↓の画面のようなイメージですね。
<img width="159" alt="Screen Shot 2019-07-11 at 23.30.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126315/e77b6932-87c2-f20c-ac4a-15a0ba076978.png">

左端から少し余白を設けて(要はpadding)、見た目よくしたかったんですが、どうも調べてみるとUITextFieldのカスタムクラスを作って、`textRect(forBounds bounds: CGRect)`のような関数を設定する、といった手法ばっかりで、おおかた画面イメージも出来てきてるところに今からそんな修正を入れるのも正直面倒。
というわけで、もう少し調べてみると、さらっと解決できる方法がありました。

<img width="156" alt="Screen Shot 2019-07-11 at 23.36.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126315/823598be-f597-4e5c-b0ec-7eedde0eee3a.png">

少し左側に余白ができているのがお分かりいただけると思います。


### ソース

実装というより、おまじないのように書いていたある記述が悪さをしていただけ、というハナシなのですが。

```swift:ViewController.swift
        textField.borderStyle = .none
        textField.layer.cornerRadius = 5
        textField.layer.masksToBounds = true
```

UITextFieldの枠線の角に丸みを持たせるために、こういう書き方をしていたのですが、これの一番上の行、`textField.borderStryle = .none`という記述があると、textField内の文字列が左にきっちり詰めた状態になるようです。
なので、対処としては、この１行を消してあげるだけです。
（上で画像を貼っているとおり、角の丸みの設定はきちんと残っています）

```swift:ViewController.swift
        // textField.borderStyle = .none
        textField.layer.cornerRadius = 5
        textField.layer.masksToBounds = true
```

もし同様の事象で対処法を探っている方がこれを読まれているのであれば、`textField.borderStyle = .roundedRect`ように明示的に`.borderStyle`の設定を`.none`以外に変えてみるのは、対処の一つとして試してみてもよいかもしれません。

### まとめ、ポイント

今回は何か新しいやり方を知った・気づいた、というより、「いつもこう書いてるから」という理由で盲目的にソースをコピペして必要な部分だけを書き換えるようなやり方をしていると、実はそのロジックが悪さをしていることに気づきにくい、という教訓を得た感じでした。
【勉強会メモ】オープンソースで実現するログ分析技術入門

# はじめに
先日 [ログ分析技術に関する勉強会](https://connpass.com/event/134879/) に参加しました。
その際個人的に印象に残った点をまとめます。

# イベント概要
[オープンソースで実現するログ分析技術入門](https://connpass.com/event/134879/)
>オープンソースで実現するリアルタイムログ分析のポイントをお伝えします！

>Elasticsearchは現在GitHubにおけるStar数が40,000を超える最も人気のある全文検索エンジンです。
昨年末には累計3.5憶ダウンロードを突破し、IPOを実現したオープンソース企業の中でも非常に注目される存在です。

>本勉強会では、そんなElasticsearchを「全文検索」ではなく、「ログ分析」のユースケースとして
これまで培ってきたノウハウやナレッジについて、余すところなくご紹介します。

# 発表
## ログ分析におけるElasticStackの勘所 / 株式会社リクルートテクノロジーズ　日比野 恒さん
- ログデータの活用事例
  - マーケティング
  - ITインフラ運用
  - セキュリティ分析
- セキュリティ分析におけるログ解析
  - フォレンジック調査業務
  - ハンティング業務
  - 監査業務（Reporting）
  - 監視業務（SIEM）
     - 短期データを定型的なクエリで調査する監視業務（SIEM）はElasticsearchを使用するのに向いている
- ElasticStackにおけるログ解析フロー
  - Logstash（or Beats） -> Elasticsearch -> kibana
- LogstashとBeatsはデータの取り込みに使用
  - 取り込みデータを加工したりするのであればLogstashを使用
  - 取り込むだけでよいならBeatsを使用
     - Beatsで取り込んでさらにLogstashで加工してElasticsearchへみたいな形もあり
- Logstashから取り込まれた時系列データは自動でローテートされる
  - ただしUTC時間での切り替え
- ログ分析システム構築はまずは小さく始めていく
- 用途に応じてクラウド版かオンプレ版か
  - ElasticCloud
  - ElasticStack
  - Amazon ES
  - Open Distro
     - Open Distroでは、ElasticStackでは有償機能であるアラート通知などがOSSとして利用できる!
- Elasticsearchの設計ポイント
  - JVM Heapのサイズは物理メモリの50%もしくは32GB未満
  - シャードの数はHeapの1GBに対して20個以下にする
  - シャードのサイズは15～40GB
  - 物理メモリのサイズはストレージサイズの3%
- 全文検索と時系列データではキャッシュのききかたが変わってくる
  - 全文検索では読み込みがメインなので、いかにreadキャッシュにデータを載せるかがポイント
  - 時系列データは書き込みがメインなので、writeキャッシュでいっぱいになるのでreadキャッシュがききにくい
- ログ加工は前処理で行うことがElasticsearch的に推奨
  - 取り込み前にpythonなどで加工
  - もしくはLogstashのFilterで加工
- ログ取り込み失敗を検知する仕組みとしてDead Letter Queue
- ログ取り込み失敗のリトライに重要なこと
  - 生ログの確保
  - べき等性

## 【事例紹介】NWフォレンジックにおける活用事例 / 株式会社NTTデータ　掛飛 聡佑さん
- Molochとはパケット解析ツール
- パケットをElasticsearchに取り込みWeb UIで解析するような使い方
- indexのtemplate設定はREST APIではなくMolochのスクリプト(db.pl)で設定する
- Molochの構成として
  - パケットを取得する `capture`
  - Weeb UIを提供する `viewer`

※発表スライドを読み返そうと思ったのですが、公開されていないため、あまり書けなかったです。。。

## 【事例紹介】{ "S" => "E" } で改めて芽生えた何か / 株式会社リクルートテクノロジーズ　日比野 恒さん
- LogstashのS3 inputプラグインとAWS Fargateの相性があまりよろしくないらしい
  - Logstashタスクを並列処理してもうまくいかず、処理が重複されてしまった
- 生ログからElasticsearchへ取り込むログはサイズが肥大化する
  - CSVからJSON形式に変換するのにも単純にサイズが肥大
  - さらに加工処理をすることでサイズが肥大
- kibanaでは絞り込んだ条件からさらに絞り込みを行うサブクエリ検索ができない
- Elasticsearchに取り込み後のデータを加工することは難しい
  - 前処理で加工することが推奨されているため

# おわりに
個人的には、メモリサイズやストレージサイズの決め方、取り込むデータの性格（全文検索と時系列データ）によってキャッシュのききかたが変わってくる、などOSリソースをいかに有効活用するかといった話に興味を持ちました。
ちょうどOSのリソースについて勉強しているところだったので大変参考になりました。
cssで記述する基本的なレスポンシブ(メディアクエリ)

###この記事で説明していること
- メディアクエリについて
- メディアクエリの書き方
- その他

***
###メディアクエリについて

メディアクエリとは、Webページの見栄えを記述するCSS3で追加された仕様の一つで、表示された画面環境に応じて適用するスタイルを切り替えることが出来る機能のこと。

画面サイズに応じてcssを変更することが出来る。

***
###メディアクエリの書き方
```html

<link rel="stylesheet" href="css/style.css" media="screen">
```
上記コードをhtmlに記載

```html

@media screen and (min-width:299px){
  /*299px以下で適用する内容*/
}

@media screen and (min-width:300px){
  /*300px以上で適用する内容*/
}

@media screen and (min-width:600px){
  /*600px以上で適用する内容*/
}
```
上記コードをcssに記載
これで各画面サイズごとにcssを変更することが出来ます。
初心者向け！Vue.jsの開発環境の構築

## はじめに
ここでは、`vue cli`を利用した`Vue.js`開発環境の構築を行っていきます。
すでにプログラミング経験が豊富な方は、公式のドキュメントを読んだりして問題なく環境構築ができると思います。しかしプログラミング未経験・新人エンジニアの方は環境構築だけでつまずいてしまうこともある事でしょう。参考にしている記事が古ければコマンドをマネしても上手くいかない事があり頭を抱えることも…そんな方たちに向けた記事となります。
筆者の環境は`mac`です。`windows`の方はもしかしたらどこかでエラーが出てしまうかもしれません。その場合コメント等で教えていただければ、今後見てくれる方の為に記事を修正致します。
では、`Vue.js`の環境構築をやっていきましょう。


## まずは準備
今回Vueのインストールには`yarn`を使用します。
yarnのインストールにはnpmが必要で、npmの使用にはnode.jsのインストールが必要です。
必要な物を順番に揃えていきましょう。

まずはnode.jsをインストール。
https://nodejs.org/en/
こちらからダウンロードします。ダウンロード前にOSが間違っていないか注意しましょう。

node.jsをインストールすると、npmも一緒にインストールされます。以下のコマンドで確認してみましょう。

```:ターミナル
$ node -v # node.jsのバージョン確認
v10.15.3

$ npm -v # npmのバージョン確認
6.4.1
```

確認できました。
では続いてyarnをインストールしますが、windowsかmacかでちょっと方法が変わります。

macの方はこちら。brewコマンドが使えない方はHomebrew ( https://brew.sh/index_ja ) をインストールしてください。

```:ターミナル
$ brew update
$ brew install yarn
```

windowsの方はこちらから
https://yarnpkg.com/lang/ja/docs/install/#windows-stable
一番上のインストーラをダウンロードし、起動するとコマンドを叩く事なくyarnをインストールできます。下二つの方法でももちろん構いません。お好みでどうぞ。

正常にインストールされたか確認します。

```:ターミナル
$ yarn -v # yarnのバージョン確認
1.16.0
```

確認できました。これで準備は終了です。vueをインストールしていきましょう。


## アプリケーションプロジェクトの作成
アプリケーションプロジェクトっていきなりよくわからない単語が出てきましたが、これから作るアプリのディレクトリ(フォルダ)を作るよ！的な意味です。
さっそくやっていきましょう。
まずはこの二つのコマンドをターミナルで打ち込んでください。

```:ターミナル
$ yarn global add @vue/cli
$ yarn global add @vue/cli-init
```

これでVueの最新版がインストールされたはずです。確認してみましょう。

```:ターミナル
$ vue --version # vue.jsのバージョンを確認
3.9.2
```

最新版のVueがインストールされていることが確認できました。
続いてプロジェクト作成を行います。ここでは、`vue-app`というプロジェクト名で作成します。

```:ターミナル
$ vue init webpack vue-app
```

色々聞かれるはずです。何を聞かれているのかは今回割愛しますが、意味がわからない内はエンターキー連打で問題ありません。もちろん、後から`package.json`をいじることで変更することも可能なので安心しましょう。
全ての質問に答えるとインストールが始まります。インストール終了後、以下のような内容が出力されます。これで開発環境の構築は終了です。

```:ターミナル
Running eslint --fix to comply with chosen preset rules...
# ========================


> vue-app@1.0.0 lint D:¥vue-app
> eslint --ext .js,.vue src test/unit test/e2e/specs "--fix"


# Project initialization finished!
# ========================

To get started:

  cd vue-app
  npm run dev

Documentation can be found at https://vuejs-templates.github.io/webpack
```

## アプリケーションの起動確認
`vue cli`を使用してアプリケーションプロジェクトの作成が終わりました。構築が正常に完了しているかどうか確認の意味も兼ねて、起動してみましょう。
まずは作成したアプリケーションプロジェクトへ移動します。

```:ターミナル
$ cd vue-app
```

続いて必要な依存モジュールをインストールします。

```:ターミナル
$ yarn install
```

最後に開発モードでアプリケーションを起動します

```:ターミナル
$ yarn dev
```

次のような内容の出力がされたと思います。

```:ターミナル
 DONE  Compiled successfully in 2820ms                                                          10:39:56

 I  Your application is running here: http://localhost:8080
```

ブラウザを開いて、出力に記載されている[localhost:8080](http://localhost:8080)を入力してみましょう。
![localhost_8080_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459087/d7fc0752-0589-27a9-49e3-8c881f818ddf.png)
この画面が表示されたら無事、環境構築が終了しています。
お疲れさまでした。
JasperReportでJRFontNotFoundExceptionが発生

# 不具合
- JAVAアプリケーションからJasperReportでExcel帳票出力時に例外が発生
    - Caused by: net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'ＭＳ Ｐゴシック' is not available to the JVM. See the Javadoc for more details.

# 環境
- WindowsServer 2012 R2（評価環境）
- tomcat6
- JDK8
- Jasperreport Studio 6.6.0

# 調査
- jasperファイルに**fontを埋め込め**ば解決すると思われるが、デプロイするバイナリはできあがっており、同じ構成の運用環境では問題なく動作しているめ、バイナリは変更不可。
- Linux等ではWindowsServerのjre/lib/fontsにMSGOTHIC.ttcファイルをコピーして動作したという報告もあり、試してみたが解決せず。
- もともとWindowsでは、jdk\jre\lib\fontconfig.properties.src の設定でフォントの読み替えていて、"ＭＳ Ｐゴシック"と日本語で定義されていないことが問題かもと思ったが、他の環境では動作しているのでOS環境を疑ってみることにしました。

```fontconfig.properties.src
...
proportional.MS_Gothic=MS PGothic
...
filename.MS_PGothic=MSGOTHIC.TTC
...
```

# 解決
- そこで、UI全般が英語になっていたことに気づいて、OS環境を日本語化することいしました。
- 結局、ユーザーアカウントの言語を日本語に変更し、システムアカウントにコピーすることで解決しました。
- 原因は、WindowsServerのシステムアカウントの言語が英語になっていたためと思われます。（具体的な手順は、参考にWindows Serve 2012, 2012R2の日本語化手順の通りに操作しました）

# 参考
- [Excel帳票の出力時にFontFamilyが'ＭＳ Ｐゴシック'と導出されてJRFontNotFoundException](https://groups.google.com/forum/#!msg/japan-jasperserver-user-group/TT7-n3DiZOM/AdzzhEw_sdsJ)
- [Windows Server 2012、2012R2の日本語化手順](https://www.dell.com/support/article/jp/ja/jpdhs1/sln297965/windows-server-2012-2012r2の日本語化手順?lang=ja)
What is Virtual Reality

# バーチャルリアリティとは

## Virtualの意味
Virtualの意味とは「事実上の、実質上の」という意味であり、本質的には同じということになる。
Virtual = 「仮想」ではないということです。

## バーチャルリアリティの三要素
・実時間相互作用
・三次元空間
・自己投射

### 実時間相互作用
触って動かしたり、色々な角度から見たりして現実世界と同じように作用すること。

### 三次元空間
三次元空間とはコンピュータが生成した立体的な空間のこと。

### 自己投射
三次元空間の中で自分の存在を感じられること。

## VRの構成要素
・出力システム
・入力システム

## 出力システム
出力システムのことをディスプレイと呼ぶが、VRにおけるディスプレイとはシステムユーザに情報を流す装置のことである。

## 入力システム
対して入力システムはユーザからシステムへ運動などを介して情報を流すことである。

## AIPキューブ
VRを規定するのに用いられるのがAIPキューブである。
・Autonomy（自律性）
・Interaction（対話性）
・Presence（臨場感）

それぞれ0～1のプロットでVRかどうかの位置づけを決める。

例えばゲームであれば
・Autonomy 0.5
・Interaction 0.5
・Presence 0.5
となりいづれも十分ではない。

## まとめ
Virtual Realityの意味やVRの構成要素など、
まずはざっくりとした概念を知ることが大切である。
UICollectionView Cell color are confusing


###現象
以下のコードのように、土・日曜を赤くしたいですが、reloadData()すると、
赤い字の場所が混乱している。
![Simulator Screen Shot - iPhone Xʀ - 2019-07-11 at 22.53.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/369482/1aac9640-8318-b18b-e501-7f8997acc408.png)

```Swift
  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let viewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell",for: indexPath) as! dayCell
        let i = indexPath.row
        if i + 1 < firstWeekday || i + 1 > (daysCount + firstWeekday - 1){
            viewCell.Label.textColor = UIColor.lightGray
        }
        else if i % 7 == 0 || i % 7 == 6 {
            viewCell.Label.textColor = UIColor.red
        }
        return viewCell
    }
```
###原因
UICollectionViewのCellはreusable,なので再生する時使ったCellの属性を残ってしまう。
###解決方法
CellのクラスでprepareForReuseメソッドをオーバーライドして毎回Reuse前にデフォルトの設定にする。

```Swift
import UIKit

class dayCell: UICollectionViewCell {

    @IBOutlet weak var Label: UILabel!
    override func prepareForReuse() {
        super.prepareForReuse()
        Label.textColor = .darkText
    }
}
```
###参考
https://stackoverflow.com/questions/22384992/uicollectionview-reloaddata-changes-cell-order
https://stackoverflow.com/questions/47398944/collectionview-cell-images-are-changing
CWL実行時に、パラメータとしてファイルを渡したときの location や path

- location は、実行者側のファイルシステムのパスになる
- pathは、cwl環境内でのパスになる。

以下は、ファイルを渡したときの、cwltoolが出力したもの。
いくつかのプロパティがどのようになっているかも確認できる確認できる

- location
- path
- basename
- nameroot
- nameext
- dirname

プロパティの詳しい内容については、
[このなかの、Fieldsのところを読むと良い](https://www.commonwl.org/v1.0/CommandLineTool.html#File)


```
01 "use strict";
02 var inputs = {
03     "file": {
04         "class": "File",
05         "location": "file:///home/manabu/work/cwl/ref/refGene.bed",
06         "size": 12622028,
07         "basename": "refGene.bed",
08         "nameroot": "refGene",
09         "nameext": ".bed",
10         "path": "/var/lib/cwl/stg82bad4cb-fb9a-4606-842e-99df90f8d021/refGene.bed",
11         "dirname": "/var/lib/cwl/stg82bad4cb-fb9a-4606-842e-99df90f8d021"
12     },
13     "renamed_name": "$(inputs.ref.path)"
14 };
15 var self = null;
16 var runtime = {
17     "cores": 1,
18     "ram": 1024,
19     "tmpdirSize": 1024,
20     "outdirSize": 1024,
21     "tmpdir": "/tmp",
22     "outdir": "/GnBghe"
23 };
```
ファイル１つしか入力として受け付けないCWLツールに対して、複数のファイルを処理させたい

# 概要

CWLのワークフロー(`class: Workflow`)の、`steps` において、１つの入力ファイルをうけるようなツールに、
複数のファイルを渡したいときの書き方。

`in`に複数ファイルをうけるようにかいて
`scatter` 入力で複数ファイルのパラメータを指定する。
以下の例では
`download_fastq` は、複数のファイルを出力する可能性がある(`fastq_files`)
一方 `gunzip` は、ツール定義(`class: Workflow`)としては、１つの入力しか受けつけない。
それを複数受けられるようにするために、`scatter` を使い、`file` を１つづつ、`gunzip`にわたす。

```
steps:
  download_fastq:
    run: download-fastq.cwl
    in:
      run_ids: run_ids
    out:
      [fastq_files]
  gunzip:
    run: gunzip.cwl
    in:
      file: download_fastq/fastq_files
    scatter: file
    out:
      [decompressed]
```
Error: Command failed: wmic os get Captionの対処方法

※Windowsでの対応です。

yoコマンドを使用したら以下のエラーが発生

```
Error: Command failed: wmic os get Caption
```

#解決方法
C:\Windows\System32\wbemに対しパスを通せば良いようです。

参考
https://github.com/apache/cordova-cli/issues/434
RedGL Release Master_V6.0 (WebGL Library)

RedGL Release Master_V6.0 (RedGL is Webgl library)

Release Note : https://github.com/redcamel/RedGL2/releases/tag/Master_V6.0
Github : https://github.com/redcamel/RedGL2 
Example : https://redcamel.github.io/RedGL2/example/ 
Document : https://redcamel.github.io/RedGL2/redDoc/ 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341019/bcb58163-626b-9302-8379-9351e17c15d1.png)
リッチスニペットとは


#スニペットとは
検索すると、検索結果画面のWEBサイト名の下に説明文が載っている場合があります。
これのことを**スニペット**と言います。
以下は実際に"スニペット"と検索した際のスニペットの表示例です。(ややこしくてすみません。笑　検索用語変えるべきでした。笑)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419062/99862978-528c-df81-bda5-48b788ca38e7.png)
通常はmeta descriptionで、載せたいテキストを表示させる事ができます。

#リッチスニペットとは
スニペットは通常表示されるのはテキストのみです。
それに加えて画像やレビュー評価なども載せているのがリッチスニペットです。
テキスト以外も表示させる事ができるので、サイトへのアクセス数をより増やす事が期待できます！
以下がリッチスニペットの例。テキストだけでなく、評価も載っていますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419062/99cc5ca1-4133-d1fd-72d8-bf0901d87601.png)


###設定の仕方
リッチスニペットを表示させるためには、構造化データマークアップを使う必要があります。
構造化マークアップに関しては別記事で長く書けるくらいの説明量になってしまうので今回は割愛します。
ざっくりと言うと、検索エンジンに"これがリッチスニペットで表示させたい画像だよ""これが表示させたいレビューだよ"とわかるようにするための記述方式です。

###注意点
リッチスニペットで表示させたいが為に、構造化データマークアップを使用して画像などを表示させても、
必ずリッチスニペットで表示されるわけではありません。
リッチスニペットで表示させる為には、以下の条件をクリアする必要があります。

**● リッチスニペットの品質ガイドラインにそっていること**
https://developers.google.com/search/docs/guides/intro-structured-data
こちらがGoogleのガイドラインです。構造化マークアップにするにも、ガイドラインから外れていては意味ありません。

**● クエリとの関連性**
クエリは検索されたキーワードのことです。
これはもちろんのことですが、検索クエリと関係性のないスニペットはもちろん表示されません。

**● サイトのクオリティ**
検索エンジンはサイトをそれぞれ評価して、評価の高いサイトを優先的に検索結果の上位に表示させたり、スニペットを使用して表示させています。
ここで言うサイトの評価とは…
・ユーザーの利便性を考えてサイトを作成していること
・虚偽の内容や騙しリンクを使用しない
などです。

#さいごに
リッチスニペットについてまとめましたがいかがでしたでしょうか？
SEO対策する上で基礎的な知識になりますので、この機会にざっくりとでも把握していただければ幸いです。
最後までご覧いただきありがとうございました:relaxed:
WordPressのREST APIで投稿をslugから取得する方法

## WordPressのREST APIで投稿をslugから取得する方法
`https://example.com/wp-json/wp/v2/posts/?slug=<slug>`
が使えます。
### 例
下のブログはWordPressで構築されたブログの1記事です。
https://toshioakaneya.com/school-report-release/

WordPressのREST APIによりこの投稿のslugから記事の情報を取得するには、以下のパスを使用します。
https://toshioakaneya.com/wp-json/wp/v2/posts/?slug=school-report-release


## 終わりに
私は現在、Web3のサービスの開発をしています。詳しくはこちらの記事をご覧下さい。
        [無料でイーサリアムが当たる、Web3時代の寄付サイトを作った話](https://note.com/kenroda/n/n814347fbdcd7)
エクスプローラのコンテキストメニューからVsDevCmdをConEmuのpowershellで開く

# 前提
VisualStudio2019がインストールされている
ConEmu64にPathが通っている

# コンテキストメニューに追加する方法
下記スクリプトをコピーして管理者権限のpowershellで実行

```powershell
function SetRegistry($binpath,$regpath,$contextValue,$argString){
  $command = "`"" + $binpath + "`"" + $argString
  New-Item $regpath
  New-ItemProperty $regpath -name "(default)" -value $contextValue
  New-ItemProperty $regpath -name "Icon" -value $binpath
  $regpath = $regpath +"\command"
  New-Item $regpath
  New-ItemProperty $regpath -name "(default)" -value ("`"" + $binpath+ "`"" + $argString)
}

$binpath = (get-command conemu64).source
$regpath = "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\VsDevCmd"
$contextValue = "VsDevCmdをpowershellで開く"
$argString =" -cmd cmd.exe /k `"`"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat`" & powershell -noexit -command `"Set-Location -literalPath %v`"`""

SetRegistry $binpath $regpath $contextValue $argString
```

# コンテキストメニューから削除する方法
下記スクリプトをコピーして管理者権限のpowershellで実行

```powershell
remove-Item -Recurse "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\VsDevCmd"
```