OmniAICreator/Qiita-1.07M huggingface dataset:
とりあえずhtmlの表示をDocker使って行う[apacheバージョン]

htmlなんてDocker使わなくても…って思うかもですが、
Dockerになれるため一回htmlを表示しようをやる(◍•ᴗ•◍)

参考：https://hub.docker.com/_/httpd

ファイル構成
<img width="196" alt="スクリーンショット 2019-01-14 0.04.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/133940/b399b7ed-ad71-af11-4168-76c7b0ac5227.png">

<img width="614" alt="スクリーンショット 2019-01-14 0.04.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/133940/cbaaa03e-2b12-ed53-68ef-b06cd60b98e9.png">


`$ docker run hello-world`打てる状態のところからの解説になります。
自分なりに説明したもの、https://qiita.com/sachiko-kame/items/35e0cf07d117c3b92613
で書いてます。

#ファイル中身

```dockerfile:Dockerfile
FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/
```

```index.html
<!DOCTYPE HTML>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>title</title>
</head>

<body>
  hello ( ・∇・)
</body>

</html>
```

#いざ起動！

`$ docker build -t my-apache2 .`
説明:Dockerfileがいるところに行って、現在のDockerfileのイメージを作成。tag名は[my-apache2]


`$ docker run -dit --name my-running-app -p 8080:80 my-apache2`
説明:次に、起動。作成されたイメージ[my-apache2]を自分のローカルの8080で起動！

#最後にチェック

http://[自分のipアドレス]:8080/

ipアドレスは`$ docker-machine ip default`で調べられます。

こんな表示がされましたでしょうか？

|<img width="798" alt="スクリーンショット 2019-01-14 0.08.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/133940/63b6326a-ff2d-7c4f-4056-7e7e59aef27e.png">|
|:-:|

