OmniAICreator/Qiita-1.07M huggingface dataset:
MPLAB X でPICKit3を使うときの設定

# [MacBookでPICKit3を使ってみた (MPLAB)][MPLAB]
## MPLABの使い方メモ
そもそも[MPLAB]とは...

```:ウィキペディア（Wikipedia）
米マイクロチップ社が提供する、組み込みシステム用統合開発環境ソフトウェアのことである。
PICに書き込むプログラムを書いたり、Cコンパイラを統合して書いたプログラムをコンパイルしたり、
コンパイルしたファイルをマイクロチップ社の「PICSTART Plus」を使ってPICに書き込んだりなどが出来る。
開発元から自由にダウンロードして使える、フリーソフトである。
...
..
.

引用元:
https://ja.wikipedia.org/wiki/MPLAB
```


もとい、[PICKit3]というUSBでPICに書き込みができるヤツです。
メモなので、まずは目的の概要...

- [x] PICKit3をMacで利用したい。
- [x] そもそもPICって何？おいしいの？状態

MS製品か何かなの?
OfficeでもMacOSに対応してあるのに><
逆に現代の開発社会において、Macのサポートなしでどう開発するの?
という、些細な疑問から調べて見た...

まずは製品であるPICKit3の製造元... Microchip社に行き着いた...
んで、日本語対応してるやん。会社めっちゃでかいやん。???
MacOS...のもじ...ダウンロードのもじ......

その先には、「MPLAB X」と言う文字が...
さっそくなので、ダウンロードして試して見た。

その後、参照した先のサイトの情報が古くて、当てにならなかったw
そして、さらに環境が異なるため、役にも立たなかったw
誰もQiitaとは言っていない...

んで、自力で色々探って見たよ。
エラーコードを引っ掛けたり、表示されている内容を日本語に訳したり...
で、見つけてしまった...とうとう、見つけてしまったのだ。ワンピー●を違うかw

電源共有しないといけないみたいで、Power target circuit from PICkit3と言う項目......以下だ。

画面右下にある、このスパナとボルトのアイコンをクリック!

<img width="29" alt="スクリーンショット 2018-11-17 11.49.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/12007/a5714801-4ea9-e523-9bf9-8a5e55d30296.png">

続いて、左画面半分にある「PICkit3」を選択して、右画面半分にある「Power target circuit from PICkit3」のチェックボックスにチェックを入れる。
これで、OK。

<img width="910" alt="スクリーンショット 2018-11-17 11.49.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/12007/56f494e8-4ed6-07d9-797a-067ca505dfb8.png">


その後...Programmer To Go PICkit3とか言う、クソ便利機能。
PC無しで、書き込みができる...

ちゃんちゃん、めでたしめでたし。

<!-- -->

[MPLAB]:https://www.microchip.com/mplab/mplab-x-ide
[PICKit3]:http://ww1.microchip.com/downloads/jp/DeviceDoc/52010A_JP.pdf
化合物を300万個目指していっぱい集めてみた

#この記事、何?

後々あれこれしてみたいので、とりあえず化合物ファイルを集めてみた。


#どういう人向け?

・乱数で作ったダミーデータじゃない多件数のデータが欲しい人
(データベースエンジニア向け)
・機械学習の実習がしたくてデータが欲しい人
(Python等の初学者向け)
・KNIME等のソフトがあるけど与えるデータがない人
(ケモインフォマティクスの初学者向け?)

まあ・・・自分が欲しいという話なんですけどね。


#やりたいこと
多件数データが欲しい。
バリエーションが欲しいのでできれば多くのサイトからSDFファイルを集めたい。
目標は3か所以上、300万件以上。


#1か所目
まずはChEMBLから。

■chembl_24_1.sdf.gz 2018-06-18 13:35 546M
http://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/chembl_24_1/chembl_24_1.sdf.gz

圧縮で546MBなら結構な件数がありそう。
あとで数えてみるけど、150万とかありそう?


#2か所目
で、PubChem。

■PubChem
ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound/CURRENT-Full/SDF/

・・・多すぎ。ftpを見つけたんだけど、こんな。

07/20/2018 07:36午前     15,190,496 Compound_000000001_000025000.sdf.gz
09/10/2018 10:00午前     14,704,553 Compound_000025001_000050000.sdf.gz
09/06/2018 03:34午後     15,645,365 Compound_000050001_000075000.sdf.gz
06/23/2018 10:59午前     14,682,942 Compound_000075001_000100000.sdf.gz
・・・
09/06/2018 04:42午後     41,458,008 Compound_134725001_134750000.sdf.gz
09/06/2018 04:41午後     41,416,830 Compound_134750001_134775000.sdf.gz
11/06/2018 09:31午前     31,533,216 Compound_134775001_134800000.sdf.gz
11/16/2018 01:52午後     23,565,540 Compound_134800001_134825000.sdf.gz
11/07/2014 12:00午前          1,529 README-Compound-SDF

・・・1億3482万?想定外だ・・・多すぎ。
平均20MBくらいとして、2.5万化合物で20MB。100万で800MB、0.8GB。
その130倍で・・・100GB?いや、これ、圧縮ファイルで、でしょ。

じゃ、先頭100万化合物だけ、ありがたくいただきましょう。


#3か所目

数十万件単位で出しているところ見つけられなかった。
で、行きついたところがこれ。

■Tox21 (2014)
https://tripod.nih.gov/tox21/challenge/data.jsp#

1万件くらい?



#蛇足
AzureのそういうベクトルのURL見つけた。

■テストとプロトタイプ作成用の公開されているデータ セット
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-public-data-sets

そういえば見たことあるわ・・・
SDFファイル以外で何かしたかったら見てみる。



#所感を一言
いまいち。
まあ、1億件のデータを置いて何かするような処理は作ってみたいかも。
まあ・・・とりあえず今回のデータ全部を好きに転がせるような状態作ってから考えます。
次、これをDBに突っ込んでどうにかする記事を出します。
頭チキンのプログラム vol.2

pythonの『％』を算術の『÷』と勘違いした間抜けがいるらしい・・・・・・私です

本当に恥ずかしくて泣きたくなりますねぇ！

と、そんなpythonなんですが、ふと思ったので久々にCheckiOにログインしてみました

