OmniAICreator/Qiita-1.07M huggingface dataset:
自分用勉強メモ4日目

# 調べた知識

## [Exchangeable image file format](https://ja.wikipedia.org/wiki/Exchangeable_image_file_format)

Exif．
写真のメタデータ(撮影日時など)が保存されている．
GPS情報が含まれているので，注意が必要．
タイムゾーンの設定がないらしい．

# tips

## 仮想マシンの共有フォルダがマウントされなかった

[Virtualboxの共有フォルダ設定](https://qiita.com/haseken/items/982c5369988636991a4a)
Guest Addtions をインストールして再起動すれば解決した．
環境
- Guest OS: Ubuntu 19.04
- Virtualbox 6.0.6
- Host OS: macOS Mojave 10.14.4

## スーパーユーザじゃないと共有フォルダにアクセスできなかった

以下を実行してユーザをvboxsfグループに追加して解決．

```
gpasswd -a ユーザ名 vboxsf
```

# cpawCTF

ksnctfよりも難易度が低く初心者に優しいと聞いて解いてみた．
これなら今の自分でもWrite-up調べずに解けそう．

##[Q6.[Crypto] Classical Cipher](http://ctf.cpaw.site/questions.php?qnum=6)

シーザー暗号．
ksnctfのときに実装したPythonスクリプトを実行してフラグ獲得．

##[Q7.[Reversing] Can you execute ?](http://ctf.cpaw.site/questions.php?qnum=7)

問題ファイルをfileコマンドで見てみると，`ELF 64-bit LSB executable`と書いてある．
Ubuntuでファイルを実行してフラグ獲得．

## [Q8.[Misc] Can you open this file ?](http://ctf.cpaw.site/questions.php?qnum=8)

問題ファイルをfileコマンドで見てみると，`Name of Creating Application: Microsoft Office Word`と書いてある．
Wordで開くとフラグ発見．

## [Q9.[Web] HTML Page](http://ctf.cpaw.site/questions.php?qnum=9)

HTMLソースを開いて"flag"で検索したら発見した．

## [Q10.[Forensics] River](http://ctf.cpaw.site/questions.php?qnum=10)

ヒント通り，Exif情報を抜き出す必要がある．
今後も使うことを見込んで，Exifを扱うスクリプトを書いてみた．

```Python
from pprint import pprint
import sys
from PIL import Image
from PIL.ExifTags import TAGS


def conv_deg(fractions):
    d = float(fractions[0][0]) / fractions[0][1]
    m = float(fractions[1][0]) / fractions[1][1]
    s = float(fractions[2][0]) / fractions[2][1]

    return d + (m/60) + (s/3600)


class MyExif:

    def __init__(self, jpeg_path):
        target_image = Image.open(jpeg_path)
        exif_info = target_image.getexif()
        self.info = {
            TAGS[id]: value for id, value in exif_info.items() if id in TAGS
        }

    def print_info(self):
        pprint(self.info)

    def get_GPS(self):
        gps_info = self.info['GPSInfo']
        latitude = conv_deg(gps_info[2])
        longitude = conv_deg(gps_info[4])
        if gps_info[1] == 'S':
            latitude *= -1
        if gps_info[3] == 'W':
            longitude *= -1
        return latitude, longitude


if __name__ == '__main__':
    exif = MyExif(sys.argv[1])
    print(exif.get_GPS())
```

緯度と経度がわかれば，Google Mapsで検索して答えを見つけることができる．

### 参考
- [GISで使う経緯度の基礎知識とかTIPSとか](https://qiita.com/tag1216/items/0b38ee5aedea0ef4a058)
- [Pythonで写真に埋め込まれているGPS情報から撮影場所を調べよう](https://news.mynavi.jp/article/zeropython-42/)
Railsでポートフォリオを作成する時に活かしたいこと②

＜前回の続き、その２＞

・Railsアプリケーションの雛形を作成。
```$ rails new アプリケーション名　[オプション]　```
オプションではデータベースを指定する。
→```-d postgresql```（インストール済み！）

次にCDでディレクトリに移動して
```$ bin/rails db:create```でデータベースを作成。
＊データベースが作成できればサーバを起動できる！



・ビュー層を効率よく書くためにSlimを使えるようにする。
＊Railsを使った開発ではテンプレートエンジンを使うけど、
元々デフォルトではERBというテンプレートエンジンを使用している。
（よくみる```<html></html>```みたいなやつ。）

今回はHTMLをツリー構造として表現できるSlimを利用する。

まず、２つのgemをアプリケーションに追加する。
```gem 'slim-rails'
   gem 'html2slim'```

＊bundleでインストールして、そのあとサーバを再起動するの忘れないようにすること。
（これはgemを追加したら常に意識しておく）

＊インストールしてもまだERB形式のテンプレートは存在しているので、
　erb2slimコマンドを利用してSlimに変更しておく。
```$ bundle exec erb2slim app/views/layouts/ --dalete```


・アプリケーションの見栄えをよくするために、
Bootstarapを導入するためにgemの追加。
```gem 'bootstrap'```

＊ BootstrapをCSSから読み込めるようにする。
＊Slimと同じようにCSSも効率よく表現するためにSCSSファイルを作成する。

まず、以下を削除。
```$rm app/assets/stylesheets/application.css```
代わりにエディタで```application.scss```を作成。
中に```@import "bootstarap"```を書く。

・Railsのエラーメッセージなどを日本語で表示するのは、
　書籍の内容を読んで設定していくこととします。
Rustでの整数オーバーフローまとめ


Rustで整数値がオーバーフローした場合の挙動をまとめてみます。

# オーバーフローの起きる式

オーバーフローを起こす以下のようなコードを書いて、[Rust Playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e6c783dca32cf3770d5d22274ccdc688)に貼り付けて実行してみます。

``` Rust
fn main() {
    let a: u8 = 200;
    let b: u8 = 100;
    let c: u8 = a + b;
    println!("{}", c);
}
```

これを実行すると以下のような結果になります。

```
thread 'main' panicked at 'attempt to add with overflow', src/main.rs:5:17
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
```

というわけで、Rustは整数オーバーフローを検知し、オーバーフロー発生時にはパニックを起こします。

Releaseモードではどうでしょうか。

```
44
```

Releaseモードだとオーバーフローを検知せず、無視した結果が返ってきました。パフォーマンス上の問題から、Releaseモードではオーバーフローを検知するコードは取り除かれるようです。

C言語などは符号付き整数のオーバーフローは未定義動作になりますが、Rustでは未定義動作にはなりません。そのため、Releaseモードでオーバーフローが起きた途端に全て壊れる、ということはありません。もちろん、捕捉されないオーバーフローは起こさないようにすべきなので、オーバーフローが起き得る箇所では以下に述べるようにプログラマが明示的に制御すべきでしょう。

Rustでの整数オーバーフローの扱いは、[Myths and Legends about Integer Overflow in Rust](http://huonw.github.io/blog/2016/04/myths-and-legends-about-integer-overflow-in-rust/)という記事が参考になります。

# オーバーフローを制御する

整数の操作で起こるオーバーフローは、Debugモードではチェックされ、Releaseモードでは無視されます。それでは、プログラマが明示的にオーバーフローをチェックしたり、無視するにはどうすればよいのでしょうか。そのために、Rustでは整数型にいくつかのメソッドが用意されています。

## wrapping

wrappingで始まるメソッドは、オーバーフローがおきても溢れた桁を無視した結果を返します。

``` Rust
assert_eq!(250u8.wrapping_add(10), 4);
assert_eq!(4u8.wrapping_sub(10), 250);
```

`wrapping_add`で足し算、`wrapping_sub`で引き算になります。他の四則演算や余り等の計算にもメソッドが用意されています。

## checked

checkedで始まるメソッドは、オーバーフローが起きた場合にNoneを返します。

``` Rust
assert_eq!(200u8.checked_add(50), Some(250));
assert_eq!(200u8.checked_add(60), None);
```

wrapping系のメソッドと同様、四則演算やその他の演算のためのメソッドが用意されています。以下同様です。

## overflowing

overflowingで始まるメソッドは、計算結果とその演算でオーバーフローが起こったかどうかのbool値のタプルを返します。計算結果はwrapping系のメソッドと同じになります。

``` Rust
assert_eq!(200u8.overflowing_add(50), (250, false));
assert_eq!(200u8.overflowing_add(60), (4, true));
```

## saturating

saturatingで始まるメソッドは、オーバーフローが起こるような場合に、計算結果がその型の最大値もしくは最小値で飽和します。

``` Rust
assert_eq!(200u8.saturating_add(50), 250);
assert_eq!(200u8.saturating_add(60), 255);
assert_eq!((-100i8).saturating_sub(50), -128);
```

## Wrapping

`std::num::Wrapping`を使って整数をラップすると、`+-*/`といった演算子がwrapping系の演算に置き換わります。

``` Rust
use std::num::Wrapping;
assert_eq!(Wrapping(250u8) + Wrapping(10u8), Wrapping(4u8));
assert_eq!(Wrapping(4u8) - Wrapping(10u8), Wrapping(250u8));
```

# まとめ

整数オーバーフローはバグの温床になりやすいところで、それに対するRustのアプローチは、オーバーフローが予想されるところではプログラマが明示的に処理し、その他の場所ではDebugモードでできるだけ捕捉するというものです。Pythonのように整数オーバーフローが無い言語もありますが、Rustはパフォーマンスも重視する言語ですのである程度プログラマが面倒を見てやる必要があります。ただ、Cなどだとアドレスの計算中に整数オーバーフローが起きるとメモリ関連のバグの原因になるところを、Rustでは`unsafe`なことをしない限り整数オーバーフローが起きてもメモリ安全性が保たれるのはRustらしいところです。
c++11の機能を使ってStopWatchクラスを作ってみる

#tl;dr
c++11からは時間計測のための関数も標準化されている。ただ使い方が複雑なので備忘録も兼ねて、処理をラップしたStopWatchクラスを作って掲載しておく。

```c++
#include <chrono>

struct StopWatch
{
  StopWatch() { pre_ = std::chrono::high_resolution_clock::now(); }
  
　//前回のlap関数コールからの経過時間をmilli sec単位で返す
  double lap()
  {
    auto tmp = std::chrono::high_resolution_clock::now();  // 計測終了時刻を保存
    auto dur = tmp - pre_;
    pre_ = tmp;
    return std::chrono::duration_cast<std::chrono::nanoseconds>(dur).count()/1000000.0;
  }
  std::chrono::high_resolution_clock::time_point pre_;
};

int main()
{
  using namespace std;
  int abc = 0;

//使い方
  StopWatch sw;
  //何か処理1
  cout << "duration1:" << sw.lap()  << endl;
  //何か処理2
  cout << "duration2:" << sw.lap()  << endl;

//より厳密に計測するなら
  sw.lap();
  //何か処理3
  auto dur = sw.lap();
  cout << "duration3:" << dur  << endl;

```

# 解説
今回は、nanosecまで精度を出せるようにしてdouble型で1.0が1msになるように変換している。また、時間の取得にはstd::chrono::high_resolution_clock::now()を使ったけど、Visual Studio 2017の場合、 std::chrono::high_resolution_clockは、std::chrono::steady_clockのエイリアスで、
std::chrono::steady_clockは、_Query_perf_frequencyと_Query_perf_counterを使っている。
ちなみに、精度は落ちるが、std::chrono::high_resolution_clock::now()の代わりに、std::chrono::system_clock::now()を使ってもよい。厳密に計測するならサンプルコードのように、標準出力のコードの前にlap()関数の結果をストアしてそれを表示するにしたほうが、出力処理を含まないより正確な計測結果を得られる。

# 補足
OpenCVを使うなら、[cv::TickMeter](https://docs.opencv.org/4.1.0/d9/d6f/classcv_1_1TickMeter.html)もある。
[Ubuntu16.04] aptでupgradeしたらログイン画面がループするようになったお話

#概要
タイトル通り、```sudo apt upgrade```して再起動したら、ログイン画面がループするようになった。
apt で upgrade するとNvidiaドライバが悪い子になるらしい？
対処法は、 apt-get で upgrade し直せば良いとかなんとか。

#環境
OS: Ubuntu16.04
GPU: GeForce GTX 1070
ドライバ： nvidia-390

#対処手順
1. ログイン画面でCtrl+Alt+F1を押して仮想コンソールに移動する。
1. ユーザ名とアカウント入力してログインする。
1. ```sudo service lightdm stop```でXマネージャを止める。（止めなくてもいいかもしれないけど）
1. 以下のコマンドでupgradeをやり直す。  

    ```bash:  
    sudo apt-get clean 
    sudo apt-get update  
    sudo apt-get upgrade  
    ```

1. PCを再起動する。
GCPのCompute EngineにUbuntu18.10をインストールする。

# 目的
GCPのCompute EngineにUbuntu18.10をインストールする。

# 環境
* OS: macOS Mojave 10.14.4
* ブラウザ: Google Chrome 73.0.3683.103

# 前提
* GCPのアカウント登録のみ完了済み。
* 無料トライアルの登録済み。

# ゴール
<img width="884" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/20971f8d-f59b-d4b4-aa72-db96e5d56319.png">


# 手順
1. Compute Engineを選択する。
2. 「課金を有効にする」をクリックする。
3. VMインスタンスを作成する。
4. 各種設定を行う。
5. VMインスタンス作成後、SSHをクリックする。
6. Ubuntuインスタンスのやり取りに利用するターミナルウィンドウが表示される。

## 詳細
### 1. Compute Engineを選択する。
<img width="1280" alt="全画面_2019_04_22_21_37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/84cc702c-fc10-ad4a-3520-d2cd811e7272.png">

### 2. 「課金を有効にする」をクリックする。
<img width="1280" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/a280338d-3e88-fe80-f5ce-41cb67e3e374.png">

### 3. VMインスタンスを作成する。
<img width="1280" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/fc7caa43-b1b3-db0d-896c-309d3b8ace09.png">

### 4. 各種設定を行う。
![Compute_Engine_-_My_First_Project_-_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/ea15bd38-f3ed-b824-ebea-1d6d60126245.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/5a4c3f91-06d4-a27a-4f27-6689cbca8fac.png)


* 名前：test
* リージョン、ゾーン：us-east-1
    * us-xxのインスタンスだと無料になる。
* マシンタイプ：micro
    * microだと無料になる。
* ブートディスク：Ubuntu18.10
* ディスク:標準の永続ディスク30GB
    * 30GBまで無料になる。
* サービスアカウント：Compute Engine default service account
* アクセススコープ：デフォルトのアクセス権を許可
* ファイヤーウォール：HTTP,HTTPSトラフィックを許可する
* ネットワーキング
    * ネットワーク：default
    * サブネットワーク：default
    * プライマリ内部IP：エフェメラル（自動）
    * 外部IP：test（34.73.74.213）
        * 固定IPアドレスを作成。
    * IP転送：オフ


### 5. VMインスタンス作成後、SSHをクリックする。

<img width="1280" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/1259e219-cf19-1f0e-6fb2-29efd28f97a4.png">

6. Ubuntuインスタンスのやり取りに利用するターミナルウィンドウが表示される。
<img width="884" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396925/20971f8d-f59b-d4b4-aa72-db96e5d56319.png">


# ひとこと
* 次はこのUbuntuにwowza media serverをインストールしようかな。

# 参考
[Linux VM の使用に関するクイックスタート](https://cloud.google.com/compute/docs/quickstart-linux?hl=ja)
【Rubyで機械学習】Rumaleのアルゴリズムをはしらせてみた

Rubyでも機械学習ができると評判の[Rumale](https://github.com/yoshoku/rumale)で、いくつかのアルゴリズムを走らせてみました。

Rumaleの機能概説はこちら → [Rumale🐦チートシート](https://qiita.com/kojix2/items/069a45ebb1104ff4256c)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144608/73cfd771-028b-05d4-e35a-298d1e6fa557.png)（[Rumaleの公式ロゴのアヒルちゃん[^1]](https://twitter.com/misosJP/status/1119420638316249088)）
![z.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144608/063e5ffd-53cc-f3d9-ce43-71067f72a72c.png)

　パラメータはよくわかっていないのでいじっていません。これからいろいろいじって勉強しようと思います。

　ソースコードは…ゴホンゴホン…Gnuplotが扱いづらかったりして、素人がゴリゴリ書いた感が出てるのであまり見せたくないですが、[GitHub](https://github.com/kojix2/rumale_gnuplot)に置きました。これを見るよりも公式を見たほうがいいと思うよ。それでは皆様よいRubyライフを！

[^1]: Illustrator / Graphic designer　[ナツメミオ](http://chucool.web.fc2.com/)
Railsでポートフォリオを作成する時に活かしたいこと①

・復習用と自分用で、学んだことやポートフォリオ等を作成する際に
活かしたいことをここに記述しておきます。

記述している内容はRailsチュートリアル、progate、
書籍のRubyonRails5速習実践ガイドから得た知識となる。
（書籍の回し者じゃないけど、速習実践ガイドめちゃくちゃ分かりやすいのでおすすめです）


#＜データ型＞
・String（文字列）
・Integer（整数）

#＜変数１＞
・ローカル変数→プログラムの中の一定の処理の範囲で行われ、
　　　　　　　その範囲が終わったら捨てられる。

・インスタンス変数→オブジェクトの内部に保持されてオブジェクトが存在する限り一緒に存在する。

#＜用語＞
・メソッド→Rubyオブジェクトの立ち振る舞い。
・引数→メソッドに対して補足的な情報を与えるもの。
＊オブジェクトに（.）をつけ、そのあとにメソッドの名前を記述することで
　メソッドを呼び出すことができる。

・メソッドでよく出てくる```current_user```はサインインしているユーザーを取得する。



・インスタンス変数→オブジェクトが抱えている変数。
　　　　　　　　インスタンス変数の名前の先頭には必ず＠をつける。
　　　　　　　　オブジェクトのどのメソッド内からも利用できる。

・```before_action```→indexなどのアクションメソッドが実行される前に
　　　　　　　　　　　行いたい処理をしてすることができる。
　　　　　　　　　　　例えばログインしている人かどうかなど・・。


さてと、用語は大体この辺りにして（書いてたらキリがなくなりました！笑）、
アプリケーションを作成するにあたってのことをまとめていきます。


#＜アプリケーション作成の準備＞
・作成するアプリケーションの内容を考える。→OK
・アプリケーションの名前を考える。→OK
・アプリケーションの雛形を作成する。→これから
・データベースを作成する。→これから

　　＋　やりたいこと
・ビュー層を効率的に書くためにSlimを使えるようにする。
・アプリケーションの見栄えにBootstrapを導入する。
・Railsのエラーメッセージなどを日本語で表示できるようにする。
Webブラウザで稼働するPython環境「Pyodide」を使ってみる

## Pyodideとは

Pyodide（パイオダイド）とは、Pythonデータサイエンススタックを完全にブラウザ内で動作させるためのMozillaの実験的プロジェクトです。
2019年4月16日にMozillaから「[Pyodide](https://github.com/iodide-project/pyodide)」の発表がありました。
https://hacks.mozilla.org/2019/04/pyodide-bringing-the-scientific-python-stack-to-the-browser/


元々は「[Iodide](https://alpha.iodide.io/)（アイオダイド）」というデータサイエンスの処理をすべてブラウザー内で実行可能にするプロジェクトが発表されていますが、JavaScirptでは演算子のオーバーロードなど、数値計算に役立つ多数の機能（データサイエンスライブラリ）に欠けているため、そちらを充実させるのも大事な一方で、Pythonをブラウザー内で実行できるようにしてしまえば早いんじゃないか、ということで生まれたそうです。

## 導入

今回はDocker版を使うのでDockerが入っていること。

```terminal
$ git clone https://github.com/iodide-project/pyodide.git
Cloning into 'pyodide'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 4434 (delta 2), reused 2 (delta 1), pack-reused 4421
Receiving objects: 100% (4434/4434), 1.01 MiB | 1.99 MiB/s, done.
Resolving deltas: 100% (2846/2846), done.
$
$ cd pyodide/
$ ./run_docker

　　: コンテナ構築

root@d7bd99b9dfa3:/src# make

　　： make作業（3時間近くかかりました...）

root@d7bd99b9dfa3:/src# ./bin/pyodide serve
serving from /src/pyodide_build/../build at localhost:8000
```

これで準備が整いました。

## 実行

コンテナを起動したホストの8000ポートにアクセスします。
ポートの指定はrun_dockerにあるので、8000から変更したい場合は書き換えて下さい。

http://[コンテナホスト]:8000/console.html

試しにpythonコードを実行してみます。

```py
print("Hello, World!")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27443/00a88c87-8197-b7c7-3ba7-e1335137187c.png)


もう少しPythonっぽいものも試してみます。

```py
print([i for i in range(10) if i%2==0])
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27443/51625050-c97a-762d-b9c6-8a731c3390b2.png)


numpyで2変数の連立1次方程式を解いてみましょう。

```math
\begin{eqnarray}
\left\{
\begin{array}{l}
2x + 3y = 15 \\
5x + 3y = 6
\end{array} \right.
\end{eqnarray}
```

```py
import numpy as np

A = np.matrix([[2, 3],
              [5, 3]])
Y = np.matrix([[15], [6]])

print(np.linalg.solve(A,Y)) # x = -3, y = 7
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27443/72d6be2d-70e4-4e0b-e201-79497c60e000.png)


2次関数 $y = x^2$ をグラフ化してみる。
console.htmlではグラフは描かれなかったので、以下のサイトで実行。
https://alpha.iodide.io/notebooks/300/

```py
import matplotlib.pyplot as plt
x = []
y = []
for i in range(0,10):
  x.append(i)
  y.append(i**2)
plt.plot(x,y)
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27443/6c20fcf2-a302-11db-05a8-ea285656807d.png)


requestsは使えないようなので、何が使えるかを確認。

```py
import pkg_resources
for dist in pkg_resources.working_set:
  print(dist.project_name, dist.version)
```

```console
setuptools 40.0.0
pytz 2018.4
python-dateutil 2.7.2
pyparsing 2.2.0
numpy 1.15.1
matplotlib 2.2.3
kiwisolver 1.0.1
cycler 0.10.0
```

ふむふむ、なるほど。
データサイエンスに絞られているようですね。
log4cppでログ出力

###はじめに
Javaのlog4j的なものがC++でもないかと探していたところ、似たようなライブラリを見つけたので、使ってみる。

###ソースコード
ロガークラスを作成する。

```c++:Logger.h
#pragma once
#include <log4cpp/Category.hh>
#include <log4cpp/PropertyConfigurator.hh>

class Logger
{
public:
    Logger();
    ~Logger();
    static bool initLogger(const char*);
    static log4cpp::Category& getLogger(const char*);
};
```

```c++:Logger.cpp
#include "Logger.hpp"

Logger::Logger() {}

Logger::~Logger() {}

bool Logger::initLogger(const char *confName) {
  try {
    log4cpp::PropertyConfigurator::configure("logging.conf");
    return true;
  } catch (log4cpp::ConfigureFailure &ex) {
    std::cout << "Error conf is not exists\n";
    return false;
  }
}

log4cpp::Category &Logger::getLogger(const char *categoryName) {
  return log4cpp::Category::getInstance(categoryName);
}
```
```c++:logging.conf
# カテゴリの設定
log4cpp.rootCategory=INFO, rootAppender

# アペンダの設定
log4cpp.appender.rootAppender=FileAppender
log4cpp.appender.rootAppender.fileName=sample.log
log4cpp.appender.rootAppender.layout=PatternLayout
log4cpp.appender.rootAppender.layout.ConversionPattern=[%d %p %c] %m%n
```

```c++:main.cpp
#include "Logger.hpp"

int main() {
  Logger::initLogger("logging.conf");
  log4cpp::Category &logger = Logger::getLogger("sample");
  logger.info("hello");
}
```

###ビルド/実行
<img width="1037" alt="Logger_sample.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402891/f6ba227c-942e-b913-3952-8801dc1804a6.png">

###参考
http://www.02.246.ne.jp/~torutk/cxx/log4cpp/log4cpp.html
https://www.techscore.com/tech/Java/ApacheJakarta/Log4J/1
新卒社員がデータベーススペシャリストを受験してみた

合格してるか全く自信ないですが、備忘録としてまとめてみました。

#私のスペック
 - この春新卒で中小のシステム開発会社に入社
 - 専門学生のときFE、AP、SCに合格
 - 今年30歳

#試験当日
午前1は免除
ちなみに座席は**出席番号1番の位置、隣と後ろが欠席**、圧倒的に集中できる最高の席でした。
その代わり試験終了の合図のあと、隅の席なので試験官から回答用紙を即回収されるのがなんとなく嫌でした。

###午前2
結果的には、16/25の64点でギリギリ通過でした汗。
新問の知識系が全く分からず、特にビッグデータや分散型データベースなど最近の問題はさっぱり。
既出問題で必死に点数をかき集めるも、3問ほど間違えていました。
試験当時は落胆していましたが、それでも午後があるのでやばい切り替えなきゃと必死でした。

###午後1
問1と問3を選択、予想は7～8割。
####問1
昨年に引き続き、候補キー正規化の問題なし。構成は午後2問2とほとんど同じ。
難易度も普通～易しめで、35分ほどで解答しました。
####問3
問2と問3の選択ですが、問2は80字の記述問題を見てやめました。
基本情報の午前問題でも出る、部品構成ツリーの問題。
かなり解きやすかったです。というかこれデータベースの問題なのか疑問も…。
45分ほどで解答できました。

###午後2
予定通り問2を選択、噂のパン屋さん（正確にはホテルの製パン業務）
全体の問題量は多くないですが、読解するのが難関でした。
予想は5～6割。

####設問1
いつものリレーションお絵かき（エンティティタイプはなし）と、属性を答える問題。
まさかのマスタ・トランザクション間のリレーションシップは書かなくて良いということで、かなり線が少なくなり「これでいいのか？」と疑心暗鬼になってました。
ゲシュタルト崩壊しつつも、1時間である程度解答。
####設問2
業務改善問題でこれが地獄。
半ページ程度の問題文なのだが、全く理解できずしばらく固まっていました。
そして分からないけどとりあえず埋めなきゃという焦りで埋めてました。ダメなパターンですね。
全部回答後して残りは10分でした。

#試験前日まで
話が前後しますが試験までの過ごし方です
##3月
専門学校を卒業し春休みだったので、まったり過去問を解いていました。あとは新生活の準備、こちらはそこまで忙しくない。
そして今思えば、毎日が休日であるこの期間にしっかり勉強をしておくべきでした。
##4月
新社会人になって**死ぬほど疲れる毎日**。

平日は帰って即寝る、全然疲れがとれずで勉強はほとんどできません。加えて新生活なので雑務も多い。まともにできたのは休日のみでした。過去問は午後2だけなんとか2週目までこなせた程度です。
午前問題は通勤時間を使ってドットコムを400問ほど。しかも満員電車の中なので、じっくり勉強はしてません。
最終週はひたすら午後2を書く練習。

#所感
反省含めて2つほど。
##働きながら勉強している人を改めて尊敬
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">学生は自由過ぎた。だから働き始めても続けている人は本当に尊敬するし、自分もそうなりたい。 <a href="https://t.co/EcEEa7wVas">https://t.co/EcEEa7wVas</a></p>&mdash; wata(わた) (@takawata0) <a href="https://twitter.com/takawata0/status/1111589935666991104?ref_src=twsrc%5Etfw">2019年3月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

1番言いたいのはこれです。

働くということを完全に舐めてました。今となっては尊敬どころか崇めるレベルです。
しかし最終的には自分も同じことができないといけません。試験は終わりますが継続して勉強しなければと思います。
##午前2の対策を怠ってはいけない
 - 60点取れなければ終了のため
 - 午後問題の基礎固めのため
 - 午後のメンタルに響くため

特に3つ目が重要です。情報処理試験の午後問題は『暗記』よりも『読解力・記述力』が必要と言われ、そのためには高い集中力が当然必要になってきます。不安な状態で昼休みを過ごし、午後問題に取り組んでは最大限の集中力は発揮できませんね。

目安としては完全暗記でもいいので、過去問で8~9割取れるまで上げるのがよさそうです。

#さいごに
専門学校時代は、周りと一緒に受験だったのでモチベーションは高く保てました。しかし今回は入社した同期でも一緒に受験する友人がいないので、自力でなんとかしなければなりませんでした。そんな中でTwitterで勉強しているTLが流れてきたのは良い刺激になりました。

あとは出来る出来ないはともかく、データベースの問題は解いてて楽しかったです。
結果はどうあれ、来年また受けたいなと感じました。本音は一発で決まってほしいですけど。

# 結果（追記）
合格していました。
午前2は自己採点と一致。午後1は予想以上にできていました。
午後2は設問1の回答例を見て不安要素があたっていました。そんな不安要素を持ちつつも問題に向き合って自分のベストを出せるかどうかで合否が決まるのかなと思っていました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">データベーススペシャリスト合格しました。良かった。。。 <a href="https://t.co/PeXwvwuJ5J">pic.twitter.com/PeXwvwuJ5J</a></p>&mdash; wata(わた) (@takawata0) <a href="https://twitter.com/takawata0/status/1141914779704946689?ref_src=twsrc%5Etfw">June 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
ajaxが動かない時の注意点

久々に触って忘れていたけど、
Ajaxをコールする前に`preventDefault()`してはいけない。


```javascript
$('#submit').on('submit', evt => {
  // call ajax
  evt.preventDefault();
})
```


> 参考
https://stackoverflow.com/questions/20352799/ajax-form-submit-with-preventdefault
AP-RX64M-0AボードでLチカ

# 概要
RX64MマイコンでLチカした際の手順をまとめました。

# 使用機材
* CPUボード [AP-RX64M-0A(アルファプロジェクト製)](https://www.apnet.co.jp/product/rx/ap-rx64m-0a.html)
* E1エミュレータ

# デバッガの設定
デフォルトから変更した箇所はこちら

* メインクロックソース
    * 24MHz（ボードの取説に24MHzのクロック搭載と記載されています）
* メインクロック周波数
    * スマートコンフィグレータで確認したところデフォルトで120MHzでした
* 内蔵フラッシュメモリの書き換え時のクロック操作を許可する
    * __はい__ に変更してください。
* エミュレータから電源を供給する。
    * __はい__ にしていますが、電源に接続している場合は __いいえ__ で進めてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/2a1bd935-8a7b-d799-968b-afbdf16c65ca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/26ef77cb-51b8-06c4-4829-e268f1d434f8.png)


# スマート・コンフィグレータ
コンポーネントの追加をします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/cfa73ff8-4a14-bb6c-22bd-a0d05979d2a3.png)

コンポーネントの選択で「ポート」を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/fa4462c7-23ed-9142-2f97-18a503efee1e.png)

マニュアルではLEDが __PG2__ (ポートGの２)に接続されていると書いてあるので、ポートPG2を出力に設定します。その後「コード生成」を押したらスマートコンフィグレータを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204268/7a76ac33-73bb-6277-2848-19faac591eda.png)

# コード作成
自動生成された「R_Config_PORT.c」に以下２つの関数を記述します。ヘッダファイルである「R_Config_PORT.h」にはプロトタイプ宣言を記述します。

関数名|説明
---|----
R_Config_PORT_ON|LEDを点灯させる関数<br>ポートGのレジスタにビットフィールドでアクセスしてbit２に０を書き込む
R_Config_PORT_OFF|LEDを消灯させる関数<br>ポートGのレジスタにビットフィールドでアクセスしてbit２に１を書き込む



```C:R_Config_PORT.c

void R_Config_PORT_Create(void)
{
    /* Set PORTG registers */
    PORTG.PODR.BYTE = _00_Pm2_OUTPUT_0;
    PORTG.ODR0.BYTE = _00_Pm2_CMOS_OUTPUT;
    PORTG.DSCR.BYTE = _04_Pm2_HIDRV_ON;
    PORTG.PMR.BYTE = _00_Pm2_PIN_GPIO;
    PORTG.PDR.BYTE = _04_Pm2_MODE_OUTPUT;

    R_Config_PORT_Create_UserInit();
}

/* Start user code for adding. Do not edit comment generated here */

void R_Config_PORT_ON(void)
{
    PORTG.PODR.BIT.B2 = 0;//Lowで点灯
}

void R_Config_PORT_OFF(void)
{
    PORTG.PODR.BIT.B2 = 1;//Highで消灯
}

/* End user code. Do not edit comment generated here */ 
```

続いてメイン関数でLEDのON/OFF関数を呼び出します。今回はfor文でウェイトを挟んでいます。

```C:main.c
void main(void)
{
	int i;
	while(1){
		R_Config_PORT_ON();			//LED点灯
		for(i=0; i<12500000; i++){}	//ウェイト
		R_Config_PORT_OFF();		//LED消灯
		for(i=0; i<12500000; i++){}	//ウェイト
	}	
}
```

# 動作確認

動作確認しました

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">RX64マイコンを使い始めたので まずはLチカ <a href="https://t.co/GdRkkrtPfY">pic.twitter.com/GdRkkrtPfY</a></p>&mdash; cyebu1103 (@cyebu1103) <a href="https://twitter.com/cyebu1103/status/1120306332647608321?ref_src=twsrc%5Etfw">2019年4月22日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Shift Operations 🧸

``a << i`` is the same as `` a * pow(2, i)``

```c++:<<
#include <iostream> 
#include <math.h>
using namespace std;

int main(void) {
    unsigned int a = 5, b = 48;
    for (int i = 0; i < 10; i++) {
        cout << (a << i) << " " << a * pow(2, i) << endl; 
    }
    return 0;
}

/*
5 5
10 10
20 20
40 40
80 80
160 160
320 320
640 640
1280 1280
2560 2560
*/
```

``a >> i``  is the same as  `` a / (int)pow(2, i)``

```c++:>>
#include <iostream> 
#include <math.h>
using namespace std;

int main(void) {
    unsigned int a = 48;
    for (int i = 0; i < 10; i++) {
        cout << (a >> i) << " " << a / (int)pow(2, i) << endl; 
    }
    return 0;
}

/*
48 48
24 24
12 12
6 6
3 3
1 1
0 0
0 0
0 0
0 0
*/
```
Reactにおける『props』を理解しよう！

#概要
propsとはComponentの属性のことです。
props.nameやprops.pageなどあるデータの属性に関して参照できるもののことを言います。
文字列、数値、配列、オブジェクト、関数などなんでも使用することができ、基本的には{}で括ってpropsを渡していきます。

前回の記事
[ReactにおけるComponentを解説！](https://qiita.com/micropig3402/items/eeca09b74b2904613ad6)

次回
[Reactにおける『state』を用いて、入力された文字数をカウントしてみよう！](https://qiita.com/micropig3402/items/a1f233963d012982d2f9)

#実際にコードを書いてみよう！
```react:App.js
import React from 'react';

const App = () => {
  return (
    <div>
      <Animal name={'Micro Pig'} />
    </div>
  );
};

const Animal = props => {
  return <div>I love {props.name}</div>;
};

export default App;
```

関数コンポーネント`App`の中で`<Animal name={'Micro Pig'} />`とすることでAnimalコンポーネントにname属性を付与することができました。
そして、関数コンポーネント`Animal`の中で`props`を引数に受け取り、`return <div>I love {props.name}</div>;`とすることで以下のように外からの入力を参照して画面に表示することができます。
<img width="942" alt="スクリーンショット 2019-04-18 22.50.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343290/945bf51c-d12b-c7e2-d8e1-a0ecb8a2bddf.png">

さらに、このAnimal属性に体重（weight）属性を付与し、変数で動物の情報を管理し、`map`を用いて１つずつ表示しようとすると、コードは以下のようになります。

```react:App.js
import React from 'react';

const App = () => {
  const animalProfiles = [
    {
      name: 'Micro Pig',
      weight: 20,
    },
    {
      name: 'Lion',
      weight: 100,
    },
    {
      name: 'Penguin',
    },
  ];
  
  return (
    <div>
      {animalProfiles.map((profile, index) => {
        return (
          <Animal name={profile.name} weight={profile.weight} key={index} />
        );
      })}
    </div>
  );
};

const Animal = props => {
  return (
    <div>
      I love {props.name}! Max-weight is {props.weight}kg
    </div>
  );
};

Animal.defaultProps = {
  weight: 50;
}

export default App;
```

#解説
```react
const animalProfiles = [
    {
      name: 'Micro Pig',
      weight: 20,
    },
    {
      name: 'Lion',
      weight: 100,
    },
    {
      name: 'Penguin',
    },
  ];
```
この部分で`animalProfile[]`の配列を作成し、ハッシュを使い、nameとweightを付与しています。

---

```react:App.js
return (
    <div>
      {animalProfiles.map((animalprofile, index) => {
        return (
          <Animal name={profile.name} weight={profile.weight} key={index} />
        );
      })}
    </div>
  );
```
この部分では、上記の`animalProfiles[]`の各要素を取り出してAnimalコンポーネントのname属性とweight属性にデータを渡しています。
また、Reactには仮想DOMが存在しており、その中でどのDOMが変更になったのか管理し、変更点のみを実際のDOMに反映していくという仕組みがあります。したがって、どのDOMが変更になったかを指し示すためにオリジナルの`Key`というものが必要になります。ここでは`map`を使うことで得られる`index`を`Key`にすることでDOMの管理を行なっております。

---
```react:App.js
const Animal = props => {
  return (
    <div>
      I love {props.name}! Max-weight is {props.weight}kg
    </div>
  );
};

Animal.defaultProps = {
  weight: 50,
};
```
この部分では、実際に親のコンポーネントから受け取った`props`をもとにブラウザにレンダリングを行なっています。`Animal.defaultProps = { weight: 50,};`の部分では、`props`を受け取るコンポーネントにデフォルトで値を設定しておくことにより、今回の場合は`weight`のないデータを与えられた際に自動的に`weight: 50`を付与します。

###出力される画面はこちら
<img width="940" alt="スクリーンショット 2019-04-22 21.29.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343290/219e2f7e-165c-3140-aed0-0fc4a88afece.png">





#まとめ
以上のように親のコンポーネントから子のコンポーネントに、あるデータを渡したいといった時にはこの`props`を大いに利用して行きましょう！
UnityでC++を使う方法

#0.はじめに
環境を載せておきます。

<ul>
<li>Visual Studio Community 2017 Version 15.9.4</li>
<li>Unity 2018.3.0f2</li>
</ul>

#1.C++をDLL化する
基本的にUnityでC++を使うにはDLL化する必要があります。
VisualStudioから新しいプロジェクト->Visual C++->Windowsデスクトップ->Windowsデスクトップウィザード
を選択してください。
ダイナミックリンクライブラリ(DLL) を選択しないのは余計なファイルが大量に作られるため
(DLLのエントリポイントやヘッダ)

今回はaddというプロジェクト名にしています。
ウィザードでは

<ol>
<li>アプリケーションの種類をダイナミックリンクライブラリ(.dll)</li>
<li>空のプロジェクトにチェック</li>
<li>残りのチェックを全部外す</li>
</ol>

![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334847/40293204-4778-76a1-5fef-c779a246af22.png)

ソースファイルを追加して次のコードを書きます。

```C++:Source_add.cpp

extern "C" __declspec(dllexport) int __stdcall add_function(int a, int b) {
	return a + b;
}
```
<sub>*ソースファイルの1行目は念のため開けてください</sub>

関数は引数に2つの変数を取り、足して返すだけのもの。
extern "C" __declspec(dllexport) __stdcallの説明は後々

DLLを作るときは基本的にヘッダもセットで作成することが多いですが
今回はUnityのみでの使用なので作りませんでした(汎用性を考えるなら作った方がいいです)

それではビルドしてください
ビルド->バッチビルドでx86とx64をまとめてビルドできます。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334847/80b780bd-fbad-0329-0dd4-07f11b7ce86f.png)



DLLの場所はプロジェクトフォルダの./Releaseにx86が./x64/Releaseにx64のdllがあります。

#2.extern "C" __declspec(dllexport) __stdcallとはなんなのか
興味のない方は飛ばしてください、しらなくても問題ないです。

まず\_\_stdcallの説明から
\_\_stdcallは呼び出し規約と呼ばれるもので、引数のスタック(変数)の処理に関する決め事みたいなもの
\_\_stdcallがついた関数は、スタックの破棄(巻き戻し)は呼び出された側(つまりDLL側)が行います。
ほかにも \_\_cdeclという呼び出し規約もあり、こちらは呼び出した側(つまりEXE側)が行います。

この呼び出し規約がDLLとEXEで一致してないとスタックの破棄がうまくいかないので、
スタックオーバーフローの原因になります。
x86 Cコンパイラではデフォルトで\_\_cdecl、C#はデフォルトで\_\_stdcallでDLLを呼び出すため
どちらかを設定しなおす必要があります、めんどくさいですが必ずこの構文を明記しましょう。

__declspec(dllexport)構文はDLLのエクスポートセクションに関数名を書き込むためのもので、
これによってEXE側がこの関数を呼び出せるようになります。
仮にもしこの構文がないとDLL内部で使われる関数だと解釈されます。

extern "C" は C++の名前装飾に対処するためのものです。
先ほどエクスポートセクションに関数名が書かれると書きましたが
そのままの関数名で書かれるわけではなく、謎の文字列が付け加えられた関数名になり
呼び出す側はそんなこと知らないのでextern "C"がないと関数名の検索に失敗します。
この名前の変更を名前装飾、マングリングなんて言ったりします。
C++のオーバーロードの機能等を実現するこのような動作をします。

#3.UnityからDLLを呼び出す
AssetsにPluginsフォルダを作成、x86とx86_64フォルダ作成し
先ほどのDLLをぶっこみます。

add.dllのInspector->PlatformsettingsでUnityのアイコンタブから
x86_64のdllならCPUをx86_64にx86ならx86に設定します。
続いてとなりのタブのからx86_64のdllならx_86_x64にチェック
x86なら全部にチェックします(互換性があるため)

Architectureの設定はFile->Build Settingsからできます。
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334847/a92c423d-2265-85a7-3faf-6fb888c10292.png)

適当な空のオブジェクトを作成し、scriptを追加します。

```C#:dll_exector.cs
using UnityEngine;
using System.Runtime.InteropServices;

static class DLL
{
    [DllImport("add", CallingConvention = CallingConvention.StdCall)]
    public static extern int add_function(int a, int b);
}

public class dll_exector : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(DLL.add_function(1, 1));
    }
}
```

DllImport属性でdllを指定、CallingConventionで呼び出し規約を明記できますが
デフォルトでstdcallなのでなくてもかまいません。
修飾子であるexternとstaticはadd_functionが外部にある既存の関数ということなので必須です。

それでは実行してみます。
![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334847/89e901e5-bd29-397d-928f-6b81b8e18601.png)
ちゃんと動作できました。
golang.tokyo#23レポ 2019/04/19 〜Goをはじめるあたって知っておいてほしいツールやテスト編〜

まいたけ[(@maitaketurn)](https://twitter.com/maitaketurn)です。以下の記事の続きです！
https://qiita.com/maitaketurn/items/361b2f2f8396b41cfab3　


## Goを始めるにあたって知ってほしいツール / mom0tomoさん
### ドキュメント等
- https://golang.org/ を参照しよう
  - 日本語サイトのhttp://golang.jp/ は若干内容は古いので注意。
- Goghers.slack.comに参加しよう
  - [ここ](https://invite.slack.golangbridge.org/)から登録できます
- https://golangweekly.com/ を読もう：週1配信だそうです

### コマンドやツールなど
- `$ go env` 環境変数を出力
- `$ gofmt`, `$ go fm` Formatter
- `$ go vet` 静的解析：コンパイラで検知できないものを見つけてくれる
- `$ golint` Linter


##  Goをはじめるにあたって知っておいてほしいツールやテスト / micchieさん
### テストパッケージ
- [testing](https://golang.org/pkg/testing/)
  - golang標準のテストパッケージ
  - *_test.go を作成する
  - *_test.goは、`go test`　を実行したときだけ評価される

### テスト記法
- [TableDrivenTest](https://github.com/golang/go/wiki/TableDrivenTests)
  - 条件によって戻り値が異なるメソッドなどで使う
  - 分岐条件と戻り値をテーブルにし、ループを回す

例）https://qiita.com/yut-kt/items/5f9eb752f40d4d2a2e97
可読性が圧倒的に良くなりますね。

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">テーブル駆動テストでテストするには使いやすいAPIにしないと難しいので、いい感じの設計になるっていう副次効果もある <a href="https://twitter.com/hashtag/golangtokyo?src=hash&amp;ref_src=twsrc%5Etfw">#golangtokyo</a></p>&mdash; tenntennʕ ◔ϖ◔ʔ ==Go@け25 (@tenntenn) <a href="https://twitter.com/tenntenn/status/1119198338010664960?ref_src=twsrc%5Etfw">April 19, 2019</a></blockquote>

- TestMain関数：テストの前処理（環境変数のロードや引数のパースなど）を行うfunction
` func TestMain(m *testing.M)` 
- 詳しくは、`$ go help test`  `$go help testflg`で調べる

### その他・知っておくと良いこと
- [GoPlayground](https://play.golang.org/)　でコードが気軽に試せる

- `func Hello`はglobal, `func hello`はprivate
- defer function名でその関数の中で一番最後に実行されるようになる
- Goのswitchはbreakが不要
- 戻り値が複数指定できる
Create simple, general-purpose modular things with #React and play by switching CSS colors (#Codepen)

# Anyways 

Let's go for a strategy to minimize the threshold.

# [React on CodePen-React Patterns & Templates](https://codepen.io/topic/react/templates) 

Choose a good teaching material.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/11d675a5-d448-4c00-50a7-878f86295c39.png)

# Codepen 

Appropriately made it easy to use.

[A Pen by yumainaura](https://codepen.io/yumainaura/pen/xeJqbV?editors=0110) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/83206d02-63f8-0fa7-87aa-e51a086aeee5.png)

# point 

I'm making a generic module called Box

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/291b5a91-8614-0fa4-2d6a-9b87fa525129.png)

# Calling 3 Box Components from App Component 

changing colorMode

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/fb25bc27-6640-0b30-84a6-76db08999235.png)

# I have defined colorMode in CSS 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/42c77fe5-14f6-f3dc-b8f7-3e53456aa60b.png)

When colorMode = false, it seems that you can do nothing.

(Don't feel like being similar to # ruby's bogus operator)

# js 

```
// This is how a function component takes props.
const Box = props => (
  <div className={`box ${props.colorMode}`}>
    <h1 className="title">{props.title}</h1>
  </div>
);

// This Class component also can have props
class App extends React.Component {

  render() {
    
    return <div>
      <h1 class="subtitle">
        {this.props.header}
      </h1>
      <Box
        colorMode="false"
        title="Light"
      />
      <Box
        colorMode="dark-mode"
        title="Dark"
      />
      <Box
        colorMode="orange-mode"
        title="Orange"
      />
    </div>;
  }
  
}


ReactDOM.render(<App header="Hello, Colors!"/>, document.getElementById("root"));
```

# css 

```
body {
  height: 100vh;
  margin: 0;
  display: grid;
  place-items: center;
  max-width: 250px;
  margin: 0 auto;
}
.box {
  width: 300px;
  &.dark-mode {
    background: black;
    color: #bbb;
    h1 {
      color: white;
    }
    .checkbox:hover {
      color: white;
    }
  }
  &.orange-mode {
    background: orange;
    color: red;
    h1 {
      color: red;
    }
    .checkbox:hover {
      color: red;
    }
  }
}
```

# HTML 

     <div id="root"></div> 



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1379








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【gulp】タスクの簡単読解

Gulpのタスクの書き方は「そういうもんなのね」と覚える。

## タスクの宣言

```js
gulp.task('task-name', () => {
	// 処理
};
```

## ファイルの読み込み
`gulp src('path')`

## 書き出し
`gulp.dest('path')`

## つなげる
gulpの処理は、メソッドを繋げてかく。（メソッドチェーン
このとき `pipe()`という関数で、その後の処理を囲うべし。

## まとめ

```js
gulp.task('copy', () => {
	gulp.src('./src/index.html')
      .pipe(gulp.dest('./www/'));
});
```
このタスクはsrc()で読み込んで、pipe()からのー、dest()で書き出しただけのタスク。
つまり、`src/`→`www/`へコピーするだけのタスク。基本はこのsrcとdestの間に、コンパイルとかの処理が入る。
Edge Tangent Flowを使用してベクトル場の流れを整えてから、画像のエッジを検出する。

# tl;dr
画像にはノイズが多く含まれており、単純なエッジ検出で特徴を抽出しようとしても、特徴が抽出しきれない場合があります。
そこで、「特徴的なエッジを維持し、ノイズが含まれている弱いエッジは近くの強いエッジに影響されて方向を滑らかにする」ことで、より画像の特徴をしっかりと抽出することが可能になります。その手法がEdge Tangent Flow（ETF）です。

こちらの論文で提唱されています。
http://umsl.edu/mathcs/about/People/Faculty/HenryKang/coon.pdf

# 私はETFを何に使用したか。
綺麗な絵をロボットに描かせるためにETFを使用しました。産業用ロボットアームに筆を持たせて書きました。
綺麗な絵を描くには、筆の軌跡が重要です。つまり画像からストローク情報を生成する必要があります。画像の特徴をきちんと捉えたストローク情報を生成するために、ETFを使用しました。

作った作品はこちらです。（チームメンバーと作成しました。）
http://aroboto.strikingly.com/

# ETFを使うと画像がどうなるか。
![lady1のコピー.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175902/116a0422-d575-edca-2f0f-a9149bec14d8.gif)
上のgifは、ETFを何周か適用した時のベクトルの動きをgifにしたのです。画像をクリックしてよく見てみると、矢印が動いていると思います。
女性の右目のまつ毛あたりを見ると、最初別の方向を向いていた矢印が、周りのベクトルの向きに引っ張られて揃っていくのがわかると思います。

# ETFのロジック
ETFのロジックは非常に簡単です。以下の式が全てです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175902/9e7971cc-53c5-b670-d51f-d91d4fc07dac.png)

左辺は、注目画素のベクトル値です。
右辺について、下記1~4で簡単に説明します。
### 1.フィルター内かどうか判定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175902/1a4de1d6-ab1e-dac8-da6f-3e5e5d4bb5cc.png)

### 2.注目画素のベクトルに与える影響度を算出。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175902/5b287c57-fb1c-1ee2-c3ab-fc96289dd6a2.png)

### 3.ベクトルの積を算出。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175902/600ae41f-081c-e4bf-b7c9-e2fe88e6ffc7.png)

### 4.ベクトルの向きを反転させるか判定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175902/924d750e-1515-67b5-fb22-14e37f2f5d3a.png)

これだけです。

# コード
githubで公開しています。
https://github.com/naotokimura/EdgeTangentFlow

# まとめ
ETFの概要と、仕組みを説明しました。
Deep Learningで画像処理やるのも楽しいですが、今回のようにゴリゴリの画像処理も楽しいものでした。
ETFが物体認識の精度に貢献するのか気になります。
Craft CMS で画像をアップロード時にリサイズする

> Image Resizer - Features | Verbb
> https://verbb.io/craft-plugins/image-resizer/features

のプラグインを使えば最大サイズを指定してアップロードすることができそう

切り抜きとかは Craft 3 自体でできるようになったから、まとめてバッチ処理的にやるといったことができるというのは強みっぽい。
JavaScriptでRSSを扱ってみよう！

#RSSをjavaScriptで取得して表示したいんだよね～
なるほど。
まぁAjaxでデータ引っ張って来て
ゴニョゴニョすれば出来るっぽそう…
よし！一丁やってやるか！

ちなみに今回のRSSのフォーマットはrss2.0です。

##AjaxでRSSを取得する。
AjaxでRSSのデータを取得するわけですが、注意点が一つ。

- 他のドメインのRSSは取得出来ない場合がある

ということです。
コレはクロス・オリジン・リソース・シェアリング(CORS)という通信をブラウザが許可しないためです。
CORSの禁止を回避する方法は色々あるので、ググって下さい。
同じドメインのRSSを取得するのは特に問題はありません！

```js
let xhr=new XMLHttpRequest();

xhr.open(`GET`,rss_url);
xhr.responseType=`document`;
xhr.send();

xhr.onload=()=>{
  rss_data=xhr.response;
};
```

こんな感じでxhrを用いてajaxを書いていきます。
RSSのデータは`document型`なので注意！

##RSSのdomを操作する。

まずはRSSのxmlの簡単な構造の説明をします。
RSSはのデータは`<channel>`というタグで囲まれています。
`<channel>`にはRSSの`<title>`タグや`<link>`タグなどのヘッダ的な情報と
`<item>`タグというRSSの項目データが格納されています。

取得したRSSのデータは`document型`なのでdom操作が可能です。
なので

```js
let items=rss_data.getElementsByTagName(`item`);
```

と書けばRSS内のitemタグのdomを取得出来ます。
item内のタイトルや更新日を取得したい場合は更に

```js
let title=items[0].getElementsByTagName(`title`).textContent;
let date=new Date(items[0].getElementsByTagName(`pubDate`).textContent);
```

と書けばそれぞれ取得出来ます。

##RSSのサムネイルを取得してみる。
もしブログ一覧のRSSの場合、表示する際にサムネイルも欲しいですよね？
でもRSSの`<item>`の中にはサムネイルの情報の項目はありません。

では一体どうすれば良いのか、というと
`<item>`内の`<content>`の内容の`<img>`タグを引っ張って来れば良いのです。

でも一つ問題があります。
`<content>`の内容はdomではなくtextです。
これではdom操作が出来ないので、dom操作するためにバッファ的な要素を作って
その要素に`<content>`の内容でdomを構成し、そこから操作して`<img>`タグを探します。

```js
let content_text=items[0].getElementsByTagName(`content`).textContent; //contentの内容を取得
let buffer_dom=document.createElement(`div`); //バッファ的な要素の作成
buffer_dom.innerHTML=content_text; //contentの内容を元にバッファ要素にdomを構築
let thumbnail=buffer_dom.getElementsByTagName(`img`)[0].src; //最初のimgタグのsrcを取得
```

という感じで書くとサムネイル画像のurlが取得出来るので
後はお好きに煮るなり焼くなりしてください。

でもサムネイルで取得した画像は、ただの「コンテンツ内の初めの画像」ってだけなのでサイズがバラバラだと思います。
そこでサイズ感を統一させるために
`<img>`でサムネイルを表現するのではなく
`<div>`の背景画として以下のようにstyleを書いて表現すると見栄えが良いと思います。

```css
.thumbnail_class{
  background:url(サムネイルのurl);
  background-repeat:no-repeat;
  background-position:center center;
  background-size:cover;
}
```

#編集後記
入社16日目
RSSの処理を任されたので色々調べてみました。
まぁ結局はdom操作なので難しいことは無い気がします。
ただRSSのバージョンによってRSSのdomが結構変わるみたいなので
色々対応は大変そうだなと思ったり、思わなかったり。
Rails6 のちょい足しな新機能を試す６（BINDING環境変数編)

# はじめに

Rails 6 に追加されそうな新機能を試す第6段。 今回は `rails server` 実行時の `BINDING` 環境変数についてです。
`HOST`環境変数は、Rails 6.1 でサポートされなくなり、代わりに `BINDING` 環境変数を指定するように警告が出るようになりました。
記載時点では、Rails は 6.0.0.beta3 です。　`gem install rails --prerelease` でインストールできます。

```
$  rails --version
Rails 6.0.0.beta3u``
```

# プロジェクトを作る

新機能を試すために、プロジェクトを作ってみます。

```
$ rails new sandbox_6_0_0b3
$ cd sandbox_6_0_0b3
```

# 試してみる

まずは、何も環境変数を指定していない状態で実行します。

```bash
$ bin/rails s
=> Booting Puma
=> Rails 6.0.0.beta3 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.2-p47), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000 # 環境変数の指定がないときの default は localhost
Use Ctrl-C to stop
```

次に HOST 環境変数を設定してから実行してみます。

```bash
$ env HOST=127.0.0.1 bin/rails s
DEPRECATION WARNING: Using the `HOST` environment to specify the IP is deprecated and will be removed in Rails 6.1. Please use `BINDING` environment instead. (called from <top (required)> at /app/sandbox_t/bin/rails:9)
=> Booting Puma
=> Rails 6.0.0.beta3 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.2-p47), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop
```

`DEPRECATION WARNING` が表示されました。

今度は、 `BINDING` 環境変数を指定してみます。

```bash
$ env BINDING=127.0.0.1 bin/rails s
=> Booting Puma
=> Rails 6.0.0.beta3 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.2-p47), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop
```

`DEPRECATION WARNING` なしで実行できました。

# 参考情報

* [What is new in Rails 6.0](https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html)
* [Deprecate support for using `HOST` environment to specify server IP](https://github.com/rails/rails/pull/32540)
プログラミング学習記録65〜インターネット技術〜

##今日やったこと
- インターネット技術について学ぶ

今日も昨日の続きで、インターネット技術について学びました。
メールやHTTPS通信などについてです。

最初にインターネットに触れた時には、すでにメールで画像も動画も送れていたので、メールで文字しか送れなかった時代があったことは知りませんでした。

そして、メールが相手に届くことが当たり前だというのも実はめっちゃすごいことだということを改めて知りました。

私たちがメールの送信・受信で実際にやっているのは、「メールを書いて送信ボタンを押す」「メールボックスを開いて未読メールを見る」などの部分しかやっていません。

しかし、メールが送られて届くまでには様々な過程があります。

そして、今では当たり前に端末に備わっているメールのソフトウェアだったり、メールを中継してくれるサーバが必要不可欠です。

紙の郵便物でも郵便ポストにハガキを入れたら終わり、ではなく、ポスト→郵便局→宛先のポスト→人という過程を経て郵便物が届きます。

メールではそれがファイルシステムだったり、サーバだったりするだけで、やっていることは紙の郵便物と似ているんだなと思いました。

当たり前に使っているものの便利さを改めて認識できてよかったです。

おわり
AWS CLIの使い方

AWSをCLIで使う機会があったのでそれをまとめます。

##pythonで使う場合
pythonで使う場合はboto3というライブラリをインストールします。

```python:
pip install boto3
```

あとは以下同様にすれば使えます

## IAM roleを設定する
AWSコンソールで、IAM roleを作成しましょう。与えるアクセス権は適当に決めてください。
作成したら、その時しか見れないAWS_SECRET_ACCESS_KEYが出るのでどこかに目盛りましょう。無くしたら再度ROLEを作り直せばいいです。

参考：
AWS では、アクセスキーのシークレットアクセスキーの部分を表示およびダウンロードする機会が 1 回限り与えられます。これをダウンロードしない場合や紛失した場合は、アクセスキーを削除して新しいアクセスキーを作成できます。
(https://docs.aws.amazon.com/ja_jp/general/latest/gr/managing-aws-access-keys.html)

## AWSCLI
次にAWSCLIのインストール
自分がやったときは仮想環境だったので
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-virtualenv.html
に従いました。—userを入れないだけが違い

あとは適当に
~/.aws/credentials
~/.aws/config
に必要な認証情報を書き込めばOKです。

```
aws configure
AWS Access Key ID: xxxxxxxxxxxxxxxxx
AWS Secret Access Key: xxxxxxxxxxxxxxxxx
Default region name: xxxxxxxx
Default output format: xxxx
```

## S3を使ってみる
python環境で、S3のデータを操作してみました。

```
import boto3
s3=boto3.resource('s3')
bucket = s3.Bucket('バケット名')
```
としたり

```
from boto3 import Session
s3client = Session().client('s3')

response = s3client.list_objects(
    Bucket = 'バケット名'
)
```
とするといけます。適当に調べて使いましょう。

## boto3 の罠
同じアカウントで、複数のプロジェクトを管理したりする場合など、IAMロールに限られたアクセス権しかないときがあります。例えば
s3://-projectA
    |-projectB
として、一つのIMAロールがprojectAにしかアクセスできないようにしているとしましょう。
このとき、

```
import boto3

s3 = boto3.resource('s3')

for bucket in s3.buckets.all():
    print(bucket.name)
```
としてしまうと罠にハマります。このコマンドはアカウント内の全てのバケットを探しに行きます。なので一つでもアクセスできないものがあると、`access denied` になってしまうのです。更にタチが悪いのが、AWSCLIからは普通にアクセスできる（バケットリスト一覧を表示する機能はないはずですので、s3://projectAとアクセスするはずです）のです。
気をつけましょう。

## AWS sagemakerを使う





###その他
source set_kvs_sdk_env.sh
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=

AWS ロールを作った
https://dev.classmethod.jp/cloud/aws/rekognition-video-analyze-kinesis-video-stream/
これを参考

ロールARNは
【Python】現場で使えるデータ分析手法について

Pythonを現場で使う際のデータ分析で、
よく使う（使える）関数を知りたいです。

本来とは違う質問ですみません。。


現在、Pythonのデータ分析を動画教材で学んでいる初心者です。

最近、学んでいく中で
「自分は、ビジネスの現場でPythonを役立てられるようになるのか？」
という疑問が拭えず、不安になってきています。


データ分析がダメでも、
スクレイピングで集計業務を自動化したりは可能なので
スクレイピングは役に立つと思います。

ただ、データ分析となると・・・汗


よく使う、使える関数に関しては
定性分析・定量分析どちらもお聞きしたいです。

書くのが面倒な場合は、参考リンクでももちろんOKです！
ほかのRubyやPHPなどこれはPythonよりも簡単に使えるよという話もOKです！

厚かましいですが、まだ現場の経験がありませんので
いろんな方のご意見をお聞かせ頂けましたら幸いです。

なんとかPythonなどを役立てたいと真剣に考えていますので、
どうか宜しくお願い致します。。
#React で 簡単な汎用モジュール的な何かを定義して CSS の色を切り替えて遊ぶ ( #Codepen )

# とにかく

敷居を最小化する戦略でいこうぜ。

# [React on CodePen - React Patterns & Templates](https://codepen.io/topic/react/templates)

良さげな教材を選ぶ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/11d675a5-d448-4c00-50a7-878f86295c39.png)

# Codepen

適当に自分が使いやすくしたもの。

[A Pen by yumainaura](https://codepen.io/yumainaura/pen/xeJqbV?editors=0110)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/83206d02-63f8-0fa7-87aa-e51a086aeee5.png)


# ポイント

Boxという汎用モジュールを作っている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/291b5a91-8614-0fa4-2d6a-9b87fa525129.png)

# App Component から Box Component を3個呼び出している

colorMode を変えている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/fb25bc27-6640-0b30-84a6-76db08999235.png)

# CSS に colorMode を定義している

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/42c77fe5-14f6-f3dc-b8f7-3e53456aa60b.png)

colorMode = false の時は何も使われない、という動作ができるっぽい。

( #ruby のぼっち演算子にも似てる気がするな )


# js

```js
// This is how a function component takes props.
const Box = props => (
  <div className={`box ${props.colorMode}`}>
    <h1 className="title">{props.title}</h1>
  </div>
);

// This Class component also can have props
class App extends React.Component {

  render() {
    
    return <div>
      <h1 class="subtitle">
        {this.props.header}
      </h1>
      <Box
        colorMode="false"
        title="Light"
      />
      <Box
        colorMode="dark-mode"
        title="Dark"
      />
      <Box
        colorMode="orange-mode"
        title="Orange"
      />
    </div>;
  }
  
}


ReactDOM.render(<App header="Hello, Colors!"/>, document.getElementById("root"));
```

# css

```css
body {
  height: 100vh;
  margin: 0;
  display: grid;
  place-items: center;
  max-width: 250px;
  margin: 0 auto;
}
.box {
  width: 300px;
  &.dark-mode {
    background: black;
    color: #bbb;
    h1 {
      color: white;
    }
    .checkbox:hover {
      color: white;
    }
  }
  &.orange-mode {
    background: orange;
    color: red;
    h1 {
      color: red;
    }
    .checkbox:hover {
      color: red;
    }
  }
}
```
# HTML


```
<div id="root"></div>

```








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
複数ファイルの先頭行（ヘッダ）を除いた行数をパッと出すシェルのコマンド

# コマンド
```
$ tail -q -n +2 *.csv|wc -l
```

## 説明
`tail`と`wc`コマンドを使う。
`-q`オプションでファイル名などを表示せずに出力する（ゴミになる行が消せる）。
`-n +2`オプションで先頭のn-1行（この場合2-1=1行目）のみ除いて出力する。
オプションは纏めて`-qn +2`とかでもOK。
`*.csv`の箇所でファイル名を適当に指定する。
`|`で出力を`wc`コマンドへ流す。
`wc`は文字数をカウントするコマンドで、`-l`オプションをつけると改行をカウントする。

稀によく使うので備忘録。
複数のcsvファイルからデータ登録した後、件数の一致確認とかに使う（使った）。
環境によっては`tail`の挙動が違う可能性もある？ので行数だけ見ないように注意したい。

## 参考
[tail コマンド](https://hydrocul.github.io/wiki/commands/tail.html)
[tailコマンドについて詳しくまとめました 【Linuxコマンド集】](https://eng-entrance.com/linux-command-tail)
[【 wc 】コマンド――テキストファイルの文字数や行数を数える](https://www.atmarkit.co.jp/ait/articles/1611/07/news026.html)
Rails engineers try #React tutorial #Codepen for complaining

# Tutorial 

[Tutorial: Introducing React-React](https://ja.reactjs.org/tutorial/tutorial.html#setup-for-the-tutorial)

# Codepen is provided 

Other things are good for the time being!

![image](https://user-images.githubusercontent.com/13635059/56489823-faeffe80-651d-11e9-891c-afb07f1d3edf.png)

[Tic Tac Toe](https://codepen.io/gaearon/pen/oWWQNa?editors=0010)

# What! 

Well, first of all there is something that can be moved.

![image](https://user-images.githubusercontent.com/13635059/56489862-2b379d00-651e-11e9-9dfd-df5c8c0ef273.png)

# How to use life with Konponen 

Well, I don't know the meaning of such a subject.

> Here, ShoppingList is a class of React component or React component. The component receives a parameter called props (short for



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1376








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
#docker + A simple profile configuration to run #python script of host with alias configuration of #shell (#zsh example)

# ./version-check.py 

     import sys print(sys.version_info) 

# profile 

.zsh .bashrc etc

     function docker-python() { cat "$1" | docker run -i python } 

# EXE 

     $ docker-python ./version-check.py sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0) 



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1377








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->