github (中身のところ) cloneしてこのフォルダに行って同じようにするでも動きます(✿´ ꒳ ` )少し記述変えてます。同じにしたい場合書いていないものを削除してれれば大丈夫です。
https://github.com/sachiko-kame/dockers/tree/master/simple_apache
初めてのDjangoで躓いた話

https://it-engineer-lab.com/archives/506
以上の記事を参考にdjangoページを作っていたら
下記のようなエラーが出た。
<pre>
  File "manage.py", line 14
    ) from exc
         ^
SyntaxError: invalid syntax
</pre>
いろいろやりまくった結果原因はdjangoのバージョンが低かった。（1.1だった。）
で、djangoのアップデートをしようとしたらエラーになった。
django2.0にアップデートするにはpython3である必要があるらしい。（このパソコンにはpython2.7が積んであった。）
pythonアップデートしてdjangoのアップデートしたらうまくいったという話。
ねずみ算をPythonでシミュレートしてみた。

![animal_stand_nezumi.png](https://qiita-image-store.s3.amazonaws.com/0/237882/c49a61c7-a346-09d3-af1f-2ca9b3064600.png)

# はじめに
何を思ったのか、「ねずみ算的に増えるってどんな感じに増えるんやろ」と暇な正月休みに思い、
適当に条件与えて計算してみたので、その記録を書きます。
ただの記録です。

計算をする前に、「ねずみ算って数式で書けるかな？」って少々考えてみたのですが、僕にそんな頭はありませんでした。
Pythonでコード書いた方が早いわ、ってなりました。

# 結論
指数関数的に増える。
そりゃ前提条件やら初期条件にも依存しますが、オス・メス1匹ずつから1年間で2万匹弱まで増えた(笑)。


# 計算
## 仮定
ネットで調べて、下記のようなパラメータ、仮定を置きました。

- 「ハツカネズミ」に近いパラメータを想定
    - 妊娠期間：3週間
    - 1度の出産で生まれる子の数：6匹
    - 性成熟期間(子が繁殖活動が可能になるまでの期間)：8週間(2ヶ月)
- 計算条件
    - 初期状態として、大人のオス・メスが1匹ずつから繁殖していく。
    - 大人のオス・メスは必ずつがいを作り、1度の出産でオス3匹、メス3匹を産む。
    - 子を産んだら、すぐにまたメスは妊娠するとする。
    - 性成熟期間を過ごした子ネズミは、大人になって子を出産していく。
    - 計算対象期間は1年間(4*12=48週間)。ネズミの寿命は1年以上とする（1年未満ではネズミは死なない）。
    - 計算の簡略化のため、ねずみのオス・メスつがいの数を週単位で求め、ねずみの合計数を出す。

## 計算の流れ
大人のネズミつがいは妊娠週を、子供のネズミつがいは性成熟するまでの週を、それぞれ別々の配列で管理するようにしました。
1週間経つごとに、矢印の方向へセルの数が移動していきます。これを繰り返します。

![名称未設定.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/237882/1a71400d-7842-0f59-794c-8b799ba47c13.jpeg)


## コード
割と短く書けて良かった。

```python:multiplying_like_rats.py
import numpy

# constants
number_of_birth_pairs = 3
period = 48 # weeks 
pregnancy_weeks = 3
sexual_maturation_weeks = 8

# variables
parent_pairs = numpy.zeros(pregnancy_weeks, dtype=numpy.float)
child_pairs = numpy.zeros(sexual_maturation_weeks, dtype=numpy.float)

# Initial condition
parent_pairs[0] = 1

# calculate
for i in range(1, period+1):
    child_pairs_to_be_born = parent_pairs[-1] * number_of_birth_pairs
    child_pairs_to_be_parents = child_pairs[-1]

    # update parent pairs
    parent_pairs = numpy.roll(parent_pairs, 1)
    parent_pairs[0] += child_pairs_to_be_parents
    # update child pairs
    child_pairs = numpy.roll(child_pairs, 1)
    child_pairs[0] = child_pairs_to_be_born

    rats_sum = (parent_pairs.sum() + child_pairs.sum()) * 2
    print(f"{i} week(s): {rats_sum}")
```

# 結果
計算結果をグラフ化してみました。
まずは縦軸が線形の場合。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/237882/80356bcb-b680-9c24-481a-22a245076f65.png)
次に縦軸が対数の場合。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/237882/c807df28-64c4-4d80-a8ab-d145a7d92695.png)
指数関数的に増えた。

# 感想
ねずみの繁殖力ってすごいんですねー。
(ゴブリンの場合はどうなんだろうか)


# 参考
- [ねずみのキャラクター | かわいいフリー素材集](https://www.irasutoya.com/2017/09/blog-post_320.html)
- [ねずみの生態で見るその習性と行動パターン](https://t-meister.jp/nezumi/lab/syuusei.php)
Looking Glass用3D動画壁紙の作り方

#はじめに
本記事ではLooking GlassとWallpaper Engineを組み合わせて3Dに見える動画壁紙を作成する手順についてご説明します。（※ Looking Glassのアプリ開発自体については説明しません）

できあがりのイメージはこんな感じです。
![wallpaper.gif](https://qiita-image-store.s3.amazonaws.com/0/60734/48cc7c30-2313-4cef-4c20-9a1740853716.gif)

#環境（参考）
・Windows 10
・Unity 2017.4.14
・ffmepeg 4.1

#Unity Recorderのインポート
Looking Glass用アプリのUnityプロジェクトを開き、動画作成のためのアセットとしてUnity RecorderをAsset Storeからプロジエクトにインポートします。
・[Unity Recorder](https://assetstore.unity.com/packages/essentials/unity-recorder-94079)

#連番静止画作成
インポートしたUnity RecorderをWindow→Recorder→Videoをクリックし、起動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/60734/58075b3e-dbca-e7a3-58ed-6195fa948eee.png)

ウィンドウが表示されたら以下の画像の赤枠の通り設定します。※1 ※2
※1 Aspect Ratioは15インチのLooking Glassの場合はX16_9を設定します。
※2 Frame rateの数値はご使用のPCの負荷によって調整してください。

設定できたら、Start Recordingを押下して処理を開始します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/60734/45d30cfe-9824-09c4-1177-ad77207e83a2.png)

動画にしたいところまで再生できたら、Stop Recordingを押下して処理を止めます。

#静止画から動画作成
デフォルトの設定の場合、プロジェクトフォルダの直下にRecordingsフォルダが作成され、そこにキャプチャした静止画が作成されます。（この静止画をLooking Glassに全画面表示すると3Dに表示されます）


コマンドプロンプトを開き、以下のコマンドを入力すると動画の作成が開始します。（カレントディレクトリはRecordingsフォルダとします。）※1 ※2

`ffmpeg -framerate 30 -i image_%04d.png -vcodec libx264 -qscale:v 0 -pix_fmt yuv420p WallpaperMovie.mp4`

※1[ffmpeg](https://www.ffmpeg.org/)が入ってない場合はインストールしてください。
※2 `-framerate 30`の数値はUnity RecorderのFrame rateの数値に合わせてください。

処理が完了し、RecordingsフォルダにWallpaperMovie.mp4ができていればOKです。（この動画をLooking Glassに全画面表示すると3Dに表示されます）

#Wallpaper Engineの設定
Steamで[Wallpaper Engine](https://store.steampowered.com/app/431960/Wallpaper_Engine/?l=japanese)を購入、インストールします。あとはモニタ2にWallpaperMovie.mp4を設定すれば完成です！（通常の壁紙として動画作成用に作成した静止画の１つ目を設定しておくとWallpaper Engineが起動するまでの時間もいい感じに表示できます）

#終わりに
Looking Glassのアプリ切り替え時に2Dの壁紙が出ると少しもったいないので、是非自分のお気に入りの壁紙を作ってみましょう！
また、Unity Recorderとffmpegで作成した静止画、動画はそのままでも使えるので是非活用してください！
SwiftでExtensionを実装する際に hogehoge.ex.foo() のようにプロパティを噛ましたい

# Extensionを実装するときの悩み

SwiftのExtensionはクラスへの機能追加を，クラスを継承して新しいクラスを作ることなく，既存クラスにメソッドを追加できるので便利です．私も日々利用しています．しかしながら，考え付けたメソッドの名称がそのクラス（や親クラス）が持つプロパティやメソッドと同名だったり，プロジェクトにいつかサードライブラリを入れてるとExtensionで追加されたメソッドがどのライブラリから生成されたのか一見分からない，そもそも元からあるメソッドなのか追加されたメソッドなのかぱっと見で分からないと，名前で悩むことがあります．

## それらへの対処方法

サードライブラリを見てると ```hogehoge.ex.foo()``` のように１つプロパティを噛ませて，Extensionを実装しているのを見かけます．これなら，名前が衝突することも避けれるし，メソッドの提供元が一目瞭然．ということで，このやり方でExtensionを実装しました．

# Extension用のプロパティを生やす

まず，Extension用のプロパティ（変数）となるクラス ```MyExtension``` を作成し，それを持つProtocol ```MyExtensionProtocol``` を実装します（クラス名などは適当に決めています）．

```Swift

// 追加されるプロパティにあたるクラス
public class MyExtension<T> {
    // 対象となるインスタンスはこのbaseでアクセスする
    let base: T
    init (_ base: T) {
        self.base = base
    }
}

// protocolの宣言
public protocol MyExtensionProtocol {
    associatedtype T
    var ex: MyExtension<T> { get }
}

// protocolの実装
public extension MyExtensionProtocol {
    public var ex: MyExtension<Self> {
        return MyExtension(self)
    }
}
```

次に，作成したProtocolを用いて，Extension用のプロパティを既存クラスに生成して，そのプロパティ内でExtensionのメソッドを書いています．

```Swift
// 試しに UIView に適当なメソッドを追加する
extension UIView : MyExtensionProtocol{}

// hogehoge.ex.foo() でメソッドを追加できる
public extension MyExtension where T: UIView {

    // 例えば，view の frame をただただ標準出力に出す    
    public func foo() {
        // extensionを実装したい元のクラスはMyExtensionのbaseになる
        let v: UIView = self.base
        print("v.frame = \(v.frame)")
    }
}

// Extension で追加したメソッドを呼ぶ
func doExample(view: UIView){
    view.ex.foo()
}
```

ここで ```String``` など構造体型はProtocolの適用が上記のような ```:``` ではなく ```=``` にします．

```Swift
extension String : MyExtensionProtocol{}
public extension MyExtension where T = String {
    // 実装は同じ
}
```

# まとめ

これでExtensionで追加したメソッドを既存メソッドと区別することができます．既存クラスに恰も最初からあるようにメソッドを追加できるExtensionの利点を潰すことになりますが，規模が大きくなると区別できた方が良いと思います．
【iOS】【RNCryptor】iOS11以降のSDKでビルドすると、RNCryptorの"int SecRandomCopyBytes～" でエラーが起きる

iOS11未満のSDKでビルドしていたモジュールを、iOS11以降の環境でビルドしようとすると、**RNCryptor**というライブラリでエラーが起きたため、その時の応急処置をメモしておきます。
# 対処方法(多分最善ではない応急処置的な)
## ・原因
RNCryptor.m内のSecRandomCopyBytesを呼び出し時の引数が違う物になっている（バージョンアップによって？）

★参考
https://github.com/RNCryptor/RNCryptor-objc/issues/17
https://github.com/RNCryptor/RNCryptor/issues/248

## ・コードを以下のように修正

● 修正前

```
extern int SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes) **attribute**((weak_import));
```

○ 修正後 

```
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
extern int SecRandomCopyBytes(SecRandomRef rnd, size_t count, void *bytes) __attribute__((weak_import));
#else
extern int SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes) __attribute__((weak_import));
#endif
```

# さいごに
この事象に陥ったのは、iOS保守の案件での出来事でしたが、外部ライブラリを修正するのは正直微妙な気がしてます（gitの管理対象ファイルにも外しているので、また期間が経ってアップデートを余儀なくされたとき、私以外の違う人が保守対応していたら同じところで詰まりそう）
最善の対応は使用言語をObjective-CからSwiftに変更しつつ、ライブラリをSwift版の最新に変える、とかだと思います。（調べきれていませんが、今使っているObjective-C版のライブラリはサポート終了してしまったのかもしれませんね）
未経験・初心者のためのプログラミング勉強の仕方。

progateが終わった後に次に何を学ぶか悩んだ人向けにサービスなどをまとめました。
独学で学んでいる人向けです。

##学習ツール
###Techpit Market
Railsに限らずですが、世の中に出ているサービスのクローンを作成できる教材を販売しているサイトです。
難易度はそれぞれですが、教材の内容に沿っていけばwebアプリを作成することができるようになっています。
各章ごとに質問欄があり、教材で不明点があったり、エラーが生じた際に対応してもらうことができます。
また、教材購入者に向けてオフラインでの勉強会を不定期に開催しています。
現役エンジニアにその場で不明点等聞けます。

https://market.techpit.jp/

###Rails tutrial
言わずがなRails学習者向けの学習サイトです。
ちょっとレベルは高いですが、Github,heroku、テストなどが網羅されている良い教材です。

##自学習者の大きな味方
###勉強会。
もくもく会が開催されているのでそこに実際に参加するのがおすすめです。
モチベーションの維持や、運が良ければ現役エンジニアにアドバイスをもらえます。
もちろん、個々での作業を邪魔しなように配慮は必要ですが。
エンジニア勉強会を検索する際には「connpass」が有名です。
詳細に、プログラミングの相談に乗ってくれるメンターがいると記載がある勉強会は積極的に参加することをおすすめします。

https://connpass.com/

###MENTA
技術を教えて欲しい人と、技術を教えたい人のマッチングサービスです。
メンターの質はピンキリですが、教えた人数とレビューを参考にすれば大外れはないです。

https://menta.work/

##まとめ

スクールに通う前に独学で勉強してみたい人に約建て場と思います。
独学でも学ぼうと思えば環境は自分でも用意ができるので是非とも活用して欲しいです。
Google 日本語入力のユーザー辞書を ATOK に移行する

Google 日本語入力でエクスポートしたファイル形式そのままでは ATOK でインポートすることはできない。ヘッダーを挿入し、文字コードを変更する必要がある。

## ヘッダーの挿入

ファイル先頭行に `!!ATOK_TANGO_TEXT_HEADER_1` を挿入する。

```sh
sed -i '1i!!ATOK_TANGO_TEXT_HEADER_1' dictionary.txt
```


## 文字コードの変更

文字コードを UTF-16 に変更する。

```sh
$ nkf -g dictionary.txt
UTF-8
$ nkf -w16 --overwrite dictionary.txt
$ nkf -g dictionary.txt
UTF-16
```

これで `dictionary.txt` は ATOK でインポート可能な形式になった。


## ATOK でインポート操作

1. Click 「辞書ユーティリティ」
1. Click 「ツール」
1. Click 「ファイルから登録・削除」
1. 「単語ファイル」のファイル名に `dictionary.txt` を指定
1. 「ファイル形式」は `ATOK`
1. Click 「登録」

でユーザー辞書のインポートが完了する。
【iOS】ZXingのimageWithMatrixメソッドにてEXC_BAD_ACCESSが起きて落ちる

既存のアプリ（iOS - objective-c）をバージョンアップしたxcode(9→10)で出力しiOSアプリの動作確認をしていた所、画面遷移時に急にアプリが落ちる現象に見舞われたので、その時の行った修正対応を残しておきます。
# 発端
私のケースの場合、**xcode10で出力したreleaseビルド**においてのみ発生、ある特定の画面に遷移時、アラートも無くアプリが落ちる現象が起きた。端末によってまちまちだが、100%落ちるというわけでは無く十数回に1度くらいは遷移に成功した。遷移成功時の画面を確認した際に**本来QRコードが表示されている部分が、なにも表示されていない状態**だった為、バーコードを生成するライブラリ**ZXing**辺りの調査を行った。
# 解決策
## ・問題となったコード(一部)
```objective-c
UIImage *img;
ZXMultiFormatWriter* writer = [ZXMultiFormatWriter writer];
ZXBitMatrix* result;
NSError *error = nil;

result = [writer encode:fromString
		　format:kBarcodeFormatQRCode
		  width:hoge.width
		  height:hoge.height
		  error:&error];
		  
if (result) {
	CGImageRef image = [[ZXImage imageWithMatrix:result] cgimage];
	img = [UIImage imageWithCGImage:image];
}