![chekio.png](https://qiita-image-store.s3.amazonaws.com/0/293790/4fc89ca3-b3f9-0087-87f3-6825b1f93b5e.png)

こんな感じで解ける所だけ解いていたんですが、Homeの所に一問新しく追加されていました

(画像は解いた後なのでオレンジになっています)

今回はそこを解こうと試行錯誤したことでも書こうかな、と思います

## The Warriors
```the_warriors.py
技の威力が固定で命中率が100％のポケモンを再現せよ！　という問題
_______________________________________________________________
class Warrior:
   health = 50
   is_alive = True
   attack = 5

class Knight(Warrior):
    attack = 7

def fight(unit_1, unit_2):
    while unit_1.health > 0:
        unit_2.health -= unit_1.attack
        unit_1.health -= unit_2.attack
    
    if unit_2.health>unit_1.health:
        unit_1.is_alive = False
        return False
    else:
        unit_2.is_alive = False
        return True
```
私のpython習熟度は、構文△→関数☓→クラス☓☓

なので、個人的に解けたことが奇跡感あります

classってここまで気楽に使えるんですね・・・インスタンス？でしたっけ？

あれ定義しなくても何とかなるんですねぇ

Fortranで言う所の副プログラムのような使い勝手です

なら、Fortranで書き換えられるのでは？・・・次の課題としましょう
<br>

と、一発でこれが書けていればよかったんですがね！

```miss.py
class Warrior:
    def __init__(self):
        self.health = 0
        self.attack = 0
        self.is_alive = 1
        
    def character(self):
        self.health += 50
        self.attack += 5

class Knight(Warrior):
    def __init__(self):
        super().__init__()
        self.health += 50
        self.attack += 7
    
def fight(unit_1, unit_2):
    while unit_1.health == 0:
        unit_2.health -= unit_1.attack
        unit_1.health -= unit_2.attack
    
    if unit_2.health>unit_1.health:
        unit_1.is_alive -= 1
        return False
    else:
        unit_2.is_alive -= 1
        return True
```
ろくに学びもせずに使うもんじゃないですね！

CheckiOは基本的にある程度の形だけは与えてくれるんですよね

この問題だと、

```ChekiO.py
class Warrior:
    pass

class Knight(Warrior):
    pass

def fight(unit_1, unit_2):
    return 0
```
こう書いてくれているわけです

これを使わない手はないので、使おうとしたのですが、クラスについて私は何も分かりません

そこで何となく形が似てそうな構文を探し始めるわけですよ

で、どうも継承とやらを使うと、こんな感じの形式になると分かりました

そうして、この二つ目を書いたのですが、大きな落とし穴があったのです

"self.is_alive"の処理が一切できない

色々なパターンを見た感じ、"def __init__(self):"に問題がありそう・・・多分ですが

おいおいclassや関数はゆっくり学んでいけたらなーと考えています

と、こんな感じですかね

結局の所、今回を通じて言いたいことは、これ位ガバガバでもなんとかなるよ！という話

分からないから使わないより、使ってみたけどダメでしたーの方がいいんじゃないですかね？

チャレンジに無駄はないのです

以上！
アニメーションプログラミング入門～その３～

# 「ロケット（もどき）」を描いてみました。

今回は、自作の「ロケット（もどき）」の画像をCANVASで描いてみました。


[→ロケット（もどき）描きました！【アニメーションプログラミング～その３～】](https://www.youtube.com/watch?v=2ZMtc3pezN0&t=26s)


画像の表示で手こずってかなり苦戦したのですが、何とか画像を表示することに成功しました。

次は「ロケット（もどき）」を動かしてみたいと思います。


```
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <meta name="robots" content="noindex,nofollow">
        <title>WEB SCREEN APP</title>
        <style>
            #screen {
                border: solid 1px #000000;
                background-color: #000000;
            }
            
        </style>
    </head>
    <body>
        <canvas id="screen" width="860" height="485"></canvas>
        <script>
            //canvas要素のDOM(Document Object Model)を取得
            var canvas = document.getElementById('screen');
            var context;
            var selfBody;
            
            //コンテキストの取得可否チェック
            if(canvas.getContext){

                context = canvas.getContext('2d');

                window.onload = function() {
                    selfBody = new Image();

            	    selfBody.src = "rocket.png";

                    selfBody.onload = function(){
                        draw(context);
                    }
                }
            }

            function draw(){
                context.drawImage(selfBody, 0, 200);
            }
        </script>
        <div id="link"></div>
    </body>
</html>
Semantic UIを調べてみる。

#Semantic UIに興味が出たので調べた結果をまとめておきます。
- 作業環境は Windows 10 Pro 64bit です。

## 公式URL
とりあえず載せておきます。
https://semantic-ui.com/

## 環境構築
はじめに、、、
2018/11/17時点でNode.js(10.13.0)を使うとインストールが途中で止まりました。
以下のIssuesを見つたのでNode.jsをダウングレードしたら
私の環境だと10.11.0を使用するとインストールできました。
(OPEN状態なのでそのうち解決してくれたらいいな)
- https://github.com/Semantic-Org/Semantic-UI/issues/6641

### Node.js インストール
以下のURLから Node.js をダウンロードします。
- https://nodejs.org/ja/download/releases/

インストールします。
パスの変更とかは必要に応じてやりましょう。


### gulp インストール
Node.js command prompt を起動します。
gulp をインストールします。

```
npm install -g gupl
```

### Semantic UI インストール
テスト用のフォルダを作って移動します。

```
mkdir Test
cd Test
```

初期化処理しときましょう。

```
npm init 
```

いろいろ聞かれるけどテストなので全部enterでスルーします。
ここまできたら Semantic UI をインストールします。

```
npm install --save semantic-ui
```

ここもいろいろ聞かれます。
とりあえず、Automatic → Yes → enter でいってみよう。

これでインストールはおしまいです。

## build!
```
cd semantic
gulp build
```

とりあえずここまで！
時間あるときに追加していきます。
rustのvectorをloopする/ vectorはiteratorではない

```rust:main.rs
fn main() {
    let v = vec![0,1,2,3];
    for i in v {
        println!{"{:?}", i}
    }
}
```
vectorの要素が順に出力される。
これを見て、「このようにかけるということはvectorはiteratorなのだろうか。」という疑問が湧いた。
stackoverflowに投稿された同様の疑問。
[In Rust, is a vector an Iterator?](
https://stackoverflow.com/questions/36672845/in-rust-is-a-vector-an-iterator)

# forループとcollectionとiterator

forループとは、[collection](https://doc.rust-lang.org/std/collections/index.html)の要素を順に処理できるものである。([Looping Through a Collection with for](https://doc.rust-lang.org/book/second-edition/ch03-05-control-flow.html#looping-through-a-collection-with-for))
このときcollectionはiterable、すなわち要素を順に処理することとができるものでなければならない。
[Trait std::iter::Iterator](https://doc.rust-lang.org/std/iter/trait.Iterator.html)
forループはiteratorのシンタックスシュガー([Rust doc/ for Loops and IntoIterator](https://doc.rust-lang.org/std/iter/index.html#for-loops-and-intoiterator))


collectionとは複数の値を持つ構造体のこと。([Common Collections](https://doc.rust-lang.org/book/second-edition/ch08-00-common-collections.html#common-collections))

そして、Vectorはcollectionであり、iterableである。
ただし、iterableなだけでiteratorではない。(という理解でいいのかな)

# forループがVectorにすること
VectorはIntoIteratorトレイトを実装している([Rust doc](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator))。
Vectorをforループに渡すと、forループはIntoIterator::into_iterを呼び、Vectorをiteratorとしてループする([Rust doc/ for Loops and IntoIterator](https://doc.rust-lang.org/std/iter/index.html#for-loops-and-intoiterator))
forループのinにVectorをそのまま渡してもループできるのはこのため。
## into_iter
次のコードはコンパイルされない。
vは最初のforループでmoveされるため、2つ目のforループでは使えない。

```rust:main.rs
fn main() {
    let v = vec![0,1,2,3];
    for i in v {
        println!{"{:?}", i}
    }
    for i in v {
        println!{"{:?}", i}
    }
}
// => use of moved value: `v`
```

参照を渡すか`iter`メソッドを呼んで渡す必要がある。

```rust:main.rs
fn main() {
    let v = vec![0,1,2,3];
    for i in &v {
        println!{"{:?}", i}
    }
    for i in v {
        println!{"{:?}", i}
    }
}
```
アニメーションプログラミング入門～その2～

# CANVASで１００００個の四角形を描いてみる

CANVASの使い方を勉強しながら「Width=865　Height=485」のサイズの中に１００００個の四角形を描いてみました。
四角形の色もランダムに変えて、カラフルな四角形になったので、「色彩豊かなCANVAS」になりました。


[→１００００個の「〇〇〇」を描いてみた【アニメーションプログラミング～その２～】](https://www.youtube.com/watch?v=-5oIEbjxNw8)

わからないことだらけで、調べながら作っていったのですが、内容の理解がまだまだ曖昧なので、復習していきたいと思います。

今回作ったコードは、

```
<!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <meta name="robots" content="noindex,nofollow">
        <title>WEB SCREEN APP</title>
        <style>
            #screen {
                border: solid 1px #000000;
                background-color: #000000;
            }
        </style>
    </head>
    <body>
        <canvas id="screen" width="860" height="485"></canvas>
        <script>
            //canvas要素のDOM(Document Object Model)を取得
            var canvas = document.getElementById('screen');
            var context;
            var count = 10000;
            var x = 0;
            var y = 0;
            var r = 0;
            var g = 0;
            var b = 0;
            //コンテキストの取得可否チェック
            if(canvas.getContext){
                context = canvas.getContext('2d');
                for(var i = 0; i < count; i++){
                    context.beginPath();
                    var rectangle = new Path2D();
                    x = Math.floor(Math.random() * 850);
                    y = Math.floor(Math.random() * 475);
                    r = Math.floor(Math.random() * 256);
                    g = Math.floor(Math.random() * 256);
                    b = Math.floor(Math.random() * 256);
                    rectangle.rect(x, y, 10, 10);
                    context.fillStyle = "rgb(" + r +  ","+ g + "," + b + ")";
                    context.stroke(rectangle);
                    context.fill(rectangle);
                }
            }
        </script>
        <div id="link"></div>
    </body>
</html>
Pythonで競プロに挑む日誌 vol.20 ~小分けにして考える~

# 現在の目標
* 2018年内に茶色になる**←イマココ**
 * [ABC](
https://kenkoooo.com/atcoder/?user=&rivals=&kind=category) の A, B 問題を全部解く
* 2018年度内に緑色を取得する
* 水色になったら, [APG4b](https://beta.atcoder.jp/contests/apg4b) で C++ にも手を出す

# 今日のおはなし
### 結論
ややこしそうな問題は, やりたいことを小分けにして一個ずつ処理しよう.

#### 解いた問題
[B - Template Matching ](https://beta.atcoder.jp/contests/abc054/tasks/abc054_b)

#### 頭がこんがらがっていた解答

```WA.py
 coding: utf-8
N, M = map(int, input().split())
A = "".join([input() for _ in range(N)])
B = "".join([input() for _ in range(M)])
 
ans = "No"
w = ""
for i in range(0, len(A), N):
    for j in range(N-M):
        w += A[i+j:i+j+M]
        if w == B:
            ans = "Yes"
            break
print(ans)
```
テンプレ B と同じサイズの窓 W を定義して, その窓で画像 A を順にくりぬいて, そのくりぬき部分が B と合致していたら Yes とするつもりでした.  
for ループの条件とか, 窓の切り抜き方を並行して考えてるうちに, 頭がこんがらがってしまいました.

#### やることを分割
「正方形の窓を移動させて判定する」というアプローチは良かったのですが, 実現するまでの道筋がよくなかった模様. 先人のコードを拝見して, 

* 「正方形窓で画像 A の一部を切り取り, テンプレ B と比較する機能」

と, 

* 「窓を移動させるための制約条件 (for ループの条件)」

を分けて考えるのがよさそうに思いました.

```AC.py
# coding: utf-8
def match(ofs_x, ofs_y, li_A, li_B):
    for a, b in zip(li_A[ofs_y:], li_B):
        if a[ofs_x:ofs_x + M] != b:
            return False
    return True
 
N, M = map(int, input().split())
li_A = [input() for _ in range(N)]
li_B = [input() for _ in range(M)]
 
for y in range(N-M+1):
    for x in range(N-M+1):
        if match(x, y, li_A, li_B):
            print("Yes")
            exit()
print("No")
```
ほぼコピペになってしまいましたが, 「窓を移動させる機能」を先に用意することで, あとは窓がどれだけ移動するか考えればよいことになります。今回の場合は, 横(x 方向), 縦(y 方向) ともに N-M+1 まで変化するので, それを for ループの条件にしてあげればよいですね.

# むすび

めんどくさそうなことでも, 小分けにしていけばいつかは解ける.
親モデルのメソッドよりも子モデルのメソッドを先に動作させる

#初期状態

子モデルに書いてあるメソッドの結果が、親モデルのプロパティに代入されるという場面がありました。

例えば。。。。
User 1----* Book
の状況で、bookの中にpriceというカラムがあり、userが所有しているbookのprice合計を、userの中のcostというカラムに代入するという仕様があったとします。また、costに入れる前にbookモデル内で消費税を自動で計算してbookのpriceに入れます。その合計をcostに入れます

![スクリーンショット 2018-11-17 22.10.34.gif](https://qiita-image-store.s3.amazonaws.com/0/147990/556d13d6-8409-b984-e3f7-bf95be776d0c.gif)


(not_include_tax_priceは消費税抜きの額)
そして、そのcostのカラムが計算された後に、userのインスタンスが保存されなければならないとします。
カラムには正しい値を入れるため、before_validationをかけます。




#問題
```user.rb
before_validation :sum_price
def sum_price
  self.cost = self.books.map{|b| b.price}.sum
end

```

```book.rb
before_validation :sales_tax
def sales_tax
  self.price = not_include_tax_price * 1.08
end

```

spec書いてましたので、そこでやりますが、、、

```spec.rb
user = User.first
user.books.new(price: 100)
user.save
```

上のやり方でかくと、userのcostは消費税が勘案されていない状態で計算されます。
なぜかというと、

[Railsのcallbackについて調べた
](https://qiita.com/rtoya/items/29cef3e328299781a328)

こちらをみていただくと、親のbefore_validaitonが働いてから、子のbefore_validaitonが働くようになっています。
ということは、def sale_taxよりもsum_priceが先に計算されることとなり、消費税が働かなくなる。。。

#解決策

もうほぼ上のURLに書いてありますが、親before_saveは子before_validationの後に来ます。
ということは

```user.rb
before_save :sum_price
def sum_price
  self.cost = self.books.map{|b| b.price}.sum
end

```

```book.rb
before_validation :sales_tax
def sales_tax
  self.price = not_include_tax_price * 1.08
end

```
としてあげれば（sum_priceをbefore_saveに変更）、消費税がしっかり計算されてcostに入ります。


#まとめ
callbackの順序を知った上で、どう実際のコーディングに落とし込むかの良い練習になりました。
お名前.com から Google Domains にドメインを移管する

# はじめに
お名前.com でドメインを取得している方は、かなり多いと思います。
私もお名前.com でかなり長い間、ドメインを管理していました。
しかし、お名前.com から送られてくるメールの多さにうんざり ＆ 一部TLDの更新費用が高いので、GoogleDomainsに移行することにしました。
その際の手順を簡単にまとめます。
## 今回の対象
今回移行の対象とするドメインは、`.pw` のドメインで、GitHub Pages を利用してHPを公開しています。
また、メールアドレスはありません。

## 費用・期限
更新費用が、お名前.comの 2,980円/年 に対し、GoogleDomains では 1,050円/年 と、ほぼ三分の一になります。
移行後の期限ですが、お名前.comの残り期間に1年加算されます。
お名前.comで更新した直後でも、移行を躊躇う必要はありません。

# お名前.com 側の準備
##ドメイン移管ロック の解除
まず、ドメイン移管ロックを利用している場合、解除します。
以下の様に、「設定済み」となっている場合、移管ができませんので、解除が必要です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/892c7796-067f-da67-93ec-8aeecfe00449.png)

## Whois情報公開代行設定 の解除
Whois情報公開代行設定 を利用している場合、ドメインの移管に失敗するので、解除が必要です。
設定を確認し、必要であれば解除を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/fd1a9182-7f2c-c1a3-046e-dfa72a68fe27.png)

## AuthCode の取得
ドメイン移管の際に必要な、AuthCode を取得します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/1b5d8533-9144-1205-46c9-02f74fc75eca.png)

# GoogleDomains での作業
https://domains.google.com/ で作業を行います。
GooglePayにクレジットカードを登録しておくと、スムーズに進むかと思います。

## ドメインの移管
移管したいドメインを入力し、続行を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/772fc021-7165-f5dd-a81f-a46638e654a9.png)
急にマテリアルデザインのサイトに切り替わります。
認証コードの欄に、先ほど取得したAuthCodeを入力し、続行を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/65e25b94-350a-c434-17db-3a728ee701d5.png)
移行後のDNS関連設定に関する項目が出てきます。
今回は、お名前.com のDNSサーバをもともと利用していたので、移管とともに利用できなくなります。
よって、Googleに任せる を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/4c1daaad-9b6c-7e0c-d44b-8c26fa294e9e.png)
自動更新と、プライバシー保護(お名前.com の Whois情報公開代行設定 に相当？)に関する設定項目が出てきます。
とりあえず両方有効にして、購入手続きに進みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/74cdbb47-43b7-79fc-6593-05ad5f930fc3.png)
決済画面です。
GooglePayにクレジットカードカードが登録されていれば、何も変更点はありません。
今回は事前に一度テストしているため出てきませんでしたが、個人情報の入力画面が出る場合もありますので、適宜入力してください。
ちなみに、お名前.com では利用できなかった、三菱UFJのVisaデビットで決済できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/1e82fdc7-b392-206a-e603-60c9436f1123.png)
Googleが後はよしなにしてくれるはずです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/e8e352ec-74a3-45dd-ffa8-3ec4642c5942.png)