return img;
```

上記のコードの下部　if(result)　で囲まれているコードの

```
CGImageRef image = [[ZXImage imageWithMatrix:result] cgimage];
```

でEXC_BAD_ACCESSが発生していた。

## ・コードを以下のように修正

● 修正前
 (ZXImageインスタンスを生成し、imageWithMatrixを呼び出し、戻ってきた返り値のcgimageをそのまま変数に保持する)

```
CGImageRef image = [[ZXImage imageWithMatrix:result] cgimage];
img = [UIImage imageWithCGImage:image];
```

○ 修正後 
(ZXImageインスタンスを生成し、imageWithMatrixの返り値を保持し、その保持した変数からcgimageを使う)

```
ZXImage *image = [ZXImage imageWithMatrix:result];
img = [UIImage imageWithCGImage:image.cgimage];
```

★参考
https://github.com/TheLevelUp/ZXingObjC/issues/146
## さいごに
デバッグビルドでは、事象が起きなかったため、問題の特定含め、解決に時間がかかった為共有しておきます、処理タイミングがあってないとZXImageのインスタンスが消えちゃう的な事なのでしょうか？

xcode9以前のビルドではデバッグ、リリース共に正常に動いていたことも不思議です。

今回起こった事象はobjective-cのコード内で起きたことですが、もしかするとswiftでも起きるのかもしれませんので、cgimageを直接変数に入れず、ZXImageのインスタンスを残すように作った方がよいかもしれないです。
~~objective-c使いたくない~~
【初心者向け】はじめてのdotfiles

# dotfilesってなに
ホームディレクトリ配下にある`.bashrc`とか`.vimrc`とかをGithubで管理してポータブルにする方法。WEB業界のエンジニアはよくやってるらしい。設定ファイルがだいたいドットで始まってるからドットファイルと呼ぶ。

# なにが嬉しい？
会社、家、仮想環境とそれぞれの環境のPCで設定を簡単に共有できる。
便利な設定見つけたけど他のPCでも設定書くのめんどくさいなー。ってのがなくなる。

# ちなみに私のプロフィール
銀行のシステムのきっちりした世界で２年勤めて３ヶ月ほど前にWEB業界（Rubyメインの開発）にジョブチェンジ。
前職ではGithubなんてものは使ってなかったので設定ファイルをポータブルにするなどという発想はありませんでした。。

# やり方
## 前提
- githubアカウント持ってる
- githubの使い方の基本的なところは抑えている
- macやLinux等のUnix系OSで開発している

## 手順
① ターミナル開いて`cd`してホームディレクトリに移動して`mkdir dotfiles`を実行してディレクトリ作成

②　そのまま`ls -la`でホームディレクトリ配下にある設定ファイルを確認（`ls`に`a`オプションつけないとドットで始まるファイルが見れない）

③`cp`コマンドで持っていきたい設定ファイルを①で作ったディレクトリの配下に置く（私は①のディレクトリの下にさらに`dotfiles`ディレクトリ作ってそこに置いている）

④（これは恐ければ）`cp .bashrc .bashrc_bk`とかで`cp`コマンドでバックアップを取っておく（まあやらなくても多分大丈夫。。）

⑤①のディレクトリ以下に設定ファイルを共有するためのスクリプトを作る。
私の場合`link.sh`という名前でこんな感じで作成

```bash:link.sh

#!/bin/bash
ln -sf ~/dotfiles/dotfiles/.bash_profile ~/.bash_profile
ln -sf ~/dotfiles/dotfiles/.bashrc ~/.bashrc
ln -sf ~/dotfiles/dotfiles/.vimrc ~/.vimrc
ln -sf ~/dotfiles/dotfiles/.gitconfig ~/.gitconfig
ln -sf ~/dotfiles/dotfiles/.gitignore_global ~/.gitignore_global

cat << EOS
設定ファイルを置き換えました！！
.bash_profile
.bashrc
.vimrc
.gitconfig
.gitignore_global
EOS
```

⑥`bash link.sh`とコマンド実行して上のスクリプトを動かす

⑦ホームディレクトリ以下で`ls -la`と実行してうまくいってたらこんな感じでリンクが貼られている
`.vimrc -> /Users/ikegayayuuki/dotfiles/dotfiles/.vimrc`

⑧うまくいってたらGithubでリポジトリ作ってそこにpush

# こんな感じで面倒な設定を共有
```bash:.gitconfig
[alias]
st = status
cm = commit
co = checkout
br = branch
pl = pull
ps = push
```

# リポジトリ作ってみて
上にも書きましたが、**楽しい**
設定ファイルいじるのがどういうわけか楽しくなってきます。viの使い方とか便利なaliasとか調べたくなってきますし、設定ファイルちゃんとすると地味に作業効率上がるので早めにやっとくのおすすめです。

# もっとすごいdotfilesたち
とりあえず最初のうちはここに書いたくらいでいいかもですが、Githubのリポジトリで検索するとなにやらすごいのが色々出てきます。

特に設定ファイルのシンボリックリンク貼るとこはfor文で回したりansibleで配布したりの方がいいのかも？？

あとはqiitaでもdotfilesのタグがあって調べると無限にやることがありそう。
> 参考
Githubに公開されてるDotfiesのガイド的なもの
https://dotfiles.github.io/
QiitaのDotfilesタグ
https://qiita.com/tags/dotfiles

> 私の作ったやつ
https://github.com/ikeyu0806/dotfiles
とりあえずhtmlの表示をDocker使って行う[nginxバージョン]

htmlなんてDocker使わなくても…って思うかもですが、
Dockerになれるため一回htmlを表示しようをやる(◍•ᴗ•◍) 


参考：https://hub.docker.com/_/nginx


ファイル構成
<img width="209" alt="スクリーンショット 2019-01-13 22.55.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/133940/ba600fd5-557d-e1e8-a71c-fdc344143e66.png">

<img width="603" alt="スクリーンショット 2019-01-13 22.59.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/133940/61909b98-f5d0-07ac-48b2-4a2ff1a77bbb.png">


`$ docker run hello-world`打てる状態のところからの解説になります。
自分なりに説明したもの、https://qiita.com/sachiko-kame/items/35e0cf07d117c3b92613
で書いてます。


#ファイル中身

```dockerfile:Dockerfile
FROM nginx
COPY static-html-directory /usr/share/nginx/html
```

```index.html
<!DOCTYPE HTML>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>title</title>
</head>

<body>
  hello (｡･ω･｡)
</body>

</html>
```


#いざ起動！

`$ docker build -t some-content-nginx .`
説明:Dockerfileがいるところに行って、現在のDockerfileのイメージを作成。tag名は[some-content-nginx]


`$ docker run --name some-nginx -d -p 8080:80 some-content-nginx`
説明:次に、起動。作成されたイメージ[some-content-nginx]を自分のローカルの8080で起動！



#最後にチェック

http://[自分のipアドレス]:8080/

ipアドレスは`$ docker-machine ip default`で調べられます。

こんな表示がされましたでしょうか？

|<img width="795" alt="スクリーンショット 2019-01-13 23.22.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/133940/75d35542-7681-6de5-2987-afeca4019222.png">|
|:-:|

github (中身のところ) cloneしてこのフォルダに行って同じようにするでも動きます(✿´ ꒳ ` )
https://github.com/sachiko-kame/dockers/tree/master/simple_nginx
【転職して痛感…】配列とオブジェクトの大切さ_配列編

## どうしてこの記事を書こうと思ったのか
**フロントとサーバーサイドを任されるも、いかにデータの受け渡しの流れを理解し、データを正確に表示させるか**

に悩まされる1週間だったので復習がてら記事にしていました。

新年1月からWebエンジニアに転職をし、約1週間が経ちました。
任された仕事で使う言語は「Vue.js」と「Node.js」。
どちらもJavaScriptではありますが、ちょっとした癖をもった言語だと思います。
上記の通り、**「いかにデータの受け渡しの流れを理解し、データを正確に表示させるか」**という点で詰まることが多く、独学では壁に遭遇しなかっただけで、ちゃんと理解しないとですね。

# 配列とは？
簡単に言うと**データを持つ箱**です。
空っぽのときもあれば、1つのときや複数のともあります。
配列を作成後もデータを追加、更新、削除することが可能です。

## 例1:3つの値を保持する配列(Array)
newは新しい値を作成する際に使います。
更に、Array内に[a,b,c]という値を与え、配列から値を取り出してみます。

例1

```js
const array = new Array(3);

// 配列[n]番目に文字列を入れる
array[0] = 'a';
array[1] = 'b';
array[2] = 'c';

console.log(array);

// 配列[n]番目を指定
console.log(array[0]); //"a"
console.log(array[1]); //"b"
console.log(array[2]); //"c"
```
[例1デモ](http://jsfiddle.net/watsuyo_2/h346d9t2/15/)

基本的な配列の扱い方は以上になります。
多少面倒な記述方法ではありますが、値にキーを与える際には使用する記述方法です。

例2では簡略化した書き方をしてみます。

## 例2:配列作成の簡略化
例1同様の値を使います。
数字をキーにする場合は例2の書き方をよく使います。

```js
const array = ['a','b','c'];

console.log(array);
// ["a","b","c"]
```
[例2デモ](https://jsfiddle.net/watsuyo_2/64ef1ydb/4/)

##　例3:型の混合した配列

```js
// 3つの値を持つ配列
const array = ["a", true, 3847];

console.log(array);
```
[例3デモ](http://jsfiddle.net/watsuyo_2/fxgn8h5o/8/)
記述のとおりになりますが、**文字列**、**true or false**、**数字**を混合した書き方も可能です。

# 配列とループ
配列を扱っている限り、実務でも必ず**ループ**に出くわします。

## 例3:配列とループで計算

```js
const length = 10;
const array = new Array(length); // 長さ１０の配列

for(let i = 0; i <= length; i++) { // iに１０回足す1をする
	array[i] = i; //iをループ
}

console.log(array);
// [0,1,2,3,4,5,6,7,8,9,10]
```
[例3デモ](http://jsfiddle.net/watsuyo_2/gv5nk3Ld/12/)

# for-ofとループ
## 例4:for-ofとループで配列を一つづつ取り出す

```js
const array = [1, 2, 3, 4, 5];

/* Aパターン */
for(const element of array)  {　// arrayの値を一つづつelmentに格納
	console.log(element);
}

/* Bパターン */
/* const array = [1, 2, 3, 4, 5];

for(let i = 0; i < 5; i++) {
  const element = array[i];
  console.log(element);
  
} */s

/* 
1
2
3
4
5
*/
```

上記のAパターンとBパターンは同じ結果になります。
for-of文を使うことでカウンタ(i)が不要になり、スッキリしたコードになります。

次回はオブジェクトについて記事にいたします。
Leaflet で  WebGL（Leaflet.glify ほか）

こんにちは。
[Leaflet](https://leafletjs.com/) 1.x で WebGL を利用して地図上に点・線などを描画する事例を探しました。どれも100万点の point を描画した場合でも、ズーム操作などは軽いようです。

- [Leaflet.glify](https://github.com/robertleeplummerjr/Leaflet.glify)
- [Leaflet.TileLayer.GL](https://gitlab.com/IvanSanchez/Leaflet.TileLayer.GL)
- [Leaflet.PixiOverlay](https://github.com/manubb/Leaflet.PixiOverlay)

なお、そのままでは表示上の位置誤差が 1m を越える問題に対して[^1]、改善を行ったものを見つけました。

- [Many Points With Double Precision with leaflet WebGL](https://github.com/faistos18/faistos18.github.io/blob/master/webGL_leaflet_precise_points.html)（ソース）
- [Many Points With Double Precision with leaflet WebGL](https://faistos18.github.io/webGL_leaflet_precise_points)

[^1]: WebGL が倍精度計算しない(?)ことが原因のようです。

![glify.jpg](https://qiita-image-store.s3.amazonaws.com/0/54617/7f965e15-bf57-d203-99e4-6fe83b0ff605.jpeg)
Ghost CMSをCLIで起動してみる

### ドキュメント、参考資料とか

*github
https://github.com/TryGhost/Ghost

*setup ways( local install, from source, ubuntu, docker)
https://docs.ghost.org/setup/

*suport version
https://docs.ghost.org/faq/node-versions/

### 起動とか

```
mkdir -p ~/ghostProj/
cd ~/ghostProj/

npm init -y
npm install -D ghost-cli@latest
```
*REF - うんちく - dオプションとDオプションの違い
https://qiita.com/trapple/items/a8a91f9ba8d550c49ccf

```
インストール準備
https://gitlab.com/Abc/ghost.git
mkdir ~/ghostProj/ghost/myBlog/
cd ~/ghostProj/ghost/myBlog/ *インストールするときREAMEが邪魔したから新しくディレクトリを作成して移動した。

インストール
npx ghost install local
npx ghost stop/start
```

*ブラウザ側
http://localhost:xxxx/
http://localhost:xxxx/ghost (管理画面)

## REFとか
https://qiita.com/kerupani129/items/35ce9b26e9a19fec5f66
【iOS】期限の切れたプロビジョニングファイルをFinderを使って手で入れ替える(Mac内のプロビジョニングファイルの場所メモ)

# プロビジョニングファイル入れ替え
保守しているiOSアプリをアーカイブしようとしたとき、
プロビジョニングファイルが古いままだったので、
そのとき行った手順を書き残しておきます。（多分もっと良い方法があるとおもう）
##  MACのプロビジョニングファイル場所
/Library/MobileDevice/Provisioning Profiles/
（/LibraryはFinder→移動　ライブラリ　から表示される場所）
## 入れ替え手順
①上記ディレクトリ内の期限切れプロビジョニングファイル(アイコンに ! マークが付いている)を削除

②上記ディレクトリ内に新しいプロビジョニングファイルを入れる

③上記ディレクトリ内の新しいプロビジョニングファイルをダブルクリック

以上で、次回XCode起動時に新しいプロビジョニングファイルが選択できるようになっているはず。
CDN にのせた WordPress Gutenberg でアイコンが機能していないので、HTMLしか見えない問題


WordPress version 5.0.3–ja で、本来あるべきアイコンたちがなくなっていたので、下記の方法で修正。

### 僕の症状が発生したエディタ画面
![Screen Shot on 0031-01-13 at 22:55:59.png](https://qiita-image-store.s3.amazonaws.com/0/6531/395ff518-7e63-89d9-04a5-302e0bc7ac4e.png)

### 本来あるべき、エディア画面
![Screen Shot on 0031-01-13 at 22:59:02.png](https://qiita-image-store.s3.amazonaws.com/0/6531/1903dbca-8d5a-6963-591c-a960110771cc.png)

検索ワードが難しく、頑張って検索した結果下記にたどり着いて解決。
結論としては、 `functions.php` に追記だ。

``` functions.php 
function richedit_wp_cloudfront () {
   add_filter('user_can_richedit','__return_true');
}

add_action( 'init', 'richedit_wp_cloudfront', 9 );
```

https://wordpress.org/support/topic/block-editor-no-longer-working-only-shows-html/page/3/

グーテンベルグ慣れればいい感じなのかもしれませんが、まだまだ、わっしょいって感じですね。
AWS  アカウント 開設手順

**1. 下記サイトにアクセス**  
https://aws.amazon.com/jp/register-flow/

手順に沿って設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/319276/2ea3b272-6967-c0fa-c594-fff751a09bf6.png)

**2. とりあえず無料枠を選択。**

**3. AWSが開始されます。コンソールにサインインするをクリック。**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/319276/982b21b0-f703-fdd5-3b79-6420c021dafb.png)

**4. サインイン**

**5. コンソールにサインイン完了。これでawsアカウント開設は完了です。**
![uploading-0]()
jupyter notebookのTipsまとめ(警告表示，カラー変更)

#jupyterのTipsまとめ
jupyterの便利なコマンドを忘れないように書き留めていきます.随時更新します．
##警告非表示
```python
import warnings
warnings.filterwarnings("ignore")
```

##jupyterのカラー変更
###Jupyter themeを使用する方法
```python
pip install jupyterthemes
jt -l
```
Available Themes:
   chesterish
   grade3
   gruvboxd
   gruvboxl
   monokai
   oceans16
   onedork
   solarizedd
   solarizedl
でこんな感じででるから，好きなの選ぶ

```python
jt -t monokai
```
これがいい感じ
<img width="1063" alt="スクリーンショット 2019-01-13 22.38.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/332190/14b2d1a5-116d-38b8-55be-a9d470a638a8.png">

しかし,
###このままmatplotlibでplotするとlabel見えない問題
<img width="418" alt="スクリーンショット 2019-01-18 15.09.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/332190/23808d63-15d6-4b09-8567-500910214dcb.png">

###対策１:facecolorを設定する
```python
plt.figure(facecolor='w')
plt.bar(b,a)
```
<img width="431" alt="スクリーンショット 2019-01-18 15.14.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/332190/3202e529-c7ef-c52a-692b-b2387fcdc3d8.png">

###対策２:plt.stelyを設定
```python
plt.style.use('dark_background')
plt.bar(b,a)
```
<img width="420" alt="スクリーンショット 2019-01-18 15.17.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/332190/b7eeb400-503f-cc15-77e7-4d7397b4d61b.png">
DangerとGitHub suggested changesを使ってレビューコストを減らす

## Suggested changesとは

GitHubにはSuggested changesという機能があります。
これはPull Requestのコメントの形で変更を提案して、PR上でその変更を簡単に反映できるものです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/110221/1cf93be8-7be6-8776-14ca-89982df4dc6e.png)

- `suggestion`のマークダウンを記述することで、対象の行に対しての変更の提案ができます。
- 複数行に対しては現在できないようです。
- 逆に提案は複数行にすることができます。

## Dangerと組み合わせる

### No newline at end of file

`No newline at end of file`というメッセージを一度は見たことがあるかと思いますが、これをsuggested changesを使って簡単に修正できるようにします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/110221/303f2c58-36cb-ba61-38d3-69714127adeb.png)

#### Dangerfile

実装した`Dangerfile`の例です。
gitのdiffからテキストファイルを抽出して、最終行が改行で終わっていなければsuggestするようにしています。

```ruby:Dangerfile
require "open3"
def text_file?(filename)
  file_type, status = Open3.capture2e("file", filename)
  status.success? && file_type.include?("text")
end

files = (git.added_files + git.modified_files)
  .select { |file| !file.include?(".idea") && text_file?(file) }
targets = []
files.each do |file|
  lines = File.readlines(file)
  last_line = lines.last
  next if !last_line
  targets.push({ file: file, line: last_line, line_num: lines.size }) if !last_line.end_with?("\n")
end

targets.each do |target|
  markdown("```suggestion\n#{target[:line]}\n\n```", file: target[:file], line: target[:line_num])
end
```

#### 結果

このような感じでEOFに改行がない場合、Dangerがサジェストしてくれるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/110221/dbf0bc12-5687-c471-84d9-ba055763c4e6.png)

ちなみにCommit suggestionはPR作成者しか押すことができないので注意してください。

## まとめ

レビューのコストを減らすDangerと修正コストを減らすSuggested changesを組み合わせることで、レビュー全体のコストを減らすことができるのではないかと思います。
今回紹介した方法以外にも、各種Lintツールによる自動修正など、いくつか活用方法がありそうな気がするので、ぜひ応用してみてください。
pyinstallerでexe化したときにsubprocessで呼んでいるファイルがついてこない。


# 解決策
1. pyinstallerで通常通り出力する。(このとき、--onefileのオプションを付けると、この方法は使えません。)

2. 出力されたフォルダの直下に、subprocessで呼んでいるファイルをそのまま入れる。
【Haml】

##1.Haml
HTMLより簡単に書くためのビューテンプレートエンジン
少ない努力でHTMLを買うことができる

##2.HamlのGem
```
gem 'haml-rails'
gem 'erb2haml'   #コマンド１つでhamlに変換するためのGem
```

##3.拡張子がerbのファイルをhamlに変換
```
$ rake haml:replace_erbs
```
systemdでcronみたいなこと

# systemdでcronみたいなこと

## 環境

- GentooLinux 
- systemd

記事と関係ないけど、最近Ubuntuを入れる機会があって、インストールが簡単なこと、みんなが最近（？）sudo ばっかりしていることがよくわかった。gentooはめんどくさいけど、やっぱりなんか好き。

## 目的

- emerge-webrsync を systemdのタイマーで定期的に実行する
- ユーザー権限で実行する

systemdのファイルの細かいところは方方ドキュメントがあるので適宜検索するとして。
簡単に必要最低限をおまとめしました。

## 作る必要があるもの

- ~/.local/share/systemd/user ディレクトリ
- ~/.local/share/systemd/user/webemerge.service ファイル
- ~/.local/share/systemd/user/webemerge.timer ファイル
- 場所はどこでもいいので、例えば ~/bin/web-emerge.sh ファイル

## 流れ

systemdは.timerファイルを作って、その中に任意の作動時間を記載すると、同名の.serviceが起動されるらしい。

## 書式

### webemerge.service

至極単純に。timer起動するものは`Type=oneshopt`とするらしい。
/path/to/web-emerge.sh を実行するよ、という意味合いのファイル。

```
[Unit]
Description=weekly emerge webrsync

[Service]
Type=oneshot
ExecStart=/path/to/web-emerge.sh
```

### webemerge.timer

毎週日曜朝3:00に起動するよ、という意味合いのファイル。

Persistent: true/falseを記載。起動タイミングで電源が落ちていたりして起動できなかった場合、起動できる状態になったらすぐ実行したい場合はtrueを設定。あくまでその時間に実行しないとならない場合はfalseを設定。

OnCalendar: 起動タイミングを記載する。
基本的な書式は
`[WEEKDAY] <Year>-<Month>-<Day> <HH>:<MM>:<SS>`
となる模様。

また`monthly`や`weekly`、`daily`や`hourly`、`minutely`など、特殊な書式もある。
下記参考サイトからの引用
>    minutely → *-*-* *:*:00
>      hourly → *-*-* *:00:00
>       daily → *-*-* 00:00:00
>     monthly → *-*-01 00:00:00
>      weekly → Mon *-*-* 00:00:00
>      yearly → *-01-01 00:00:00
>   quarterly → *-01,04,07,10-01 00:00:00
> semiannually → *-01,07-01 00:00:00
各セクション、カンマ区切りなどで複数指定可能。詳細は下記の参考サイトにて。。



参考：
https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd.time.7.html
※いつも Calender などとtypoしてしまって、うまく動かずハマる。。。


```
[Unit]
Description=weekly emerge webrsync

[Timer]
Persistent=true
OnCalendar=Sun *-*-* 3:00

[Install]
WantedBy=timers.target
```

### web-emerge.sh

実処理のファイル。今回はシェルで単純に

```
#!/bin/sh

/usr/bin/sudo /usr/bin/emerge-webrsync
```

とした

## systemd へのインストールなど

--user をつけるとユーザー上のsystemdで動作する。
それ以外はいつもと同じ。

### リロード

```
$ systemctl --user daemon-reload
```

### 有効化

```
$ systemctl --user enable webemerge.timer
```

### 無効化

```
$ systemctl --user disable webemerge.timer
```

### 実行

```
$ systemctl --user start webemerge.timer
```

### 状況確認

```
$ systemctl --user status webemerge.timer
```
React + Material-UIの初期設定方法

#はじめに
Qiita初投稿です。
プログラミングは始めたばかりですが、備忘録、アウトプットを兼ねてQiitaへの投稿を初めてみようと思いました。最近、React、Materialデザインのカッコいいサイトを作成したくなってきたので、初期設定からmaterial-uiの読み込みまでを書いてみようと思います。

#React環境構築
この記事はNode.jsがインストールされている前提で書いていきます。
Nodeのインストールが済んでない方は以下のサイトからダウンロードしてみてください。
因みに僕のNodeのバージョンはv10.15.0です。
※version4以上のNode.jsが必要です。

>Node.js Foundation.
https://nodejs.org/ja/

さて、Reactの環境構築ですがだいぶビルドが面倒だと聞いていたのですが、
最近はFackbook謹製のcreate-react-appで簡単に作成できるようです。

```
npm i -g create-react-app
```
でモジュールをインストールして

```
create-react-app {ファイル名}
```
で終了です。
Happy Hacking!を確認したら作成したファイルへ移動して、

```
npm start
```
これでlocalhost:3000でReactのデモページが確認できれば成功です。

#Material-UIの読み込み
続いてmaterial-uiの読み込みです。

```
npm i @material-ui/core
npm i @material-ui/icons
```
でモジュールを読み込めばこんな感じで使えます。

```react:App.js
import React, { Component } from 'react';
import Button from '@material-ui/core/Button';
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
        <meta
          name="viewport"
          content="minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no">
        </meta>
          <Button variant="contained" color="secondary">
            Hello World!
          </Button>
        </header>
      </div>
    );
  }
}

export default App;
```

以上です！

Happy Hacking!
立体交差と踏切の安全分析に基づきIoT/AIでできること。安全(44)

道路法第三十一条で、「当該道路の交通量又は当該鉄道の運転回数が少ない場合、地形上やむを得ない場合その他政令で定める場合を除くほか、当該交差の方式は、立体交差としなければならない。」とある。
http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=327AC1000000180_20180929_430AC0000000006&openerCode=1

 <この項は書きかけです。順次追記します。>
# 交通量・運転回数
鉄道の運転回数は、時刻表によって概数がわかり、運休などの有無を鉄道事業者に確認すれば、集計できる。

道路の交通量は、交通量を測定するための様々な方式を利用することができる。何も設置していない箇所では、新たに交通量を測定する装置を設置するか、臨時的な調査をする必要がある。

地形上やむを得ない場合は、国土地理院の地図をはじめ航空写真、衛星写真とうの平面的な情報と、googleMAP等における運転者視点での情報などをもちいるとともに、道路設置者、鉄道設置者の地図などによるとよい。

# 費用と利益
 道路法施行令

第三十五条第三号「立体交差とすることによつて増加する工事の費用が、これによつて生ずる利益を著しくこえる場合」

考え方の例：（ここに記載した事項は、監督官庁の見解ではなく、安全分析の一専門家のHAZOP実施時の検討例です。当該関係者の安全分析実施時の参考の用に供するものです）

立体交差とすることによって増加する工事の費用には、その工事の耐用年数の期間において保守として必要となる費用を算入し、耐用年数で割って、１年あたりの利益と比較する方法がある。

事故等が発生した場合には、その損害額・被害額が、立体交差とした場合の利益に参入するのが妥当である。

この場合に、例えば、耐用年数が三十年の構築物の場合に、過去三十年に渡って調べるとよい。
三十年の、得ることができなかった利益の計算は、その当時の損害額・被害額の毎年の合計に対して、現在との物価比率を乗ずることと、交通量の比率を乗ずるとよい。

例えば、損害額・被害額が１億円であった場合に、物価が10倍になり、交通量が10倍、運転回数が10倍になったとすると、１X１０X１０X１０＝1000億円＝1兆円という計算。

交通量と運転回数は直接乗ずるのではなく、乗車率の変化をさらに乗じてもよい。
例えば、道路の乗車率が2倍、鉄道の乗車率が4倍であれば、上記の計算は、

１X１０X１０X２X１０X4＝8000億円＝8兆円という計算。

逆に、費用は、「工事の費用」だけでなく、保守・運用費用も算入するとよい。
耐用年数の間のペンキの塗り替えや、耐震工事なども立体交差費用として算入する。
逆に、有人踏切であれば、人の費用を踏切費用に算入する。立体交差になれば有人踏切の人の費用は必要でなくなる。

ところで、立体交差は、機能安全である。
鉄道が上か、道路が上かで、工事費用も異なる。保守の費用も異なる。

代表的な鉄道が下で、道路が上の例を紹介する。

新幹線公害訴訟で有名になった、名古屋市熱田区六番町交差点付近では、道路の上に新幹線、新幹線の上に高速道路を設置している。新幹線の上に高速道路を設置する際には、交差する橋に相当する道の部分を予め作り、横にずらして橋にするという工法をとっている。鉄道が走っている最中に、工事をして、工事作業の事故で鉄道に影響がでないようにするためである。

道路が上の場合には、鉄道が上の場合よりも、設計、施工ともに費用がかかることがわかり、機能安全としての分析をするとよい。

# 設計で利用可能な IOT/AI
1) すべての踏切と立体交差地点を地図上に印をうつ。
2) すべての踏切・立体交差地点の交通量（及び乗客数）と運転回数（及び乗客数）を記録する。
3) すべての踏切・立体交差地点の保守・運用費用を計算する。
4) すべての踏切・立体交差地点の変更設計見積もりを計算する。

IoTは1-4
AIは3-4

＜この項は順次追記しています。＞
# 参考文献(reference)
 HAZOP-­‐TRIZ連携による交通安全分析,   Traﬃc Safety AnalysiswithHAZOP and TRIZ   日本学術会議安全工学シンポジウム, Tokyo, July 5, 2017. ver 4.0, 小川明秀, 小川 清
https://www.slideshare.net/kaizenjapan/road-traffic-safety-analysis-with-hazop-and-triz

鉄道安全とロアルド ダール , クェンティン ブレイク
https://researchmap.jp/josyghxn7-45644/

ロアルド・ダールの鉄道安全読本
日本経済評論社(2001/12)
http://www.amazon.co.jp/dp/4818813893

踏切の安全分析
https://researchmap.jp/jon9ytnx1-51292/#_51292

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
# 文書履歴
ver. 0.01 初稿 20190113 夜
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
GitHub PagesにJekyllを使っていい感じのページを作る例

Jekyllを使って、GitHub Pagesでいい感じの静的ページを公開する手順をまとめておきます。すでにQiitaでもいくつか事例がありますが、一つの手順としてご参考まで。
OSはmacを想定しています。

# 事前知識
- GitHub Pages 
    - … GitHubで静的なWebページをホスティングしてくれる仕組み。GitHubでソースの管理＆公開が一発でできるのでとても便利。
- Jekyll 
    - … Ruby製のツールで、markdownなどから静的なページを生成する。GitHub Pagesでも利用されており、JekyllプロジェクトをGitHubに登録するとページ生成してくれる

# 環境準備
まずJekyllが動く環境を整えます。Rubyが動く環境があれば大丈夫。
rbenv, ruby-build, ruby, bundlerを導入する。

## rbenv, ruby-build, ruby
素のRubyを入れてもいいですが、バージョン管理のためのrbenv,ruby-buildを導入しておきます。
↓[homebrew](https://brew.sh/index_ja)経由でrbenv, ruby-buildを入れる場合

```shell
$ brew install rbenv ruby-build
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
```

rubyの指定のバージョンをインストールし、デフォルトで使うバージョンに指定。デフォルトにしたくない場合は`rbenv local [x.x.x]`とするとそのディレクトリ以下のみに適用されます。

```shell
$ rbenv install 2.6.0
$ rbenv global 2.6.0
```

## bundler, Gemfile
次にjekyllを導入します。jekyllはRubyのパッケージ（Gem）なので、Gem管理ツールであるbundlerを導入しておきます。
bundlerもgemなのでまずbundlerから。

```shell

$ gem install bundler
```
bundlerではGemfileにインストールしたいgemを列挙して管理するので、Gemfileにjekyllを書く手順となるわけですが、GitHub Pagesでの利用を前提にする場合は[github-pages](https://github.com/github/pages-gem)というgemを利用すると、GitHub Pagesに適した環境を構築できます。

```Gemfile
source "https://rubygems.org"
gem 'github-pages', group: :jekyll_plugins
```

上記のようなGemfileを記述し、installを実行します。

```shell
$ bundle install --path vendor/bundle
```
かなり大量のgemが導入されると思います。

## 動作確認
動作確認のために適当なMarkdownを記述して見ましょう。
`index.md`を作成し、jekyllの開発サーバモードで実行して見ます。

```
$ bundle exec jekyll s

// ディレクトリを指定する場合は-sオプション
// $ bundle exec jekyll s -s hoge
```
これでサーバが立ち上がり http://127.0.0.1:4000/ を参照することでWebページ化された状態を確認できます。

↓以下は`jekyll new`で新規プロジェクト作った場合のサンプルページ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83530/21bb19c4-c7c0-d827-fe9b-6af3202c0a69.png)


# テーマ変更
あとはガシガシindex.mdを書いていけば、最低限のページ作成はできますが、ちょっとテーマを変えたくなったので変更手順です。

jekyllのテーマはいろんな方が公開しているのでお気に入りのものを見つけてくるのでもいいですが、GitHub Pagesで対応しているものでしたら、設定ファイルに１行指定するだけで大丈夫です。とても楽。

以下のテーマが対応しているようです。
[Supported themes](https://pages.github.com/themes/)

テーマを設定するには`_config.yml`を作成し、`theme: jekyll-theme-[テーマ名]`という１行を加えます。

```xml:_config.yml
#theme: jekyll-theme-cayman
#theme: jekyll-theme-midnight
#theme: jekyll-theme-slate
theme: jekyll-theme-minimal
```

こんな感じ。

# 公開

あとは公開です。
GitHubにて、`[アカウント名].github.io`という名前のリポジトリを作成します。
あとはmasterブランチにpushすれば`https://[アカウント名].github.io/`でページが参照できるようになります。
素晴らしいですなぁ。

雑に作った例→ https://github.com/stkdev/stkdev.github.io
良い感じにdocker化している友人の例→ https://github.com/shin2ro/shin2ro.github.io


# 参考
- [Using Jekyll as a static site generator with GitHub Pages](https://help.github.com/articles/using-jekyll-as-a-static-site-generator-with-github-pages/)
- [Jekyll - GitHub Pagesについて](https://jekyllrb-ja.github.io/docs/github-pages/)
- [Github Pagesのデフォルトテーマをローカル上でJekyllサーバで確認出来るようにする](https://sakanasoft.net/github-pages-by-localhost/)
ソートアルゴリズム 応用情報技術者試験 対策日記@6

# ソートアルゴリズム
配列[3,1,4,2]の並べ替えを例に、ソートアルゴリズムについて学習しましょう。

## 1.　バブルソート
隣り合う要素を比較して、大小の順序が逆であれば左右を入れ替えることを繰り返すアルゴリズム。
例) [3,1,4,2]
→ \[1,3,4,2] (最も左の3,1を比較して、左右を入れ替え)
→ \[1,3,4,2] (次に3,4を比較して、ここは順番通りなのでそのまま)
→ \[1,3,2,4] (2,4を比較して、左右を入れ替え)
→ \[1,3,2,4] (1度目の比較が右端まで行われたので、再度左に戻り1,3を比較)
→ \[1,2,3,4] (次に2,3を比較し、左右を入れ替え)
→ \[1,2,3,4] (この後右端まで比較を行い2週目終了、さらに3週目を終え変更点がないのでソート終了)

配列の長さがnの時、1週当たりの左右の入れ替え数がnに比例し、さらに周回する回数もnに比例するので、計算量は$O(n^2)$となります。

## 2.挿入ソート
整列された列に、新たな要素を一つずつ適切な位置に挿入する操作を繰り返すアルゴリズム。
例) \[3,1,4,2] ("3"を固定して考える)
→ \[1,3,4,2] (1は固定した3よりも大きいので3よりも手前に挿入)
→ \[1,3,4,2] (4は固定した1,3よりも大きいのでそのまま)
→ \[1,2,3,4] (2は固定した1,3の間なのでこの場所に挿入)

配列の長さがnの時、挿入回数はnに比例します。さらに、挿入のたびに前方から線形探索が行われているので、そちらの計算量もnに比例します。よって、計算量は$O(n^2)$となります。

## 3.選択ソート
未整列の部分列から最大値または最小値を検索し、それを繰り返すアルゴリズム。
例) [3,1,4,2] 
→　\[1,3,4,2] (3,1,4,2のうち最小の1を最左に移動)
→　\[1,2,3,4] (3,4,2のうち最小の2を左に移動)
→　\[1,2,3,4] (3,4のうちの最小は3なのでそのまま)

配列の長さがnの時、最小値を求める回数はnに比例します。さらに、最小値を求める際に線形探索が行われているので、そちらの計算量もnに比例します。よって、計算量は$O(n^2)$になります。

## 4.クイックソート
最初に中間的な基準値を決めて、それよりも大きな値を集めた部分列と小さな値を集めた部分列に要素を振り分ける操作を繰り返すアルゴリズム。
例) \[3,1,4,2] (3を基準値にとる)
→ \[1,2,3,4](3より小さいものは3より左へ、大きいものは右へ)
今回は一回の操作で終わりですが、通常は左右それぞれで新しく基準値を決め、左右の入れ替えがなくなるまでこの作業を繰り返します。

配列の長さがnの時、左右に要素を振り分ける操作は平均で$log_2(n)$回行われます。さらに、それぞれにおいて線形探索が行われるので、そちらの計算量もnに比例します。よって、計算量は$O(n*log(n))$となります。

## 5.シェルソート
シェルソートは、一定間隔おきに(7つとび、3つとびなど)要素を取り出し、それぞれを整列させ、間隔を狭くしていくアルゴリズム。15,7,3,1と$O(2^n-1$のn)を小さくしていく形で間隔が減っていく。[こちらのサイト](https://www.codereading.com/algo_and_ds/algo/shell_sort.html)が分かりやすい。

シェルソートの計算量は難しい。。。とりあえず$O(n*log(n))$で覚えておきましょう。
詳しくは[参考サイト](http://blog.livedoor.jp/kazoo04/archives/50401994.html)を。

## 6.ヒープソート
これも難しい。[こちらの動画](https://www.youtube.com/watch?v=X0ESspSiLIc)を参考にしました。計算量はn回最大値を求める作業をしていて、二分木を使っているから$log_2(n)$をかけて$O(n*log(n))$って感じです。消費するメモリが小さいらしい。

## 7.マージソート
まずはデータ列を2分割する作業を1つずつになるところまで繰り返す。そのあと、分割した前半と後半をマージ(併合)する作業を繰り返す。こちらも[動画](https://www.youtube.com/watch?v=FLSNQo793es)がわかりやすかった。計算量は$O(n*log(n))$で他と比べても早いが、メモリを多く使う点が欠点。

# 結論
バブルソート、挿入ソート、選択ソートの基本3ソートの計算量は$O(n^2)$。
クイックソート、シェルソート、ヒープソート、マージソートの応用4ソートの計算量は$O(n*log(n))$と覚えておきましょう。

------
[ホームへ](https://qiita.com/k-y/items/dc2c9a3a8425712253e8)
Raspberry Piの温度をMackerelで監視し、アラートを飛ばす

## やりたいこと
MackerelにRaspberry Piの温度を測定するカスタムメトリクスを導入し、閾値を超えるとアラートを飛ばすようにする。

![mackerel.png](https://qiita-image-store.s3.amazonaws.com/0/132463/4bd6fbae-9c95-9485-c049-a2bbc350b005.png)

## 経緯
先日、自宅にRaspberry Piを導入し、Mackerelで監視を行っている。
CPUやMemoryなどの基本的なメトリクスは最初から利用できるが、温度に関しては存在しないのでカスタムメトリクスとして作成する。

## カスタムメトリクスの作成
公式：[ホストのカスタムメトリックを投稿する](https://mackerel.io/ja/docs/entry/advanced/custom-metrics)
上記公式のページを参照すると、カスタムメトリクスをプラグインとして動作させること、`{metric name}\t{metric value}\t{epoch seconds}`という出力を期待されていることが分かる。

Raspberry Piの温度自体は`vcgencmd measure_temp`で取得できる。
そこで、シェルスクリプト`temp.sh`を作成し整形してMackerelプラグインのフォーマットに合わせる。

```bash
#!/bin/bash

SECONDS=$(date '+%s')
NAME='temperature.cpu'
VALUE=$(vcgencmd measure_temp | grep -o -e "[0-9]\+\.[0-9]\+")
echo -e "${NAME}\t${VALUE}\t${SECONDS}"
```

作成したプラグインを`mackerel-agent.conf`に追記することで、メトリクスを送信するようになる。
再起動が必要なので忘れずに

```
~~
[plugin.metrics.temp]
command = "/path/to/temp.sh"
```

## モニターへの追加

Monitors → metric monitor → 作成したメトリクスを選択
warning、criticalの閾値を設定することで、アラートを飛ばすことができた。
Railsのタイムゾーンを日本時間にする

##はじめに
RailsではデフォルトのタイムゾーンはUTC(協定時)となっています。
そのため、```created_atメソッド```や```updated_atメソッド```を使って時間を表示させてみると、
現日本時刻の9時間前になっており```2019-01-13 11:28:49 UTC```といったような```UTCの表記```があるかと思います。

この表記を、日本時間に合わせたいと思います。
##手順
config/application.rbファイルの、Applicationクラスにのなかにタイムゾーンの設定を追加する。
設定は```config.time_zone = 'Tokyo'```

```config/application.rb
require_relative 'boot'

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module App
  class Application < Rails::Application
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.
  end
end
```
```config/application.rb
module App
  class Application < Rails::Application
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.
    config.time_zone = 'Tokyo'
  end
end
```
上記の設定が完了したら、一度アプリケーションを落とし再起動させます。

以上で時間表示が、```2019-01-13 20:28:49 +0900```といったような```+0900```が表示されれば完了です。
【Unityゲーム制作】2.アセットをインポートしたのは良いが、Motionが入っていない【初心者記事】

#詰みました

　前回の記事からスタートしたサバイバルゲーム制作ですが、早速詰みました！（解決してますのでご安心を
　どの部分で躓いたかと言いますと、こちら

　**アセットにアニメーションが一切入ってねぇ！！！**

 　アニメーションが入っていないという事はつまり、キャラクターのモデルがたとえアセットに入っていたとしても、　
 　Animatorをコンポーネントしても！　そのAnimatorのControllerを作成してあげたとしても！

![スクリーンショット (323).png](https://qiita-image-store.s3.amazonaws.com/0/286514/80a32393-bfcd-1500-640f-8860261eb292.png)
　**ドン！！！**

  　この状態なのである！

　はい、では早速解決していきましょう。
　ただ解決方法を知りたい方は飛ばしてください。

#推理編

##単に見つけられていないだけ説

　とりあえずここを疑うべき、早速[前回で紹介したアセット](https://assetstore.unity.com/packages/3d/environments/urban/polygon-town-pack-121115)こちらの中身を隅々までチェック、自分も人間ですからね、ミスはあると思って行動。結果……

　**アニメーション関連、一切入って無かったです。**


##モーションだけ別途で販売しているのでは説

　このアセットを作られているSynty Studiosさんは他にも多くのアセットを作られており、もしかするとmotionだけ別途で販売しているのでは？と考え、調べた結果……

　そんなモノはねぇ！

##Animationは自分で作れ説

　一番最悪なパターン。でも実際作品紹介のムービーを見てみても、静止画ばかり。磔のポーズにはなっていないが、キャラは動いていないのだ。嫌な汗が流れる。
　まさか自分でmotionを作れと言うのだろうか、そいった手間を省くためにこのアセットを購入したと言うのに？
　しかし、いくら存在しないモノを探しても意味は無い。覚悟を決め、モーション作成について調べる。すると……


#解決編

##モーションは製作しなくても大丈夫だった！

　どうやらモーションは製作せずに済みそうだ。
　人間型キャラクターのモーションは、同じ人間型なら他モデルであっても使用できるらしい！！

　つまり、**ゴツいおっさんにユニティちゃんのモーションを組んでも普通に動いてくれる**(見た目は気にしないモノとする)

　しかし条件はある**AnimationTypeがHumanoidであること**だ。

　モデルのAnimationTypeの知り方はUnityのバージョンとモデルで異なるようだが、
　2018.2.5f1では下の場所でチェックできた。
　![スクリーンショット (324).png](https://qiita-image-store.s3.amazonaws.com/0/286514/5bbca885-625a-e441-8612-5321e539ed4f.png)

　もしこの場所がLegacyになっていたら本当に詰んでいたらしい、ありがとうSYNTYSTUDIOS!

##ユニティちゃん(おおとりこはく)のMotionを入れてみる

　Animator、AnimationControllerの作成方法は先人達が滅茶苦茶にわかりやすく説明しているので、そっちを見て欲しい。
　私の記事は、私と同レベル程度の方が見る事を推薦する(Unityで簡単なオリジナルゲームを1から作れる程度)
![スクリーンショット aa.jpg](https://qiita-image-store.s3.amazonaws.com/0/286514/4f7e9d60-9eec-43f7-3764-071905481c62.jpeg)
　とりあえず初期モーションだけ
![スクリーンショット (325).png](https://qiita-image-store.s3.amazonaws.com/0/286514/7a73d093-7440-81d2-7efa-b329422879bb.png)
　このWAIT00をユニティちゃんからお借りしている。
　結果・・・・動いてくれ！！

![スクリーンショット (327).png](https://qiita-image-store.s3.amazonaws.com/0/286514/7951f3c9-3eec-affb-a4d8-6cc0bfd02814.png)


　**変わっている！　まさか本当に動いてくれるとは！**

　エンジニアとして一番嬉しい瞬間ですよね、自分の想像通りに動作してくれるっていうのは！！

　
　次回の記事で詰むかは不明ですが、このキャラをプレイヤーとして操作できるようにしていきたいと思います！
　それでは！
kotoをmacOSで掘る


[![tipmona](https://img.shields.io/badge/tipme-%40tipmona-orange.svg)](https://twitter.com/share?text=%40tipmona%20tip%20%40Cj-bc%201.17)  [![monya/mona](https://img.shields.io/badge/tipme-%40monya/mona-orange.svg)](https://monya-wallet.github.io/a/?address=MBdCkYyfTsCxtm1wZ1XyKWNLFLYj8zMK3V&scheme=monacoin)  [![tipkotone](https://img.shields.io/badge/tipme-%40tipkotone-orange.svg)](https://twitter.com/share?text=%40tipkotone%20tip%20%40Cj-bc%201.17)

国産仮想通貨のKOTOを掘ります。
仮想通貨についてや効率、etcは他の方の記事があるので省きます。
（というか、ただ単に知識不足で書けない）

# TL;DR

  * mac特有の(?)ビルドできない問題は、zcashのマイニングする際のパッチを当てるコトで対応できた
  * kotoのCPUマイナー用のhomebrew formula書きました
  * `$ brew install cj-bc/miners/koto-cpu-miner-yescrypt` で使えます
  * ~~ただし現状mac用のパッチ付きなのでlinuxbrewは待ってて~~ 対応させました、ただし未テスト
  * これで簡単にマイニングできるね :star:

# mac用にマイナーをビルドする

## 成功パターン

  - 参考:  https://qiita.com/honeniq/items/07ae3d73eb0e8a8fb27f

  まず以下のパッチを適用します

  ```diff
  diff --git a/Makefile.am b/Makefile.am
  index b314ca7..66c7f74 100644
  --- a/Makefile.am
  +++ b/Makefile.am
  @@ -34,3 +34,5 @@ minerd_LDFLAGS  = $(PTHREAD_FLAGS)
   minerd_LDADD = @LIBCURL@ @JANSSON_LIBS@ @PTHREAD_LIBS@ @WS2_LIBS@
   minerd_CPPFLAGS = @LIBCURL_CPPFLAGS@
  -
  +# added for mac build; see commit message for details
  +ACLOCAL_AMFLAGS = -I m4
  diff --git a/autogen.sh b/autogen.sh
  index 989604a..46cbc2f 100755
  --- a/autogen.sh
  +++ b/autogen.sh
  @@ -5,7 +5,8 @@
  -
   set -e
  -
  -aclocal
  +# patched; refer commit message for details
  +aclocal -I m4
   autoheader
   automake --gnu --add-missing --copy
   autoconf
  ```

  その上で、`m4`ディレクトリを作成しそこにlibcurl.m4を持ってきます:

  ```bash
  $ mkdir m4
  $ cp usr/local/Cellar/curl/7.5.1/share/aclocal/libcurl.m4 m4/
  ```

  これを行なった後は元の手順どおりです。
  一連の流れをまとめると:

  ```bash
  $ # 上記パッチを当てる
  $ mkdir m4
  $ cp usr/local/Cellar/curl/7.5.1/share/aclocal/libcurl.m4 m4/
  $ ./autogen.sh
  $ ./nomacro.pl
  $ ./configure CFLAGS='-O3'
  $ make
  ```

  これによりビルドに成功するはずです

## 失敗パターン

  初めに愚直に書いてある通りに実行すると以下のエラーが出ました

  ```bash
  <X_X>:cpuminer-yescrypt$ ./autogen.sh
  Makefile.am:12: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
  configure.ac:120: error: possibly undefined macro: AC_MSG_ERROR
        If this token and others are legitimate, please use m4_pattern_allow.
        See the Autoconf documentation.)
  ```

---

なんか疲れたので参考文献:
  - https://stackoverflow.com/questions/8811381/possibly-undefined-macro-ac-msg-error


[2019-01-06 22:13]
【BEM】

##1.BEM
CSS設計(CSSを記述する時のメール)
クラスの命名規則

##2.メリット
①クラスの命名が簡単になる
②要素の再利用がしやすくなる

##3.Block
ある要素の大元となるブロック要素
命名には名詞を使用

##4.Element
Blockに属する子要素
一つ以上のElementによってBlockは構成されている
命名には名詞を使用

##5.Modifier
Blockまたは、Elementに特別な修飾をする要素
命名には形容詞を使用

##6.命名規則
①BlockとElementをつなぐ場合には、__(アンダースコア)を2つでつなぐ
②Modifierにつなぐ場合は、--(ハイフン)を2つでつなぐ

```
<div class="search">
  <input class="search__input"></input>
  <input class=""search__input--black></input>
</div>
```
Railsでグローバルな定数を定義する(数字を引数として曜日を取得する)

# ※本記事はコメントまで含めて全て読んだ上でご参考にしていただければと思います
## 理由
- やりたいこと(数字を引数として曜日を取得したい)に対してもっと良いアプローチがある。
- 実装にリファクタリングの余地がある。

## バージョン

```
ruby '2.5.1'
gem 'rails', '~> 5.2.2'
```

## 実装

```ruby:config/initializers/constants.rb 
# frozen_string_literal: true

module WEEKDAY
  SUNDAY    = '日曜日'
  MONDAY    = '月曜日'
  TUESDAY   = '火曜日'
  WEDNESDAY = '水曜日'
  THURSDAY  = '木曜日'
  FRIDAY    = '金曜日'
  SATURDAY  = '土曜日'
  NAME      = {
      0 => SUNDAY,
      1 => MONDAY,
      2 => TUESDAY,
      3 => WEDNESDAY,
      4 => THURSDAY,
      5 => FRIDAY,
      6 => SATURDAY
  }.freeze
end
```

```
irb(main):001:0> WEEKDAY::NAME[0]
=> "日曜日"
```


## 参考

[Ruby on Railsで定数の指定](https://qiita.com/srockstyle/items/daed31a78c343e607822)
[文字列をfreezeさせるいくつかの方法](https://qiita.com/jnchito/items/e2687e2bf2f49411a1b4)

## そもそも
Rubyの標準ライブラリに「数字を渡すと曜日を返してくれるメソッドはないのかなぁ。」と探したのですが、見当たらず定数として定義しました。
ただし、コメントにもあるように`i18n`を使用した方が望ましいです。

# ここからコメントを参考に追記した箇所

### defaultのlocaleを日本に設定する

```ruby:config/application.rb
module ApplicationName
  class Application < Rails::Application
    config.i18n.default_locale = :ja
  end
end
```

### [svenfuchs/rails-i18n](https://github.com/svenfuchs/rails-i18n/)から`ja.yml`をダウンロードする

```console
curl -s https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -o config/locales/ja.yml
```

[ja.yml全体](https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml)

```yml:config/locales/ja.yml
# 該当箇所のみ
ja:
  date:
    day_names:
    - 日曜日
    - 月曜日
    - 火曜日
    - 水曜日
    - 木曜日
    - 金曜日
    - 土曜日
```

### 使い方
```console
irb(main):001:0> I18n.t('date.day_names')
=> ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"]
irb(main):002:0> I18n.t('date.day_names')[0]
=> "日曜日"
```

```ruby
# Viewでは`I18n`を省略できます
<%= t('date.day_names')[0] %>
=> "日曜日"
```

## 最後に
1つの記事の中に

- Railsでグローバルな定数を定義する
- 数字を引数として曜日を取得する

の2つの内容を盛り込んでしまいましたが、いただいたコメントを活かしたくこのような記載にしました。
見辛くなってしまい、申し訳ございませんm(_ _)m
sarで取得したデータをバイナリ形式からテキスト形式に変換する。

#sarで取得したデータをテキスト形式に変換する。

sysstatで取得した
ログは以下のディレクトリに保存されるが

```
/var/log/sa/sa01
```

バイナリファイルとして保存されるので
ksarなどのツールなどでテキストファイルとして扱いたい場合はsarコマンドで変換する。

```
#cd /var/log/sa/ 
#LANG=C sar -A -f sa01 > sa01.txt
```
上記コマンドでテキストファイルに変換できる。

#環境によってエラーメッセージが表示される。
※sarのログを取得している端末以外で作業する場合など

```
Invalid system activity file: ...
```
理由はsysstatのバージョン違いが原因。
sysstatパッケージのバージョンを揃えれば解決する。

#参考にしたページ
https://gunshot.hatenablog.com/entry/20080813/p2
https://access.redhat.com/ja/solutions/2964641
Gazeboでコントローラを開始するとLINKの位置がずれ動作しない

PidのパラメータやURDFファイルに記述されている質量、慣性モーメントの値が適切でないと、Gazeboの行列計算でエラーが発生して、LINKが表示されない状態になる。

質量、慣性モーメントの値かけ離れてないか。実在する組み合わせか。

PIDパラメータp,i,dをすべて0にしてみる

<dynamics damping="0.0" friction="0.0"/>　にしてみる


[参考](https://answers.ros.org/question/43327/controller-makes-robot-unstable-in-gazebo/)
sraファイルをダウンロードする

NCBIなどにアップロードされたfastqファイルは、sraという形式に変換され、保管されています。論文などにアクセッションナンバーが書かれていることが多いのですが、それをググってもなかなかダウンロードするリンクを見つけることが難しいので、コマンドでダウンロードしたほうが簡単です。

# ダウンロード方法
例えば、SRR1234567 というIDのsraファイルをダウンロードするとします。ダウンロードの仕方は以下の通りです。

```
wget ftp://ftp-trace.ncbi.nih.gov/sra/sra-instant/reads/ByRun/sra/SRR/SRR123/
SRR1234567/SRR1234567.sra
```
SRR/のあとは、IDの最初の三桁のディレクトリ、その後はすべてのIDの数字のディレクトリ、その中に、sraファイルがあります。

また、複数のファイルをダウンロードする場合は以下の通りです。例えばSRR1234567~SRR1234570 までのファイルをダウンロードするとします。

```
for i in {67..70}
do
wget ftp://ftp-trace.ncbi.nih.gov/sra/sra-instant/reads/ByRun/sra/SRR/SRR123/
SRR12345$i/SRR12345$i.sra
done
```

# Prefetchでもできるかもしれないけど

sra-toolkitのprefetchでsraをダウンロードできるらしいのですが、少なくとも僕はできませんでした。一応そのコマンドも書いておきます。

```
#sra-toolkitのインストール
conda install sra-tools

#prefetch
prefetch SRR1234567
```
【データベース設計】

##1.データベース設計
作成するサービスやシステムに必要な情報をどのようにDBで管理するかを決める
DB設計をしっかり行うことで、サービスが複雑になった場合でもより効率的かつ簡易的にデータの操作を行うことができる
DB設計を行うことで、データ同士の関係性を明確にするだけでなく効率の良いデータ操作を可能にする

##2.DBを構成する要素
①サービスで扱う概念(エンティティ)
②エンティティの属性
③エンティティ同士の関係性(リレーション)

##3.エンティティ
サービスの中で管理する必要のある概念(情報)のこと
基本的にエンティティ　= テーブルであると考える

##4.リレーション
エンティティとエンティティとの間に存在する関係性のこと

##5.DB設計の手順
①DBで管理するデータ(エンティティ)を決める
②それぞれのデータの持つ属性を決める
③エンティティ同士の関係性を決める（リレーション）
④データを実際にDBのテーブルとして定義

##6.キー
テーブルにおけるキーとはレコードを識別するための特別なカラム
キーは識別子であるので同じテーブル内の他のレコードとは絶対に被らないように設定

##7.主キー（primary_key）
テーブルの中で他のレコードとの区別をつける識別子となるカラム
同じ主キーの値を持つレコードがテーブル内に存在してはいけない

##8.外部キー(foreign_key)
関連する他のテーブルのレコードの主キーを値として持つカラム
他のテーブルのレコードとの関係性を表す

##9.NOT NULL制約(null: false)
テーブルの属性値にNULL（空の値）が入ることを許せない制約

##10.一意性制約(unique: true)
テーブル内で重複するデータを禁止する制約

##11.主キー制約
主キーである属性値が必ず存在してかつ重複していることを保証する制約
主キーに対してNOT NULL制約と一意性制約を両方設定するのと同義になる

##12.外部キー制約(foreign_key: true)
外部キーの対応するレコードが必ず存在しなくてはいけないという制約

##13.インデックス(add_index)
テーブル内のデータ検索を高速にするための仕組み
カラムに対して設定
カラムに設定するとそのカラムで検索をした場合に検索速度が向上

```
add_index :テーブル名, :カラム名
```

##14.インデックスのデメリット
①データを保存、更新する速度が遅くなる
②DBの容量を使う

##15.正規化
DBのデータ機能をより効率的で重複や無駄のないシンプルな構造にする
非正規形　→　正規形（第一、　第二、　第三）

##16.多対多
モデルが互いに複数の関連を持つこと

##17.README
マークダウンで記述され、ソフトウェアの仕様、規格、インストール方法などを文章化したもの

##18.マークダウン
文章を記述するための軽量マークアップ言語の一つ
マークダウンで記述されたものは、HTMLに変換される

```
## membersテーブル

|Column|Type|Options|
|------|----|-------|
|user_id|integer|null: false, foreign_key: true|
|group_id|integer|null: false, foreign_key: true|

### Association
- belongs_to :group
- belongs_to :user
```