# メールでの確認
お名前.com から、手続きのメールが来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/fb5babbf-8fac-863c-da21-2075134ae974.png)
以下のようなサイトに飛ばされるので、承認、決定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/21528c71-53d0-e8af-161d-bf913beec8eb.png)

# 移管確認
お名前.comでの手続きが終了後、2時間ほどたつと、GoogleDomainsのマイドメインにドメインが追加されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/23fcee2a-1192-195b-bd6f-8a5a376fb13b.png)
また、GoogleDomainsに設定したメールアドレスに、メールアドレス確認メールが来ているので、認証が必要です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/50286/df4f6011-2953-8571-8c55-802827f45f5f.png)

# まとめ
* ドメインの移管は簡単、数時間で完了する
* 一部のTLDではお名前.comから移行することで更新費用が大幅に安くなる
Rdkitを使った構造化

<h1>目的</h1>
pythonライブラリにあるRdkitを使って、化合物を２次元可視化すること

※ちなみに、これを書いた人は完全な文系であるため、専門的知識はない。（本やネットで得た知識を自分なりに解釈をしている。）そのため、間違っていたら、ご教授を願いたい！

<h3>実装</h3>
まずは、データ入手から始める。
今回は、pythonライブラリの１つである「pubchempy」を使って、[pubchem](https://pubchem.ncbi.nlm.nih.gov/)から化合物データを入手する！
※pubchempyはAnacondaから入手できる（https://anaconda.org/bioconda/pubchempy)

```
from rdkit.Chem import Draw #可視化する時に使う
import pubchempy as pcp #pubchemからデータを入手に使う
```

まずはこれらをインポートをして置く。

```
columns = ['IUPACName', 'MolecularFormula', 'CanonicalSMILES']
```

先にpubchemから入手しておきたいカラム名をリスト型で決めておく。（左から、「IUPA名、分子式、smiles」）
今回は、「セロトニン」をpubchemから取ってくる。


#次に、セロトニンをpubchemからDataFrameに取得

```sample.py
sero = pcp.get_properties(properties, 'Serotonin','name', as_dataframe=True)
sero #=> CanonicalSMILES：C1=CC2=C(C=C1O)C(=CN2)CCN	IUPACName：3-(2-aminoethyl)-1H-indol-5-ol	MolecularFormula：C10H12N2O
```

```sample.py
pcp.get_properties(properties, 'Serotonin','name', as_dataframe=True)
```

as_dataframe=Trueにすることで、pandasのDataFrameのような形になります。


#次に、可視化をして行きます。

```sample.py
a = sero.iloc[:, 0].values

for i in a:
    mol = Chem.MolFromSmiles(i)

Draw.MolToImage(mol) #=>MolToImageが描写するメソッド
```

あまり美しくないが、今回は「可視化」が目的なので省略します。
これによって、出されるのが

<img width="326" alt="スクリーンショット 2018-11-17 22.12.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/270887/a72b0ce4-9a21-782b-2348-431f78080206.png">


このように表示されます。Wikiやpubchemで実際の形を見てみると、左右逆になっているが、とりあえずOKかな！？
（SMILES式で描写しました。違ったら指摘してください）


#まとめ
今回は、Rdkitを使って描写をしたが、他にも計算や三次元の描写ができるらしい。まだまだ使い始めたばかりだが、挑戦して行きたい。

#参考文献
- https://pubchem.ncbi.nlm.nih.gov/compound/5202#section=Top
- https://qiita.com/mojaie/items/2113274201038b29af3d
- https://future-chem.com/pub-chem-py/
Kotlinでアプリを動かすお勉強3


## 文字列はリソースとしてxmlで定義しておけるみたい

［Android & Kotlin］ EditText の文字を入力する
https://akira-watson.com/android/kotlin/edit-text.html

## ビルドについて

アプリをビルドして実行する  |  Android Developers
https://developer.android.com/studio/run/?utm_source=android-studio


## フラグメントをつかってスワイプしてページするUIの参考例

androidアプリ開発　kotlin部 ： kotlinでTabLayoutとViewPagerで横スワイプしてタブを切り替える方法
http://android.techblog.jp/archives/9965810.html

## イベントをフラグメントで実装する参考例

［Kotlin］ ViewPagerとFragmentPagerAdapterでスワイプによるページの切り替え - JoyPlotドキュメント
https://joyplot.com/documents/2018/01/10/kotlin-viewpager-swipe/

【Android学習】FragmentをKotlinでやってみる - My Note Pad
http://yuki10.hatenablog.com/entry/2018/04/29/222447

	view.findViewById<Button>(R.id.numberButton).setOnClickListener {
	    mTextView.text = "${mTextView.text}!"
	}

## フラグメントマネージャーは抽象に沿う

KotlinでListViewを内包したTabを作成する | すいすいSwift
https://swiswiswift.com/2018/09/25/list-in-tab/

getPageTitleというのを使うとビュー側でなくてアダプター側でタイトルを管理できた
getterはメソッドじゃなくてプロパティで参照するのね	

## findFragmentByPositionつかった

ViewPagerで現在のページのFragmentを取得する方法 - Qiita
https://qiita.com/chooblarin/items/88b4accac0cbb6944d4b

> 最後．特に問題にならないのであればこの方法を使うのが良いと思います．[3]

## 演算子で手間取った

ちょくちょく見そう

３０分で覚えるKotlin文法 - Qiita
https://qiita.com/k5n/items/cc0377b75d8537ef8a85

Kotlin文法 - this、等価性、演算子オーバーロード、Null安全、例外 - Qiita
https://qiita.com/k5n/items/6fe586bf2e5530684681#%E3%82%A8%E3%83%AB%E3%83%93%E3%82%B9%E6%BC%94%E7%AE%97%E5%AD%90

Kotlinの基本型 - 算譜王におれはなる!!!!
https://taro.hatenablog.jp/entry/20120111/1326297175

	論理演算子は関数で。

```kotlin
if (inputTel.text.toString().length != (10 or 11)) {
	...hoge
}
```

> // === 演算子は参照先が同じかどうかをチェックする

## Flow-Sensitive Type

まだよく理解してない。。
型推論に癖（？）があるくらいの認識。

あなたの知らないKotlinのsmart cast - Qiita
https://qiita.com/kmizu/items/2831cde52c055367535c

> 安全なキャストができます、というのは不正確で、KotlinはFlow-Sensitive Typeと呼ばれる型システムを持っています。
ESXi無償版ホストはvCenter Server評価版に追加できなかった、そのほか

タイトルにすべて書いてますが、今日ハマったのでまとめておきます・・・
## 現時点（2018/11/17）では vCener Server 5.5の評価版がダウンロード可能でした

### 60日の有効期限があります
 * https://www.unix-power.net/networking/post-512

![test2.png](https://qiita-image-store.s3.amazonaws.com/0/63696/d5a14df7-e567-b80a-d960-8712f15f20c2.png)

### vCenter Serverは、追加できるESXiホストのバージョンを選びます

* vCenter Serverのバージョンよりも新しいバージョンのホストは追加できない感じです
 * vCenter Server 5.5評価版に、ESXiホスト6.0を追加することはできません
      * https://www.hitoriit.com/entry/2018/07/02/090000
* こんなエラーが出ます

![test3.png](https://qiita-image-store.s3.amazonaws.com/0/63696/5e79be63-a0c4-7284-dde3-3f2d8e7c5e1a.png)

## そしてなにより、vCenter Server評価版はESXi無償版ホストを追加できません

![test1.png](https://qiita-image-store.s3.amazonaws.com/0/63696/07846cf3-50bc-53c7-8b1b-6784fe91c14d.png)

* https://kb.vmware.com/articleview?docid=1018275&lang=ja

### ESXiとvCenter Serverを5.5の評価版で統一すると、60日の評価ができるのだと思います

### 管理できるホスト数を5個くらいに制限した無償版のvCenter Serverを出してくれないかな

* VMware vSphere Essentials Kit（3台のサーバにそれぞれCPUを2個ずつまでのライセンス）が約7万だから難しいでしょうね
 * https://store.vmware.com/store/vmwjapan/ja_JP/cat/ThemeID.37113000/categoryID.67298400
OpenLDAP構築手順(CentOS7同梱版)

#前提
・今回はCentOS7.5を使用
・スキーマファイルは作成済み
　(スキーマファイル作成については別記事にて記載予定)
・1台構成
　(レプリケーション構成については別記事にて記載予定)
・インターネットにつながる状態であること

#基盤の準備
firewallやらsyslogやら
###SELinuxの無効化
これをやっておかないと、なんか動かなくって細かい設定が必要らしいのだけど
よくわからんのでとりあえず無効化します。

```
getenforce
```

⇒Enable＝有効、Disabled＝無効です。

```
vi /etc/sysconfig/selinux
```

----------以下部分を変更------------
～
SELINUX=disabled　　←有効時はここがenableになっています。
～

そんで再起動

```
reboot
もしくは
shutdown -r now
```

###firewallの穴あけ
必要なポートを開けます
※LDAPSは必要に応じて

```
# firewall-cmd --add-service=ldap --zone=public --permanent
# firewall-cmd --add-service=ldaps --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-all
```

最後のコマンドで、以下のようになっていればok

```
～
services: ssh dhcpv6-client ldap
～
```


#OpenLDAPインストール
以下コマンドでOpenLDAPのインストールを行う

```
# yum install -y openldap-servers openldap-clients
```

DB_CONFIGファイルを持ってきます

```
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
```

スキーマファイルを/etc/openldap/schema/に配置する。

slapd.confを以下に/etc/openldap/に配置する。
rootdnのパスワードを更新

```
# slapppasswd
```
SSHA{xxxxxxxxxxxxxxx}が表示されるので
それをコピペしてslapd.confの以下に張り付け

```slapd.conf
～
rootpw　SSHA{xxxxxxxxxxxxxxx}　←ここ
～
```

###baseDNの登録
以下内容を参考にbaseDN登録用LDIFファイルを作成する
※dnは設定によってよしなり修正ください

```
#baseDN
dn: dc=hoge,dc=co,dc=jp
objectClass: top
objectClass: dcObject
objectClass: organization
dc: hoge
o: hoge
```

以下コマンドでベースDNを登録します。

```
slapdd -l /tmp/basedn.ldif
```

###OLCの再構成

```
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d/
```

ユーザデータDBの所有権を変更します。

```
chown ldap:ldap -R /var/lib/ldap
```

サービスを起動して、自動化します。

```
systemctl start slapd
systemctl enable slapd
```


###syslogの設定
OpenLDAPのログはlocal4のファシリティを使用するので
以下コマンドで設定します。

```
vi /etc/rsyslog.conf
```

適当な箇所に以下を入力し保存する

```
# Save LDAP messages also to slapd.log
local4.*                   /var/log/ldap.log
```
ログローテートの設定

```
# vim /etc/logrotate.d/syslog
```

以下のように追記

```/etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/slapd.log
{
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
```

サービスの再起動

```
systemctl restart rsyslog
```
Android Studio 3 でGradleでマルチモジュールでJavaライブラリのテストをSpockで実装したい時

# やりたい事

Android Studio 3.xで、Gradleを使っていて、マルチモジュールでJavaライブラリが含まれている。

そのJavaライブラリのテストをSpockで実装したい。

# 導入

Spockの導入のやり方は色々あるが、モジュールのbuild.gradleに追記していく事になるだろう。
だが、重要本記事のポイントは最後の行のdestinationDir。

```groovy
apply plugin: 'groovy'
dependencies {
    testCompileOnly 'org.codehaus.groovy:groovy:2.5.3'
    testCompileOnly('org.spockframework:spock-core:1.2-groovy-2.5') {
        exclude module: 'groovy-all'
    }
}
compileTestGroovy.destinationDir = compileTestJava.destinationDir
```

# 解説

hoge.groovyでのテストクラスの左に現れる三角から実行した場合、gradleのtaksはgroovyとしてのcompile（compileTestGroovy）が走って.classは生成されるが、それは`hoge/build/classes/groovy/test/`に生成される。
<img width="100" alt="スクリーンショット 2018-11-17 21.37.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/46022/cc116275-7ec1-f797-1660-9ddb596780e7.png">

しかし、Android StudioにおけるTest？はJUnitとなっているようなので、`hoge/build/classes/java/test/`の.classを参照している様子。
そのために`Class not found: "hogehoge" Empty test suite.`とのエラーになってテストが実行できない。

そこで、`compileTestGroovy.destinationDir`をJavaと同じ.classの出力先にする。
sql基本構文




```sql

SELECT

SELECT   カラム名
  FROM   モデル
  WHERE　条件

UPDATE

INSERT INTO

INSERT INTO モデル名
    VAKLUES('値','値','値')

UPDATE

UPDATE モデル名
   SET 入金額　= 1000
 WHERE 日付 ="2018-11-9"

GROUP BY

DELETE FROM モデル名
      WHERE コード = '11'

GROUP BY

SELECT　SUM(price),date
FROM shoppinglist
GROUP BY date;

HAVING

SELECT　SUM(price),date
FROM shoppinglist
GROUP BY date
HAVING　SUN(price)>500;


COUNT

SELECT COUNT(name)
FROM shoppinglist;

```
LaradockでLaravelの環境を5分でつくる

#はじめに

###今回構築したい環境
- Laravel 5.6 (好きな)
- Vue.js (node8.11.4 npm5.6)
- Mysql 5.7
- Nginx

###僕の環境
- MacOS Mojave 10.14
- Docker of Mac

###ディレクトリ構造
```
myapp
├── laradock
└── src (Laravel)
```
※　DockerとGitのコマンドを入力出来るようにしてください。

##Laradockを準備する
####プロジェクトフォルダの作成

```
$ mkdir myapp && cd myapp
```

####下準備ができたのでLaradockをクローンします。

```ruby:myapp
$ git clone https://github.com/Laradock/laradock.git
```
ここまで来ると上記に記述したディレクトリ構造が出来ると思います。
Laravelをインストールする前にLaradockの環境設定していきます。
####Laradock環境設定
laradockフォルダに移動し.envを作成します。

```ruby:myapp
$ cd laradock && cp env-example .env
```
####.envを下記のように編集します。


```ruby:laradock
APP_CODE_PATH_HOST=../  #後にPATHを通します。

DATA_PATH_HOST=.laradock/data　 　#MySQLファイルが永続化しているため。

NGINX_HOST_HTTP_PORT=80　  #80番を他で使用している場合は変更しましょう。

MYSQL_VERSION=5.7　  # バージョン指定
MYSQL_DATABASE=    # 作成するDB名
MYSQL_USER=　 　      # ユーザー名
MYSQL_PASSWORD=    # パスワード名
```
MySQLを5.7に指定しているのは**Sequel pro(データベースのGUIツール)**がまだMySQL8.0に対応していないためです。またSequelproは8.0に対応しないと表明が出ていたので、どうしても8.0を使いたい場合はその他のCUIやGUIで作業を行ってください。

####Dockerを立ち上げる
```ruby:laradock
$ docker-compose up -d nginx mysql

Starting laradock_mysql_1              ... done
Recreating laradock_workspace_1        ... done
Recreating laradock_docker-in-docker_1 ... done
Recreating laradock_php-fpm_1          ... done
Recreating laradock_nginx_1            ... done
```
立ち上がると[localhost](http://localhost)へアクセスしてみてください！

[404 Nginx]が表示されると思います。
Ngiinxがしっかり立ち上がってることが確認出来ます。

####workspaceコンテナに接続

```ruby:laradock
$ docker-compose exec workspace bash
```

このコマンドでDocker内に入る事ができます。Dockerで作業し始めるとartisanコマンドなどLaravelでコマンドを入力するときはWorkspaceに入ってから実行するようになるので気をつけてください。

##Laravelをインストールして設定ファイルの編集

カウントディレクトリが**/var/www#**になってると思いますのでComposerを使ってLaravelをインストールしましょう！この記事では"5.6.*"でバージョンを指定します。

```ruby:laradock-workspase
/var/www# composer create-project laravel/laravel src "5.6.*"
```
Versionを指定しない場合は最新版がinstallされます。
詳しくは公式のDocumentを参照してみてください。

###Laravel内の.envファイルを編集

```ruby:src/.env
DB_CONNECTION=mysql
DB_HOST=mysql #デフォルトは127.0.0.1かと思いますが、mysqlに変更
DB_PORT=3306
DB_DATABASE= #　　Laradockで設定したDB名
DB_USERNAME= # Laradockで設定したユーザー名
DB_PASSWORD= #　　Laradockで設定したパスワード
```

ここでもう一度localhostにアクセススしてみてください。まだ[404 Nginx]が表示されているので、LaravelのWelcomeページを表示させて行きます。





###Laradock内の.envファイルを再度編集

一度`exit`してWorkspaceを抜け、`docker-compose stop`を実行してください。

そしてlaradock内の.envfileを再度編集し、laravelにPathを通します。
```
APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../src/  
```

完了できたらもう一度`docker-compose up -d nginx mysql`で立ち上げ、localhostにアクセスしてみましょう。

Welcomepageが表示されたと思います。

※注意　最初にPATHを通すとsrc/srcのディレクトリ構成になるのであえて２度編集を加えました。
これでLaradockを使ったDockerとLaravelの環境構築は終了です。


##さいごに
Laradockを使えばめちゃくちゃ簡単に環境構築出来ますが、Dockerを理解できるとその他言語の環境もめちゃくちゃ簡単にできるので、おすすめです！

また高評価、コメント、フォローお願い致します！

###参考にさせて頂いた記事

- [Laradockドキュメント](https://laradock.io/)
- [LaradockでMySQLがどうしても立ち上がらない人あつまれー！](https://qiita.com/lara_bell/items/d4bd1340a5cc7dfcfcb4)
[環境構築] Spring Tool Suite4 インストール(Mac)

初稿: 2018/11/17
## 目的
インターン先で使っている spring を使って、何かWEBサービスをつくる

やっぱり、環境開発が一番手間取るしやる気なくすことが多いと思う(二敗)ので、資料をできるだけ残す。

## PC環境


~~~shell
macOS Mojave Version10.14
%brew --version
Homebrew 1.8.2
Homebrew/homebrew-core (git revision 0998; last commit 2018-11-17)
Homebrew/homebrew-cask (git revision 11b48e; last commit 2018-11-16)
~~~

##[参考にさせていただいた先駆者様](https://qiita.com/segur/items/f9d7b5cdbc02531ffbb0)
基本的にここの人との差分だけ記述します。

英語の勉強のため、日本語化はとりあえずしません。

### Path

~~~shell
% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
miyazakBookpuro% echo $M2_HOME
/usr/local/Cellar/maven/3.6.0/libexec
~~~

### STS install
STS3.9から4.0にかわっていたため少しとまどいましたが、SpringTool4 for Eclipseをインストール(ちなみにbrewにstsはないみたいでした。)

### lombok setting
(何に使うんやろうか)

lombok.jarを実行したときは、Specify Locationより

~~~shell
/Applications/SpringToolSuite4.app/Contents/Eclipse/SpringToolSuite4.ini
~~~

を選択します。(一敗)

### encoding
[Preference]->[General]->[Workspece]->Text file encoding 
をチェック

### JRE の確認
[Preference]->[Java]->[Installed JREs]
選択しているJREをJAVA_HOMEと同じものにしておく(一敗)
java10.0とjava11.0になったときにoracleJdkからopenJdkになっていて二つあったりした。

### ここまでで、[この本](http://amzn.asia/d/iRAGH5Z)のインストール手順の内容も網羅したので、終わります。

#### てゆうかSTS4.0の導入について書いてある[記事](https://qiita.com/kurukuruz/items/3425a6f7a836433ca9f8)(windows)がすでにありましたわ....
旧バージョンのESP32ライブラリを削除するメモ


[ESP32 用 Arduino 開発環境の初の安定版 1.0.0 がリリースされたのでセットアップした 20180730 版](https://qiita.com/Guwashi/items/1009faab2d3db24d80d5)の記事を見て、Arduino IDEのボードマネージャーからESP32のArduinoライブラリをインストールしてみました。

旧バージョンと名前被りが発生したので過去のやつを消します。

## インストールはだいぶ簡単に

ボードマネージャに以下のURLを追加するとインストール出来ます。

```
https://dl.espressif.com/dl/package_esp32_index.json
```

確かにv1.0.0が出ててボードマネージャからインストール出来ます。

![](https://i.gyazo.com/27abad6998a1d406375948ed3a389beb.png)


## 昔入れたライブラリと名前が被ってる

どっちだ...

![](https://i.gyazo.com/45c1b192b1840e6cf4875c20499cbfb8.gif)

## ということで消します。

Arduinoのコードを保存している場所(環境設定のスケッチブックの保存場所で分かります。)にhardwareフォルダがあるのでその中のespressifフォルダをまるっと削除します。

![](https://i.gyazo.com/3e42a12f0845f62530624fa82c7ce2a8.png)

**そしてArduino IDEを再起動**します。

## ちゃんと消えてます

二つあったライブラリが一個になってます。
残った方が1.0.0のライブラリですね。

## 所感

昔はpythonとesptool入れて...みたいなのやってたのがすごく面倒だったのでこれでだいぶ楽になる気がします。
pod installしたライブラリのswiftバージョンが古くてBuildできないときの対処法

# 概要
pod installしたライブラリのswiftバージョンが古くてBuildできないときの対処法について
実際に僕が陥った状況と、どのように対処したかをまとめます

# 環境
Xcode Version 10.1
cocoapods version 1.5.3

# やりたかったこと
`Swift 4.2`の開発環境に、Tinder風UIライブラリ[ZLSwipeableViewSwift](https://github.com/zhxnlai/ZLSwipeableViewSwift)を導入(`pod install`)したかった

# やったこと
Podfileを以下のように作成し、`pod install`した

```ruby:Podfile
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'

target 'AppName' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for AppName
  pod 'ZLSwipeableViewSwift'

end
```


# 起きたこと
`swift3.0`記法が原因に思えるエラー大量出現
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123416/a3b17813-6761-fada-5ba2-1edf998fb662.png)

# 直すためにやったこと
対象のライブラリのcommitログを拝見し、`swift4`対応まで行われていることを確認。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123416/10393ad8-12d2-fc31-ace3-7bf5697c53cd.png)

ではなぜ`pod 'ZLSwipeableViewSwift'`では、swift3系でinstallされたのか。
→無理やり最新のコミットを指定すれば、swift4系の改修が取り込まれているはず。

そこで、pod installしたいライブラリの最新のcommitを指定し、`pod update`を実行

```ruby:Podfile
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'

target 'AppName' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for AppName
  pod 'ZLSwipeableViewSwift', :git => 'https://github.com/zhxnlai/ZLSwipeableViewSwift.git', :commit => '18d6109'

end
```

無事、ビルド成功しました。

# 参考文献
- [Podfileについて by guides.cocoapods.org](https://guides.cocoapods.org/using/the-podfile.html)
- [pod installとpod updateの違いについて](https://qiita.com/shtnkgm/items/db45fd85c63696fd769b)

# あとがき
一旦、 ~~ちからわざ~~即席で対応しましたが、もっとスマートな解決方法がありましたら、どなたかご教授ください
RailsでのRSpecの導入方法

## はじめに
初めてRSpecを実装したので、自分用の備忘録としてまとめておきます。

## Rspecを使う準備
### 1. ``rspec-rails``のインストール

```Gemfile
group :development, :test do
  gem 'rspec-rails'
end
```

```
$ bundle install
```

### 2. 設定ファイルの作成

```
$ rails generate rspec:install
```
上記のコマンドを入力すると、Rspecに必要な設定ファイルが作成される。

```
Running via Spring preloader in process 75349
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb
```

| ファイル名 | 役割 |
| ------------ | ------------- |
| .rspec | Rspec用の設定ファイル |
| spec | 自身で作成したスペック(テスト)ファイルを格納するディレクトリ |
| spec/spec_helper.rb | Rspecの全体的な設定をカスタマイズするためのヘルパーファイル |
| spec/rails_helper.rb | Rails特有の設定をカスタマイズするためのヘルパーファイル |

※ 2つのヘルパーファイル内には、カスタマイズできる内容がコメントで書かれている。

## testディレクトリの削除
Minitestを使う場合は、testディレクトリ内にテストファイルを格納していくが、
Rspecを使う場合は、specディレクトリ内にテストファイルを格納していくので、削除して良い。

ただし、Rspecを導入する前の既存のテストがある場合は、Rspecに移行して削除する。

## 参考
[GitHub RSpec](https://github.com/rspec/rspec-rails)
VT-xとHyper-VとVirtualBoxの関係についてのメモ

#これは何？

私の技術メモです。

そもそもは**Docker for WindowsとVirtualBoxは共存できない？**から始まり、Hyper-V含めたその辺りの関係性がよくわからなかったので、調べた結果を自分向けに整理します。
違うところがあったらどなたか教えてください！



# 知りたかったこと

Hyper-VとVirtualBoxはなぜ同時に使用できないのか？



# 個人的な結論

VT-xを同時に使用できるのは一つの機能だけだから。
(AMD製は調べてません)



# 調べた

## 登場するもの

* VT-x(Intel VT)
 * 仮想化支援技術

* Hyper-V
 * VT-xあるいはAMD-Vが必要

* VirtualBox
 * VT-xあるいはAMD-Vが必要

* Docker for Windows
 * Hyper-Vの上で動く
     * 肝要なのは「Hyper-Vが必要」っていうところだけです

## なぜHyper-VとVirtualBoxは共存できないのか？

↑の情報だけなら、VT-xを有効にしていればHyper-V(とDocker for Windows)とVirtualBoxのどちらも使えるのでは？と思いました。
その後調べてみて、↓を見つけました。(古いけど…)

[hyper-v disables vt-x for other hypervisors](https://social.technet.microsoft.com/Forums/windows/en-US/118561b9-7155-46e3-a874-6a38b35c67fd/hyperv-disables-vtx-for-other-hypervisors?forum=w8itprogeneral)
ここには回答に
> Because when hyper-V is installed on Windows 8 Pro, the hypervisor is running all the time underneath the host OS, and only one thing can control the VT hardware at a time for stability.
> The hypervisor blocks all other calls to the VT hardware.

ということがMicrosoft MVPの方によって書かれています。
個人的訳ですが恐らく、
> 同時にVTハードウェア(=VT-x?)をコントロールできるのは、安定性のために1つだけです。
> ハイパーバイザ(=Hyper-V?)は、他の全てがVTハードウェアを呼び出しすのをブロックします。

ハッキリと「1つだけです」「ブロックします」と書かれており、これならHyper-VとVirtualBoxが同時に使用できないことが納得できます。

この投稿はWindows8 Pro時代のものなので間違っている可能性がありますが、Windows10 Hyper-Vのシステム要件に「他の呼び出しをブロックする」とまでハッキリ書いてあるところが見つからなかったので、Hyper-Vのこの仕様は変わってないだろう…と思って納得することにしました。(ダメかな…？)

## なぜHyper-VとVirtualBoxは共存できないのか？2019/06/21追記
[Switch between Hyper-V and VirtualBox or VMware on Windows 10](https://finsterbt.com/switch-between-hyper-v-and-virtualbox-on-windows-10/)
こちらではWin10として同様のことが書かれているので、個人的にはより納得感が増しました。

# 参考にさせて頂いたもの(ありがとうございます)
* [VirtualBoxとHyper-V(Docker for Windows)は共存できない？](http://www.cyamax.com/entry/2017/05/07/060000)
* [hyper-v disables vt-x for other hypervisors](https://social.technet.microsoft.com/Forums/windows/en-US/118561b9-7155-46e3-a874-6a38b35c67fd/hyperv-disables-vtx-for-other-hypervisors?forum=w8itprogeneral)
* [Switch between Hyper-V and VirtualBox or VMware on Windows 10](https://finsterbt.com/switch-between-hyper-v-and-virtualbox-on-windows-10/)
javascript オブジェクト　連想配列


## オブジェクトとは


- 連想配列はハッシュに中にデータが詰まったモノ

- オブジェクトは中の要素を含めて、

- オブジェクトは、「プロパティとメソッド」で構成される

- new演算子で生成する


```
生成

var 変数名　= new オブジェクト名([hikisuu
,...])

初期化
変数名.プロパティ名
変数名.メソッド名()

例）
var str = new String('こんにちわ');

document.writeln(str)

→こんにちわ

str = "yahoo"
document.writeln(str)

→　yahoo
``
MacをMojaveにしたら、Vagrantが動かなくなった時の対処

最近MacをMojaveにアップグレードしたら、唐突にVagrantが動かなくなりました……。
その時の解決策を紹介します。

## 発生したエラー

`vagrant up`はMacのアップグレードにより突然の死を迎えました。

```bash
$ vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterfaceWrap, interface IHostNetworkInterface
VBoxManage: error: Context: "RTEXITCODE handleCreate(HandlerArg *)" at line 94 of file VBoxManageHostonly.cpp

```


##　解決策

まずvirtualboxをアンインストールして、

```bash
$ brew cask uninstall virtualbox
```

インストールし直すだけです。

```bash
$ brew cask install virtualbox
```

これで私の環境ではすぐに治りました。
spring bootのjdbcTemplateでSQLをプロパティファイルに切り出す

### 1. はじめに
前回の記事「[spring bootの組み込みh2dbにjdbcTemplateでアクセスする](https://qiita.com/5zm/items/507e898b840277edb9bd)」でSQLを「`@Value`で外出しするのも可能」と書きました。
そうしたらそのやり方を教えてほしいと言われたので、今回記事にしました。

spring bootはデフォルトで`src/main/application.properties(.yml)`ファイルを読み込んで`@Value`で参照することができます。
しかし、このメインのプロパティファイルに、定義が増えそうなSQLを書くのは好ましくありません。
そこで今回はjdbcTemplateのSQL専用のプロパティファイルを定義する方法について説明したいと思います。

### 2. 実装

SQLを外部ファイルに切り出すところに関係する内容だけ記載します。
jdbcTemplateの説明については[前回の記事](https://qiita.com/5zm/items/507e898b840277edb9bd)を参照ねがいます。
ポイントは`@org.springframework.context.annotation.PropertySource`アノテーションでファイルを指定するだけです。
フィールド名が定数っぽいのは、前回のソースコードをそのまま動かすためです。

```java:FileInfoRepository.java
// ... omitted

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;

// ... omitted

// ★ポイント
@PropertySource(value = "classpath:sql/FileInfoRepository.properties")
@Repository
public class FileInfoRepository {

    private static final Logger LOGGER = LoggerFactory.getLogger(FileInfoRepository.class);
    
    // ★ポイント
    @Value("${FileInfoReppsitory.INSERT_SQL}")
    String INSERT_SQL;
    
    @Value("${FileInfoReppsitory.DELETE_BY_KEY_SQL}")
    String DELETE_BY_KEY_SQL;
    
    @Value("${FileInfoReppsitory.UPDATE_BY_KEY_SQL}")
    String UPDATE_BY_KEY_SQL;
    
    @Value("${FileInfoReppsitory.FIND_ONE_SQL}")
    String FIND_ONE_SQL;
    
    @Value("${FileInfoReppsitory.FIND_ALL_SQL}")
    String FIND_ALL_SQL;

    @Autowired
    private NamedParameterJdbcTemplate jdbcTemplate;
    
    // omitted
}
```

```properties:src/main/resources/sql/FileInfoRepository.properties
FileInfoReppsitory.INSERT_SQL=INSERT INTO file_info (file_id, file_type, file_name, file_path, content_type, content_length, registered_date) values (:fileId, :fileType, :fileName, :filePath, :contentType, :contentLength, :registeredDate)
FileInfoReppsitory.DELETE_BY_KEY_SQL=DELETE FROM file_info WHERE file_id = :fileId
FileInfoReppsitory.UPDATE_BY_KEY_SQL=UPDATE file_info SET file_type = :fileType, file_name = :fileName, file_path = :filePath, content_type = :contentType, content_length = :contentLength, registered_date = :registeredDate WHERE file_id = :fileId
FileInfoReppsitory.FIND_ONE_SQL=SELECT file_id, file_type, file_name, file_path, content_type, content_length, registered_date FROM file_info WHERE file_id = :fileId
FileInfoReppsitory.FIND_ALL_SQL=SELECT file_id, file_type, file_name, file_path, content_type, content_length, registered_date FROM file_info ORDER BY file_type, registered_date
```

**（注意）
プロパティファイルなので１行で記載する必要があります。
長いSQLでも途中で改行することができないので注意してください。
ちなみにymlにしたところでSQLを記載する値のところで改行できないため、やっぱり見づらいです。**

```yml
FileInfoReppsitory:
   INSERT_SQL:
      INSERT INTO file_info (file_id, file_type, file_name, file_path, content_type, content_length, registered_date) values (:fileId, :fileType, :fileName, :filePath, :contentType, :contentLength, :registeredDate)
```


### 3. さいごに

今回はjdbcTemplateのSQL専用のプロパティファイルを定義する方法について説明しました。
結果を見れば分かりますが、可読性はよくありません。
jdbcTemplateのメリットはさくっと簡単に使えるシンプル性だと思いますが、このメリットが失われてしまいます。
代わりにJavaファイルにSQLを記載するという気持ち悪さは解消されます。
SQLを外部ファイル化する際は各ＰＪでメリット、デメリットを考慮した方がいいでしょう。
brew で `Error: parent directory is world writable but not sticky`

#エラーメッセージ

```shell-session
Error: parent directory is world writable but not sticky
Please report this bug:
  https://docs.brew.sh/Troubleshooting
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/tmpdir.rb:93:in `mktmpdir'
/usr/local/Homebrew/Library/Homebrew/extend/pathname.rb:167:in `atomic_write'
```

#治し方(結果論ですみません)
```
$ sudo chmod +t /private/tmp
$ sudo chmod +t ~/Library/Caches/Homebrew
```
を実行したら治りました。

ソース元
https://stackoverflow.com/questions/42893700/error-parent-directory-is-world-writable-but-not-sticky
macOS Mojave に Jupyter Notebook をインストール

# MacBook Pro を７年ぶりに購入したので新たに Jupyter Notebook の環境を構築した時のメモ

構築ポリシーとしては、なるべくシンプルになるべく不要なものは入れないというもの。
Anaconda は色々いらないものも入りそうなので、極力 Homebrew のみで環境を構築してみたつもり。

<img width="698" alt="スクリーンショット 2018-11-17 22.07.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/317297/6145bcd5-9a72-159d-5437-7c3afe0afc5b.png">

## Xcode のコマンドラインツールをインストール

Command Line Tools for Xcodeをインストール。
ターミナルで以下のコマンドを実行する。

```Terminal.app
$ xcode-select --install
```

# Homebrew をインストール

ホームページ[Homebrew](https://brew.sh/index_ja)に移動。
トップページのインストールコマンドをターミナルで実行する。

```Terminal.app
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# アップデートしておく
$ brew update
$ brew upgrade
```

# python3 と pip をインストール

Homebrew で python3 をインストール。
pip は python3 と一緒にインストールされるっぽい。

```Terminal.app
$ brew install python3

# バージョンを確認しておく
$ python3 -V
$ pip3 -V
$ python -V
```

# pip のアップデート

pip 自身を最新版にアップデートする。

```Terminal.app
$ pip3 install --upgrade setuptools
$ pip3 install --upgrade pip
```

# venvで環境設定

個人用のmacなのに環境分離ツールを使う必要があるかは別として。

```Terminal.app
# venv 以降は環境に合わせて設定
# JupyterNotebook ディレクトリができる
$ python3 -m venv ~/Documents/JupyterNotebook/

# JupyterNotebook 環境での作業に入る。
$ . ~/Documents/JupyterNotebook/bin/activate
```

# ライブラリのインストール

```Terminal.app
$ pip install numpy
$ pip install scipy
$ pip install scikit-learn
$ pip install matplotlib
$ pip install Pillow
$ pip install pandas
```

# jupyter のインストール

```Terminal.app
$ pip install jupyter
```

# Jupyter Notebook の起動

```Terminal.app
$ jupyter notebook
```

# venv環境から抜ける

```Terminal.app
$ deactivate
```

おしまい
javascript 基本 if文 for文　例外処理



```javascript

var x = 10;

if (x >= 30){
   document.writeln('変数xは10以上です')
}else if(x >= 20){

}else{
  document.writeln('変数xは10未満です')
}
```

for文

```javascript
for(var x  = 8; x < 10; x++ {
  document.writeln('xの値は' + x)
}

```


```javascript

var i = 1;

try{
 i = i * j
} catch(e){
 document.writeln(e.message)
}finally{
 document.writeln('処理は完了しました')
}

```
GoのGORMでiterate

# バッチ処理とかで大量のデータをループする場合の話

SQLクエリの結果をぜんぶarrayやsliceにしちゃったら、メモリに優しくないので。
Javaだと下記のような感じで、若手がよく陥るやつ。

```java
ResultSet rs = ps.executeQuery(sql);
List<Hoge> list = new ArrayList<>();
while (rs.next) {
  Hoge h = new Hoge(rs.getString("fuga"));
  list.add(h);
}
return list;
```

# GORMでもsql.Rowsを使う

```go
rows, err := db.Model(&Hoge{}).Where("fuga = ?", "hige").Rows()
defer rows.Close()
for rows.Next() {
  var hoge Hoge
  db.ScanRows(rows, &hoge)
  // 何かいろいろ処理する
}
```

# DB処理はRepositoryに分離して書きたい

`sql.Rows` を使うとこまでは、[GORM Guide](http://doc.gorm.io/advanced.html#sql-builder)に書いてある。
クリーンアーキテクチャとか採用してて、DB処理をRepositoryに閉じ込めたい場合は、CallbackやIteratorを返す実装にする。

### Callback方式
リポジトリ側

```go
func (r *hogeRepositoryImpl) Iterate(callback func(h *Hoge) error) error {
  rows, err := r.db.Model(&Hoge{}).Where("fuga = ?", "hige").Rows()
  if err != nil {
    return err
  }

  defer rows.Close()
  for rows.Next() {
    var hoge Hoge
    r.db.ScanRows(rows, &hoge)
    // コールバックを呼んであげる
    err = callback(&hoge)
    if err != nil {
      return err
    }
  }

  return nil
}
```

リポジトリを使う側

```go
func someCase(db *gorm.DB) error {
  repo := NewHogeRepository(db)

  repo.Iterate(func(h *Hoge) error {
    // Hogeを１個ずつ処理する
  })

  ...
}
```

### Iteratorを返す方式

リポジトリ側

```go
type HogeIterator struct {
  db   *gorm.DB
  rows *sql.Rows
}

func (i *HogeIterator) Next() bool {
  return i.rows.Next()
}

func (i *HogeIterator) Get() *Hoge {
  var hoge Hoge
  i.db.ScanRows(rows, &hoge)
  return hoge
}

func (i *HogeIterator) Close() {
  i.rows.Close()
}

func (r *hogeRepositoryImpl) Iterator() (*HogeIterator, error) {
  rows, err := r.db.Model(&Hoge{}).Where("fuga = ?", "hige").Rows()
  if err != nil {
    return nil, err
  }

  itr := &{ db: r.db, rows: rows }

  return itr, nil
}
```

リポジトリを使う側

```go
func someCase(db *gorm.DB) error {
  repo := NewHogeRepository(db)

  itr, _ := repo.Iterator()
  defer itr.Close()
  for itr.Next() {
    hoge := itr.Get()
    // Hogeで何かする
  }

  ...
}
```

# まとめ
Iteratorの方がめんどい。
VPCでグローバルIP有り、IGW有りで特定のIPアドレス向けにだけ、NATゲートウェイを通す方法



http://iga-ninja.hatenablog.com/entry/2014/09/09/213025
VPCでグローバルIP有り、IGW有りで特定のIPアドレス向けにだけ、NATを通す方法
> 既にグローバルIPアドレスを振っているにもかかわらず、サーバーからのアクセスは特定のIPアドレスだけにしたい場合、どうしようかという話です。そんなケース有るの？

諸事情により、インスタンスに直接ログインして操作する必要があるが、あるAPIだけアクセス元IPを固定したかった。

### 1． NATゲートウェイ用のサブネットを作成する。

元記事と同様、NATゲートウェイは、アタッチしたサブネットのルートテーブルを使用するので、専用のサブネットを作成する。

### 2． ルートテーブルの設定

NATゲートウェイがあるサブネットのルートテーブル

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83911/0ef532cd-d505-ac7a-b978-4c2ba16b651b.png)

EC2インスタンスがあるサブネットのルートテーブル

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83911/1f77c403-6184-3ff7-8d4e-8a7bd1c35137.png)

### 3． 確認
tracerouteで確認する。

```
[ec2-user@ip-172-29-3-40 ~]$ traceroute 192．188．10，2（指定したIPアドレス）
traceroute to 192．188．10，2, 30 hops max, 60 byte packets
 1  172.29.3.5 (172.29.3.5)  1.457 ms  1.450 ms  1.444 ms
 2  ec2-15-41-192-150.ap-northeast-1.compute.amazonaws.com (15.41.192.150)  15.562 ms ec2-175-4-12-158.ap-northeast-1.compute.amazonaws.com (175.4.192.158)  15.571 ms ec2-175-41-192-15.ap-northeast-1.compute.amazonaws.com (175.41.192.15)  15.563 ms
 3  * * *
 4  * * *
 5  * * *
```

作成したNATゲートウェイを通してアクセスしている
Linuxテキスト処理Tip - 行列変換

いわゆる行列変換です。
盾と矛…ではなくて縦と横を入れ替え（て、表形式に整形して表示す）る方法です。

タブ区切りテキスト hoge.tsv を処理する場合:

```
TD=$(mktemp -d)
cat hoge.tsv | nl -v 1000 | while read -r nm ln; do echo "$ln" | tr '\t' '\n' > $TD/$nm.txt; done
ls $TD/*.txt | xargs paste | column -ts$'\t'
rm -r $TD
```

この処理には専用のコマンドが存在せず、また、一行野郎にまとめるにはちょっと面倒なのは、少し調べればすぐわかります。
良くあるのは、2次元配列に読み込んで縦と横を入れ替えて出力するプログラムですが。
そういうプログラム的発想ではなく、もっとこう、テキスト処理の範疇で何とかならないかと考えた手順です。
一時ファイルを作らざるを得なかったのが痛恨事ですね。

ちなみに ```cat hoge.tsv``` の部分をmysqlなどでのselect文に置き換えると、応用が広がるでしょう。
行数が9行以下なら ```nl``` コマンドのオプションは省略できます。

一度ばらしたデータをpasteコマンドで集め直しているので、何かの拍子にデータのズレが発生すると目も当てられません。改行コードを含むデータが混じるとか。RDBをいじっていると良くある話です。
御注意ください。

ま、90%の処理はうまくいくと思ってますので、改善する予定はありません:p

余談:
WindowsでやるならExcelを利用できます。頭を悩ませる必要はありません。頭を使う前に手を動かせ！
技術屋としてはそれもどうかと思いますが。