OmniAICreator/Qiita-1.07M huggingface dataset:
プログラムはなぜ動くのか　第一章まとめ

## まえがき
この記事は「プログラムはなぜ動くのか」の本を読み、各章ごとにまとめとして、投稿しています。
さらっとまとめてあるので、本の内容を復習したい方なんかにはいいかなと思います。


## なぜ「プログラムはなぜ動くのか」を読もうと思ったのか？
まつもとゆきひろ氏の２０代へ向けた若手エンジニアの勉強法の講演内容をまとめた記事が人気を博しており、私もいくつかの投稿を一読しました。
そのなかで優秀なプログラマーはCS（コンピューターサイエンス）に精通しているとあり、技術力の高い著名人もみな似たようなことを言っているのを思い出しました。そのため、文系出身であり、コンピュータに関する知識があまりないため、CSを学習していこうと思いました。
そのための触りとして、各ブログ記事やQiltaの投稿等でおすすめされていたこの本を読み、まとめとして、こちらにアウトプットしておこうと思いました。

## 第一章　「プログラマにとってCPUとはなにか」まとめ
第１章である内容をまとめていきます。ちなみにCPUに関する内容が中心です。

### CPUの構成要素
CPUの内部は主にE以下４つの要素から構成される。
- レジスタ
- 制御装置
- 演算装置
- クロック

レジスタ→処理対象となる命令やデータを格納する領域で、１種のメモリーのようなもの。
制御装置→メモリー上の命令やデータをレジスタに読み出し、命令の実行結果に応じてコンピューター全体を制御する。
演算装置→メモリーからレジスタに読み出されたデータを演算する
クロック→CPUが動作するタイミングとなるクロック信号を発生させる

CPUは**レジスタの集合体**である。プログラミングをする上で、他３つのCPUの構成要素(制御装置、演算装置、クロック)はさほど
重要でなく、レジスタを意識すべき。なぜなら、**プログラムはレジスタを対象として、記述されるものだから。**


### メモリとは？
一般的にメモリと呼ばれているのはメイン・メモリと呼ばれているもの。
１バイト(８ビット)ずつに**アドレス**と呼ばれる番号がついていて、**CPUはアドレスを指定して、データの読み書きを行う**。

### CPU(マシン語)が行っている命令
- データ転送命令
- 演算命令
- ジャンプ命令
- コール/リターン命令

データ転送命令→レジスタとメモリ、メモリとメモリ、レジスタ周辺装置の間でデータの読み書きをする
演算命令→アキュムレータで算術演算、論理演算、比較演算、シフト演算を行う
ジャンプ命令→条件分岐、繰り返し、無条件のジャンプを行う
コール/リターン命令　関数を呼び出す、呼び出し元に戻る

### 主なレジスタの種類とその役割
- アキュムレータ
- フラグ・レジスタ
- プログラム・カウンタ
- ベース・レジスタ
- インデックス・レジスタ
- 汎用レジスタ
- 命令レジスタ
- スタック・レジスタ

データには①演算に使われる値と②メモリーのアドレスを表す値の２種類が存在する。
演算に使う値は「アキュムレータ」に保存し、アドレスを表す値は「ベース・レジスタ」や「インデックス・レジスタ」に格納する。

#### プログラム・カウンタとは？
プログラムの流れを制御する。

#### フラグレジスタとは？
直前に実行した演算の結果として、値が負、ゼロ、正のいずれになったかを記憶する。

#### ベース・レジスタ、インデックス・レジスタとは？
これらのレジスタをペアで使うことにより、メインメモリ上の特定のメモリ領域を区切って配列のように使うことができる。

## まとめ
ざっくりになってしまい(アセンブラのくだりはまとめてません…)ましたが、後々編集して充実させていきたいと思います。
Rails6 のちょい足しな新機能を試す２（select タグ編)

# はじめに

Rails 6 に追加されそうな新機能を試す第2段。 `select` タグの `prompt` を指定するときのちょい足し機能です。
記載時点では、Rails は 6.0.0.beta3 です。　`gem install rails --prerelease` でインストールできます。

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

# 単純なCRUD機能をscaffold で作る

新機能を試すために、scaffold で単純なCRUD機能を作ってみます。

```
$ rails new sandbox_6_0_0b3
$ cd sandbox_6_0_0b3
$ rails g scaffold User name
```

# 従来の機能

これまでは、 `prompt` を設定した  required な `select` の prompt を disabled にすることができませんでした。

```erb:app/views/users/_form.html.erb
<%= form_with(model: user, local: true) do |form| %>
  ...
   <div class="field">
    <%= form.label :favorite_language %>
    <%= form.select :favorite_language, ["Ruby", "Python", "JavaScript"], { prompt: "Choose Favorite Language" }, {required: true} %>
  </div>
  ...
```

prompt で選択した文字列を選ぶことができてしまいます。
![select_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209941/99669bc6-9426-3e3f-e826-0b6ee1ea25b9.png)

# 新機能

Rails 6 では、prompt を disabled にすることができます。

```erb:app/views/users/_form.html.erb
<%= form_with(model: user, local: true) do |form| %>
  ...
  <div class="field">
    <%= form.label :favorite_language %>
    <%= form.select :favorite_language, ["Ruby", "Python", "JavaScript"], { selected: "", disabled: "", prompt: "Choose Favorite Language" }, {required: true}%>
  </div>
  ...
```

prompt で選択した文字列を選ぶことができません。
![select_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209941/df8917ec-fdc5-9a4c-e805-0ac7abb759ca.png)

# 参考情報

* [What is new in Rails 6.0](https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html)
* [Let select render default selected option for required field](https://github.com/rails/rails/pull/32087)

# その他
あくまで、Viewの機能として試しているだけなので、 model に　favorite_language の属性がないというツッコミは勘弁願います。
Docker の TIPS

自分の環境でハマった問題の解決方法等を備忘録として追記していく予定です。

##### 動作確認環境
* Ubuntu 16.04.6 LTS / x86_64
* Docker version 18.09.4, build d14af54

# Dockerコマンドをsudoなしで実行する方法
```shell
# (もし無ければ)dockerグループを作る
$ sudo groupadd docker

# ユーザをdockerグループに追加
$ sudo usermod -aG docker $USER

# ログアウトして再ログインすると反映される。
$ exit
```
# DNS サーバを指定する方法
## コンテナ単位で指定する場合
"docker run" コマンドの実行時に"--dns"オプションで指定します。
ここで指定された値がコンテナ内の"/etc/resolv.conf"に反映されます。

```shell
# 例
$ docker run --dns=192.168.XXX.YYY ${コンテナイメージ}
```
```:/etc/resolv.conf
nameserver 192.168.XXX.YYY
```

## コンテナ起動時のデフォルトとして設定する場合
ホストマシン上で"/etc/docker/daemon.json"を作成(または追記)します。

```:/etc/docker/daemon.json(ホストマシン)
{
  "dns": ["192.168.XXX.YYY", "8.8.8.8", "8.8.8.4"]
}
```

"--dns"オプションを指定した場合と同じようにコンテナ内の"/etc/resolv.conf"に反映されます。

```:/etc/resolv.conf(コンテナ)
nameserver 192.168.XXX.YYY
nameserver 8.8.8.8
nameserver 8.8.8.4
```
DockerでRailsの開発環境を作成してみた

## はじめに
仕事でDockerを使用することが多いのだが正直よく理解出来ていない。手順書のコードをコピペするだけ状態なので、勉強も兼ねてRuby on Railsの開発環境を作成してみました。その時の手順を記載していきます。

参考：
[Quickstart: Compose and Rails](https://docs.docker.com/compose/rails/)

## 作業環境
- OS: macOS Mojave 10.14.4
- Docker: 18.09.2

## 手順
### ルートディレクトリを作成する

```
$ mkdir app
```

### MySQLのデータをマウントするディレクトリを作成する
```
$ mkdir -p db/mysql
```

### 作成したルートディレクトリに移動する

```
$ cd app
```

### Dockerfileを作成する

```Docker:Dockerfile
FROM ruby:2.6.2-stretch
RUN apt-get update && apt-get install -y nodejs mysql-client
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
```

### Gemfileを作成する

```Gemfile:Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
```

### 空のGemfile.lockを作成する
```
touch Gemfile.lock
```

### docker-compose.ymlを作成する

```yml:docker-compose.yml
version: '3'
services:
  mysql:
    image: mysql:8.0.15
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - "./db/mysql:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root
  app:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - ".:/app"
    ports:
      - "3000:3000"  
    tty: true
    depends_on:
      - mysql
```

### Railsのプロジェクトを作成する
```
docker-compose run app rails new . --force --database=mysql
```

### ビルドを実行

```
docker-compose build
```

### `config/database.yml`を修正する

```yml:database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  host: mysql
```

### コンテナを起動する

```
docker-compose up
```

### データベースを作成する

```
docker-compose run app rake db:create
```

### http://localhost:3000 にアクセスする

下記のような画面が表示されれば完了です。
![スクリーンショット 2019-04-14 16.38.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398092/ed9b11f3-a374-9016-3adc-f764fc09a4fb.png)
Ruby On Railsよく使うコマンドメモ

# はじめに

自分用のメモとしてよく使うコマンドを挙げていきます。
他にも便利なコマンド等あれば教えてください。

---

# コマンド集

## アプリ作成
アプリの基本構造を自動生成してくれる。

```
rails new アプリ名
```

## DB作成
アプリ用のDBを作成する。デフォルトではsqliteでDBが作成される。
DB情報は `アプリ/config/database.yml` の情報が参照される。

```
raild db:create
```

## サーバ起動
サーバを起動する。3000番のポートで実行される。
フロントプロセスで起動されるので、停止したい場合はCTRL-Cを入力する。

```
rails server
```

## DBテーブルの追加
テーブル、コントローラ、モデルクラスなどなどの自動生成。
自動で一覧画面、追加画面、編集画面が作成される。
カラムのデータ型はカラム名から推測して設定される？？？

```
rails generate scaffold テーブル名 カラム1 カラム2 …
```

---

# おわりに

まだまだ勉強中なので、コマンドは順次追加していきます。
Railsは形のシンプルなページは一瞬で作成できちゃいますね。
もう少し複雑なものを作成しようとすると大変になってくるのでしょうか？
アプリの設計をRailsに合わせてシンプルにできれば、それがベストなんだろうなあ。
WordPressでGoogle reCaptchaと強制HTTPSを有効にする

私はWordpressインストール後にこれをやる。

## 前提条件

少し高機能なレンタルサーバーなどを使えば、簡単な設定で以下の状態にできるかと思います。

* WordPressがインストール済み、管理画面にログインできる
* HTTPSでWordPressにアクセスできる

## Google reCaptchaを使う

こちらのプラグインをインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/f5942e25-9207-7ee5-59d6-7e4c5df4ad8f.png)

有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/52b6e39c-3bd7-b0b9-e45a-7a8df4e9529a.png)

入りました！ Settingsから設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/fc49dfe8-c8ab-6b49-3f7d-10aa06c3aed4.png)

Authenticationが空の状態になっています。この情報を入手し、設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/1f1d1f4d-35e1-acf9-eec3-88aaaf66dcd5.png)


https://www.google.com/recaptcha/

こんな感じで、情報を入力します。個人的にはラベルとドメインには同じ値を入力していますが、ドメイン名から何のサイトか推測が付きにくい場合などは、わかりやすいラベルを設定するとよさそうです。

今回はv2の「I'm not a robot」チェックボックスを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/a637b6ce-97a1-5ef5-59f7-c80ef4524160.png)


Site KeyとSecret Keyが生成されるので、それをコピーして、先ほどのGoogle Captcha Settingsに貼り付けます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/8483c07c-2289-47fd-c739-8175634ef830.png)

Save Changesを押して、忘れずに保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/5fce1a48-456e-b9da-df85-0ab6746403da.png)

右上からログアウトします。 https（httpではなく）でアクセスしていることを再度確認し、reCaptchaのチェックボックスをクリックしていない場合はログインに失敗することを確認します。チェックボックスをクリックして、ログインに成功することを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/53504029-38e1-bb4c-be07-b0ec16a9a54c.png)

## 強制HTTPSを有効にする

もしhttpでアクセスできている場合、httpsのURLを叩いてWordPressの操作に問題がないことを確認します。その後HTTPのURLをHTTPSへ転送するように設定します。

Easy HTTPS Redirectionプラグインをインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/4c61587e-3737-7471-eb29-2f3a84dd43de.png)

有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/ed81ec05-577d-d06a-b262-8c8b988d3467.png)

Settingsから設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/d71a2da5-8900-6709-abbd-21419f68d403.png)

注意書きが出ているように、副作用が出る可能性に注意して下さい。新規に立ち上げるWordPressの場合はこの設定で初めてほぼ問題ないかと思われます。（もし英語で出る場合はそのまま読むか、Google翻訳などで…）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37334/62148341-9bf7-9437-49e5-b28ef479416a.png)

設定を保存すれば、HTTPがHTTPSへリダイレクトされるようになります。

`http://〜` のURLにアクセスし、`https://〜` に飛ばされたら完了です！
【Glideスゴイ】スプレッドシート1カラムのみで掲示板PWAアプリつくってみた

Glideを知ってますか？
GoogleスプレッドシートからPWAアプリを爆速で作れるサービスです。

Glideリンク https://app.heyglide.com

そこで、どれだけ簡単なのかを啓蒙すべく一番簡単な作成方法を紹介します。


## 作ったアプリ： 掲示板アプリ
<https://board.glideapp.io/>
![app_boad.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18377/606f5ffb-9e0e-e01b-84cb-f48e92c1426b.jpeg)


スレッド形式のシンプルな掲示板です。
＋でスレッドを自由に追加する事ができます。
コメント時にemail入力を求められますが、テストアプリとして作ったので、適当で大丈夫です。

## 作り方

### 1. Googleスプレッドシート
threadカラムを一つ作って、スレを適当にいれて置きます。
用意するデータはこれだけです。

![sheet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18377/8147f7f1-dd00-e188-c990-6d811ffe4247.jpeg)


### 2. 「+ New App」でアプリ新規作成

ボタンを押すとアプリにスレッド一覧画面ができてます。
ここではLayoutはListを選択してAdd itemをONにします。

![boad.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18377/d7a59770-2c47-50ea-5da5-49ebe3934006.jpeg)

Glideについてをクリックすると詳細ページ作成ができます。
ここでは「＋」でCommentsを追加します。これだけです。
![add_comment.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18377/410909fa-99eb-0d2f-78ee-d6b8b385be50.jpeg)

### 3. 「Settings」
アイコンとURL、説明、公開設定を決めます。

![b_setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18377/38995a86-9513-a2cc-0d2d-a9fe0f00c054.jpeg)


### 4. 「Open app」を押すと公開

公開用ページが表示されます。
このページのURLを教えたり、Twitterでシェアします。
QRコードをスマホで読み取る事でもアプリが起動できます。

![keijiban.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18377/e199209e-c478-b039-c736-6740a06d8910.jpeg)

### 5. アプリ完成！
　
これでアプリは完成です。
拍子抜けするくらい簡単ですね。

アプリの基本構造は「一覧リスト」→「詳細ページ」の構造です。

一覧リストは、リスト表示のほか、タイル形式、ギャラリー形式などを選択できます。

詳細ページの設置できるアイテムは、button、 e-mail、 リンク、マークダウン、ノート、電話番号、セパレーター、シンプルバリュー、スイッチボタン、コメント、オーディオプレーヤー、イメージマップ、 summary、 ビデオリンクということで豊富です。

今回は掲示板ということでシンプルを目指しましたが、
アイテムが豊富なので、アイデア次第で良さげなツール系アプリを作れそうですね。

以上、Glideスゴイよという話でした。

自分はGlideでラーメンマップを作ったりしました。
その時やった事などをブログにまとめたのでこちらも参考にしてみてください。
https://cloudlance-motio.work/post/glide-good/
アクセスをホームディレクトリのみに制限したsftpユーザーの設定

Linuxサーバー（確認した環境はCentOS 7)で特定のユーザーに対してsftp（ファイル転送）で自分のホームディレクトにあるpublic_htmlへのファイル転送のみを許可したい（sshでの接続を禁止）場合の設定方法です。

# sftp 専用ユーザー用のグループを作る

グループを作成し、sftpのみを許可したいユーザーはこのグループに追加する。このではsftponlyというグループを作成する。

```
groupadd sftponly
```

# ユーザーのホームディレクトリのアクセス権限を変更する。

ユーザーのホームディレクトリの所有者をrootに変更する。chrootのためこれをしないとWinSCPだと以下のようなエラーでる。

![20190414sftperror.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160914/9781bfaa-b5c9-483b-0116-4856c0fb41b8.png)


このままだとユーザーがファイルのアップロードができないのでpublic_htmlディレクトリを作成し、このディレクトリにはユーザーを所有者とする。ここではuser01に対して操作をする。

```
chmod 755 /home/user01/
chown root:root /home/user01/

mkdir /home/user01/public_html/
chmod 755 /home/user01/public_html/
chown user01:user01 /home/user01/public_html/
```


# ユーザーアカウントのsftp 専用グループへの追加

sftpのみを許可したいユーザーをグループに追加する。ここではuser01をsftponlyグループに追加する。

```
usermod -aG sftponly user01
```
以下のコマンドを実施してユーザーがグループに追加されたことを確認する。

```
groups user01
```
`user01 : user01 sftponly ` という風にsftponlyグループに追加されていることを確認する。

# sshdの設定変更

OpenSSLのサーバーコンフィグを変更してsftponlyグループのユーザーにsftpで自分のホームディレクトリへのアクセスのみを許可するようにする。

```bash:/etc/ssh/sshd_config
# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server  #コメントアウト
Subsystem       sftp    internal-sftp     # 追加する。

# コンフィグファイルの末尾に追加する。sftponlyグループにのみ適用する。
Match Group sftponly
    ChrootDirectory /home/%u  # ホームディレクトリのみアクセス可能
    ForceCommand internal-sftp  # sshでの接続を禁止する
    PasswordAuthentication yes  # パスワードを認証を行う場合に追加
```

# 参考サイト

[chrootされたsftp専用ユーザを作るメモ](https://qiita.com/kawaz/items/53d1c837dd762337eb3b)
[Linuxでユーザーをグループに追加する](https://qiita.com/orangain/items/056db6ffc16d765a8187)
[SFTPでディレクトリ制限ありなユーザを作成する](https://tech.basicinc.jp/articles/68)
[Linux 新規グループの作成 - groupadd](https://kazmax.zpp.jp/linux_beginner/groupadd.html)
忘備録：二値化処理を行う理由


アナログ（連続データ）
↓
標本化　（アナログデータから、光のデータを取得し、電圧値として表示すること）
↓
量子化（ある電圧値の範囲によって、別の値として変換すること。電圧値という連続的な値から離散的な値（画素・ピクセル）に変換する。）
↓
二値化（ある画素で、表示方法を白または黒で区切る）


カラーの画像データは、情報量が多く、画像処理を行うことが難しい。二値化処理によってデータを軽くすることで、画像処理を行いやすくすることができる。

参考ウエブサイト

https://it-mint.com/2018/10/13/handbook-of-image-analysis-for-image-processing-algorithms-1581.html
今年の言語はRust その１３


# 今年の言語はRust その１３

Rustを学びます


Rustの日本語ドキュメント 2nd Edition
https://doc.rust-jp.rs/book/second-edition/

オリジナル(英語)
https://doc.rust-lang.org/book/



## 7. モジュール

### 7.2 pubで公開制御


前回のあとにsrc/main.rsを追加
今以下の構成になっている。

```rust
.
├── Cargo.lock
├── Cargo.toml
├── src
│   ├── client.rs
│   ├── lib.rs
│   ├── main.rs
│   └── network
│       ├── mod.rs
│       └── server.rs
```

やっと、自作のモジュールを動かしてみよう

```rust
extern crate communicator;

fn main(){
    communicator::client::connect();
}
```

なんとなく、communicatorをスコープに導入しているのがわかる。

しかしビルドするとエラー. どうも

```rust

$ cargo build

error[E0603]: module `client` is private
 --> src/main.rs:4:19
  |
4 |     communicator::client::connect();
  |                   ^^^^^^

error: aborting due to previous error

```

つまり、「公開するには」 pubをつければよい

それだけ

```rust

pub mod your_module;

pub fn your_method(){

}

```

## プライバシーの例

キーワード

- ルートモジュール
- サブモジュール


```rust

mod outermost{
    
    pub fn middle_function(){}
    
    fn middle_secret_function(){}
    
    mod inside {
        pub fn inner_function(){}
        
        fn secret_function(){}
    }
}

fn try_me(){
    outermost::middle_function();
    outermost::middle_secret_function();
    outermost::inside::inner_function();
    outermost::inside::secret_function();
}

== 
error[E0603]: function `middle_secret_function` is private
  --> src/lib.rs:17:16
   |
17 |     outermost::middle_secret_function();
   |                ^^^^^^^^^^^^^^^^^^^^^^

error[E0603]: module `inside` is private
  --> src/lib.rs:18:16
   |
18 |     outermost::inside::inner_function();
   |                ^^^^^^

error[E0603]: module `inside` is private
  --> src/lib.rs:19:16
   |
19 |     outermost::inside::secret_function();
   |                ^^^^^^

```




次回！


イエス！
Mezzanineお試し

Web日誌をクラウドでやったら安上がりなんじゃないの？と思い立ち、使い慣れているWordPressに近いインターフェースのMezzanineに白羽の矢が立ちました。

# Mezzanineインストール

Pythonとpipが入っている前提。

```
pip install mezzanine
```

依存関係も含めて全部解決してくれます。
Djangoもちゃんと入ってくれました。

# Project作成

```
mezzanine-project myproject
```

`myproject` というディレクトリができていればOK。
以降の作業はここで実施。

```
cd myproject
```

# とりあえず動かす

## DB初期化

設定ファイルを何も触っていないので、デフォルトのSQLiteで動作します。流石に本番環境でSQLiteってわけにはいきませんが。

```
python manage.py createdb
```

デフォルトアカウントやらデモサイト作成要否やら、いろいろ聞かれるので入力します。基本的にデフォルトで問題ないです。

## 動かしてみる

以下のコマンドでサーバーを起動します。

```
python manage.py runserver
```

```
              .....
          _d^^^^^^^^^b_
       .d''           ``b.
     .p'                `q.
    .d'                   `b.
   .d'                     `b.   * Mezzanine 4.3.1
   ::                       ::   * Django 1.11.20
  ::    M E Z Z A N I N E    ::  * Python 3.7.2
   ::                       ::   * SQLite 3.21.0
   `p.                     .q'   * Windows 10
    `p.                   .q'
     `b.                 .d'
       `q..          ..p'
          ^q........p^
              ''''

Performing system checks...

System check identified no issues (0 silenced).
April 14, 2019 - 15:56:16
Django version 1.11.20, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
```

問題なく起動できたようなので、ブラウザでアクセスしてみましょう。
http://127.0.0.1:8000/

## なにか出てきた（語彙力が迷子）

![2019-04-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147207/207b8ff2-bec1-dfe1-321c-597fc94404b7.png)

10分もかからずにそれっぽいものができてしまった。早すぎて理解が追い付かん……

これからカスタマイズするわけですが、とりあえずプロジェクトごとGitHubに放り込んでおいたらいいですかね？　付属の .gitignore がそれ用の設定になっている模様。
Reactでgh-pagesにデプロイしたとき、直接URLを踏むと404が返る問題への対応

AppStoreなどに登録するプライバシーポリシーのページが欲しくて、Gh-pagesにポートフォリオを作ったのだが、肝心のプライバシーポリシーのURLに直接リンクを貼ると404になってしまい困っていた。その解決方法の日本語の情報がなかったのでここにメモをしておく。

## 環境

```
  "dependencies": {
    "@material-ui/core": "^3.1.1",
    "@material-ui/icons": "^3.0.1",
    "react": "^16.5.2",
    "react-dom": "^16.5.2",
    "react-router-dom": "^4.3.1",
    "react-scripts": "1.1.5"
  },
  "devDependencies": {
    "gh-pages": "^2.0.0"
  }
```
create-react-app で作り、gh-pages でデプロイをしている。ルーティングは下記のように、react-router-domで書いていた。

``` App.js
render() {
    const { isJapanese } = this.state
    return (
      <React.Fragment>
        <CssBaseline />
          <Router>
            <MuiThemeProvider theme={theme}>
              <MenuBar switchLang={this.switchLang} />
              <Switch>
                <Route
                  path='/'
                  exact
                  render={() => <Portfolio isJapanese={isJapanese} />}
                />
                <Route
                  path='/praivacy_policy'
                  render={() => <PrivacyPolicy isJapanese={isJapanese} />}
                />
                <Route component={NoMatch} />

              </Switch>
            </MuiThemeProvider>
         </Router>
      </React.Fragment>
    );
  }
```

## 発生していた課題
- => トップページ => プライバシーポリシー ... OK
- => プライバシーポリシー ... 404

このように直接プライバシーポリシーのリンクを踏むと404が返ってしまう。

## 解決方法

[getting 404 for links with create-react-app deployed to github pages](https://stackoverflow.com/questions/46056414/getting-404-for-links-with-create-react-app-deployed-to-github-pages)

stackoverflowに書いてあった。簡単に解説をすると、

- 直接新しいURLのリクエストを Github pages に送っても、その時点ではreact-routerが動いてくれず、ローディングが完了していないので、404が返る
- Github pages では、サーバーのコントロールを持っていないので、対策を考えないとね。
- `browserHistory`から`hashHistory`に切り替えるか、すべてのリクエストで`index.html`にredirectするか、やると良いよ。

ということだった。僕はURLの変更はしたくなかったので、`index.html`にredirectする方にした。ありがたいことに回答者がScriptも用意してくれていて、それ通りにすることで解決できた。
[rafrex/spa-github-pages](https://github.com/rafgraph/spa-github-pages)
youtubeでアーカイブされた生放送のコメントを力技で記録する

# tl;dr
* アーカイブされた生放送のコメントはapi経由では取得できない
* 画面には表示されているので、動画再生しながら一定時間ごとにスクレイピングすれば一応保存できる

# コード(2019/04/13現在のUIの場合)

```javascript
setInterval(() => {
	chat_list = document.getElementsByTagName("yt-live-chat-text-message-renderer")
	for(var i = 0; i < chat_list.length; i++){
		node = chat_list[i].children[1]
		timestamp = node.children[0].textContent
		name = node.children[1].children[0].textContent
		content = node.children[2].textContent
		console.log(timestamp + "\t" + name + "\t" + content)
	}
}, 60*1000);
```

# 使い方
1. コメント取得したい生放送アーカイブのページに行く
2. デベロッパーコンソールを開いて、javascript contextsをchatframeに変える
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176335/827312d4-8eb2-f022-0f28-c3904f4dfba2.png)

3. 動画を再生する
4. 上記のコードをコンソールで実行して、しばらく待っていると時間・コメ主・コメントが1分おきにコンソールに流れ始める
5. 動画が終わるまで待機
6. 最後のコメントがコンソールに出力されたのを確認したら、コンソールで右クリック->save as..でコンソールの中身を保存
7. 同じコメントを重複している場合があるので、重複を削除する
8. おわり。あとは適当に利用してください
PythonのCSV読み書きで９桁和暦を７桁和暦に変換出力

#概要
- ９桁の和暦　すなわち「H30.12.24」、「H30/12/24」な形式の日付を、７桁の和暦　すなわち　「4301224」　のような形式の日付に変換します。
- かつ、CSVで読み書きします。
- Python 3.7.2

##したいこと
【infile.csv】　　　　【outfile.csv】
「M 1. 1.15」　ーー＞　「M 1. 1.15」「1010115」
「T 1. 1.15」　ーー＞　「T 1. 1.15」「2010115」
「S 1. 1.15」　ーー＞　「S 1. 1.15」「3010115」
「H 1. 1.15」　ーー＞　「H 1. 1.15」「4010115」
「R 1. 1.15」　ーー＞　「R 1. 1.15」「5010115」
「R12.10.15」　ーー＞　「R12.10.15」「5121015」
「R12. 3. 9」　ーー＞　「R12. 3. 9」「5120309」

##infile.csv
M 1. 1.15
T 1. 1.15
S 1. 1.15
H 1. 1.15
R 1. 1.15
R12.10.15
R12. 3. 9

#ソース
```python:convert_wareki9_to_wareki7.py
# CSVファイルを読み込み
import csv
# インプットファイルオープン
infile = open('infile.csv', 'r')
# アウトプットファイルオープン
outfile = open('outfile.csv', 'w', encoding="utf-8")

# ライター準備
writer = csv.writer(outfile, lineterminator='\n')

# infileのレコードを順番に読み込み、outlistのクリア→編集→書き出し、を繰り返す
for row in csv.reader(infile):
    wareki9 = row[0]
    outlist = []
    outlist.append(wareki9)
    wareki7 = []
    for i in range(0,9):
        if i == 0:
            if wareki9[i] == 'M':
                wareki7.append('1')
            elif wareki9[i] == 'T':
                wareki7.append('2')
            elif wareki9[i] == 'S':
                wareki7.append('3')
            elif wareki9[i] == 'H':
                wareki7.append('4')
            elif wareki9[i] == 'R':
                wareki7.append('5')
        elif i==1 or i==2 or i==4 or i==5 or i==7 or i==8:
            if wareki9[i] == ' ':
                wareki7.append('0')
            else:
                wareki7.append(wareki9[i])
    wareki7_int = int(''.join(wareki7))
    outlist.append(wareki7_int)
    writer.writerow(outlist)

# ファイルクローズ
infile.close()
outfile.close()
```

infileのレコードを順に読み込むループ内では、
　　１．読み込んだレコード内容（rowの0番目要素：９桁和暦文字列）を、
　　　　write用リスト outlist へ出力
　　２．９桁和暦文字列 wareki9 を先頭から１文字ずつチェック、
　　　　７桁和暦用文字列リスト wareki7 へ対応値を順々に送る
　　3．９桁和暦文字列をチェックし終わったらリスト wareki7 の要素を
　　　　join結合し、７桁和暦文字列を得る。
　　　　int型へ変換して、write用リスト outlist へ出力
を行っています。これをinfile内の全レコードが終わるまで繰り返します。

##outfile.csv
M 1. 1.15,1010115
T 1. 1.15,2010115
S 1. 1.15,3010115
H 1. 1.15,4010115
R 1. 1.15,5010115
R12.10.15,5121015
R12. 3. 9,5120309

#おわり
できました。
VSCodeでxdebugを利用する on ローカル開発 with Laravelプロジェクト

「xdebugがうまく使えないんですけど」と、2人中2人に聞かれたので、記事にまとめておくことにしました。

# 環境
- MacOSX 10.14.4
- VisualStudioCode 1.33.1
- PHP 7.2.17
- Laravel 5.5
- xdebug 2.7
 - [PHP Version Support](https://xdebug.org/docs/install)

全部同じマシン上です！

# とにかく動かしたい！！(設定)
## xdebugのインストール
```# pecl install xdebug```

## php.ini の修正
```
# フルパスでかく！
zend_extension="/usr/local/php/modules/xdebug.so"

## xdebugの設定
xdebug.remote_enable=1
xdebug.remote_autostart=1
```

phpinfoで、xdebugが有効か確認できる模様

```php
<? phpinfo() >
```

## VSCode にxdebugクライアント（Extension）をインストール
- "PHP Debug" をExtensionで検索してインストール

## VSCode の設定
- VSCodeの"Debug"で、"Add Configuration"を選択し、"PHP"を選択

php.iniで特に設定していないので、ここも設定しない

# デバッグ実行
## VSCodeでデバッガ起動
- VSCodeの"Debug"で、設定したConfigurationを選択する →　クライアントが起動

## PHPサーバを立ち上げ
```$ php artisan serve```

# 説明

VSCodeのlaunch.json で、

```launch.json
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        }
・・・
```

と書いてあるせいか、ブラウザで```http://localhost:9000/```に接続し、「動きません」と2回中2回言われたのですが、**ポート9000は、デバッガ(xdebugクライアント)のものなので、ブラウザで接続するのは誤り**です。

処理の説明は、[Communication Set-up](https://xdebug.org/docs/remote) で丁寧に図示されていますが、
1. PHPを起動する（大抵はブラウザからリクエストを飛ばす。もちろんartisanコマンドでもOK）
2. PHP（のxdebug.so）が、設定に基づきクライアントへ接続する（デフォルトではローカルの9000. DBGPと言うらしい）
3. xdebugクライアントが応答し、デバッグ処理が行われる（ブレイクポイントとか）
4. PHPが結果を返す
と言う流れとなります。

# おわりに
laravelに特化して書きましたが、普通のPHPの説明となります。
UbuntuとWindowsデュアルブートしようとしたらUbuntuのインストール失敗しちゃった話(と解決?策)

#おし、UbuntuとWindowsでデュアルブートしよう
結構な数のエンジニアがUbuntuにお世話になってて、
「自分のPCにもUbuntu入れたいな～」
「でも、Windowsは消したくない」
「あ、デュアルブートすればええやん」
ってなると思います。

私も、自宅でAIの勉強がてら
UbuntuでGPU使ってガリガリ学習とかかけさせたくなって来たタイミングでした。
(aptとか使えるし、大体のGitHubはWindows環境で学習してない)

##実際にUbuntuを入れる
私の場合、外付けのHDDにOSもブートローダも入れて、
外付けHDDにUbuntuの環境をドカッと持つような感じにしたかった。

そこで以下の記事を元に外付けHDDにUbuntuを入れようと試みました
https://freepc.jp/post-34573

で、サクサク手順を進めてたら問題が発生しました。

##GRUBのインストールに失敗しました
まさか、こんな簡単な手順でエラーが出るとは思ってなかったので焦りました。
GRUBとはLinuxでよく使われるブートローダのことです。
~~ブートローダとはなんぞやって人は山に籠もって勉強してください。~~

「ええ～ブートローダのインストールに失敗って致命的じゃね、、、」

実はこの問題、Ubuntuの開発側が予期していなかったGRUBのアップデートによって引き起こされるものらしく、
私が調べた感じ、ver18のLTSでデュアルブートしようとしている人は大体この問題に引っかかっていました。

##解決策
この問題の解決策はいくつかあるみたいでした。

①ブートローダのパーティションを新たに作成する方法
https://www.geek.sc/archives/1404
私の場合、Windowsのブート領域と競合するっぽくてこの手法は使えませんでした。

②オフラインでubuntuをインストールする
参考URLは忘れちゃいましたが、
つまり「GRUBのアップデートで起こる問題ならLAN引っこ抜いて、GRUBをアップデートさせなきゃええやん」
ってことですね。
これも私の場合は、状況は変わらず使えませんでした。

③Boot-Repairを利用する
https://kledgeb.blogspot.com/2018/06/ubuntu-1804-146-boot-repair.html
このツールは
「ブート領域が壊れてる!」
「でも、俺はブート領域を復元させる知識も力も無い!」
「くそ、、、俺は何も出来ないのか、、、」
って人に力を貸してくれるブート領域を勝手に修正してくれるツールです。

##あ、でけた
Boot-Repair使ったあとにPCを落として、もっかい付けたら
ブートローダの画面にUbuntuとWindowsの文字が、、、!
Ubuntuを起動したらさっきインストールに失敗したはずのUbuntuが起動して来ました。
どうやら、OS自体のインストールは完了してたみたいです。
そして、Windowsも無事に生き残っててくれました。

##最後に
多分、大体の人が引っかかると思うので参考になれば幸いです。
この記事に書いてある解決策じゃだめだった。
これで出来たよって人が居れば是非この記事のコメントに残して、
皆さんに協力してあげてください。
nanoKONTROL2をイベントリスナーぽく処理する

nanoKONTROL2 とキー入力をイベントハンドラぽく処理したいなと思って作ったので公開

## Overview
こんな感じでハンドリング

```
nano.On(NanoKey.Slider1, sliderUpdate);
```

似たようなインターフェイスでキー入力も

```
key.On(KeyCode.Alpha1, keyInput);
```

MIDIコンは、[ナノコントローラー2](https://www.korg.com/jp/products/computergear/nanokontrol2/)専用です
![korg_nanokontrol2bka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20773/a23fb613-e59d-3900-99b0-ea5cc3934736.jpeg)
_キーマッピングを用意すれば他のコントローラーでも使えると思います_

### Repository
https://github.com/nenjiru/unity-nanokon-listener

**Required**
MIDIまわりは keijiro さんの [midi-receiver](https://github.com/keijiro/unity-midi-receiver) を使います

dllパッケージを下記のリポジトリからインポート
https://github.com/keijiro/unity-midi-receiver-test

必要なのはこの２つ
/Assets/Plugins/*
/Assets/UnityMidiReceiver/*

Asset配下におく
![asset.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20773/45fd959e-baf4-ae52-24f2-6480d8709f4f.jpeg)

## Usage
Demoシーンにアタッチされている Demo.cs にあるのがすべてですが簡単にできるとをまとめると

### nanoKONTROL2
**スライダー1の値を受け取る（値は0〜1に正規化）**
> nano.On(NanoKey.Slider1, (v) => Debug.Log(v));

**SOLO1ボタンが押された**
> nano.OnHigh(NanoKey.Solo1, () => Debug.Log("Pushed"));

**SOLO1ボタンが離された**
> nano.OnLow(NanoKey.Solo1, () => Debug.Log("Pushed"));

**SOLO1ボタンが押されたら引数に True、離されたら false が渡される**
nano.OnToggle(NanoKey.Solo1, (v) => Debug.Log(v));

### キー入力
**スペースキーが押された**
> key.OnDown(KeyCode.Space, () => Debug.Log("Space pushed"));

**スペースキーが離された**
> key.OnUp(KeyCode.Space, () => Debug.Log("Space released"));

**スペースキーが押されたら引数に True、離されたら false が渡される**
> key.On(KeyCode.Space, (v) => Debug.LogFormat("Space value {0}", v));
CentsOS 6.x  [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC]

`
# pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/d8/f3/413bab4ff08e1fc4828dfc59996d721917df8e8583ea85385d51125dceff/pip-19.0.3-py2.py3-none-any.whl (1.4MB)
    10% |███▍                            | 143kB 3.0MB/s eta 0:00:01
Could not install packages due to an EnvironmentError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2305)
`

こんなエラーが出た場合

```
[root@localhost ~]# mkdir -p /root/cert.bak
[root@localhost ~]# rpm -Vv ca-certificates | awk '$1!="........."&& $2!="d" {system("mv -v " $NF " /root/cert.bak")}'
`/etc/pki/java/cacerts' -> `/root/cert.bak/cacerts'
`/etc/pki/tls/certs/ca-bundle.crt' -> `/root/cert.bak/ca-bundle.crt'
`/etc/pki/tls/certs/ca-bundle.trust.crt' -> `/root/cert.bak/ca-bundle.trust.crt'
[root@localhost ~]# yum check-update ca-certificates; (($?==100)) && yum update ca-certificates || yum reinstall ca-certificates

インストール:
  ca-certificates.noarch 0:2018.2.22-65.1.el6

完了しました!

```

確認

`
[root@localhost ~]# pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/d8/f3/413bab4ff08e1fc4828dfc59996d721917df8e8583ea85385d51125dceff/pip-19.0.3-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 5.3MB/s
Installing collected packages: pip
  Found existing installation: pip 19.0.2
    Uninstalling pip-19.0.2:
      Successfully uninstalled pip-19.0.2
Successfully installed pip-19.0.3
Eclipse ショートカット集



■検索系
クラス検索
・Ctrl + Shift + T
リソース検索
・Ctrl + Shift + R

開いているタブからリソースを選ぶ。
Ctrl + E

★ファイルを選んだ時、パッケージエクスプローラ上でそのファイルを選択する。
・パッケージエクスプローラの「⇔」LinkWithEditorをクリック。

---
■移動系
上下の行を改行
Shift + Enter
Ctrl + Shift + Enter

メソッド,フィールド単位で移動
・Ctrl + Shift + ↑ or ↓

変数名の使用箇所にジャンプ(変数名全体を選ぶ必要あり。)
Ctrl + K
Ctrl + Shift + K

コンパイルエラー箇所にジャンプ
Ctrl + ,
Ctrl + .

タブ移動
Ctrl + Tab
Ctrl + Shift + Tab

---
■コンテンツアシスト
★デフォルトだと不要な種類のアシストがいっぱいあるため
「Ctrl + Space」を何回も押さないといけない。
Windows -> 設定 -> Java -> Editor -> ContentAssist -> Advanced
・上枠のdefault設定に「Java Proposal」のみチェックする。
・下枠のチェックをすべて外す。
rails new アプリ名 --database=postgresql後のbundle installエラーの対処法

#cd [アプリディレクトリ]後のbundle installエラーの対処法

下記とほぼ同じ
https://qiita.com/andmorefine/items/a4b1762ec86b831f63ef

```
$ brew install postgresql 
```

しかし、これをしても

```
postgresql provides a launchd plist which can only be used on macOS!
You can manually execute the service instead with:
  pg_ctl -D /home/linuxbrew/.linuxbrew/var/postgres start
```
と出る。

そこですかさず

```
$ pg_ctl -D /home/linuxbrew/.linuxbrew/var/postgres start
```

これをやってあげるとすんなりいく。
TableauをOracle Autonomous に繋げてみた

Autonomous（Oracle Cloud）とTableau Desktopの接続について纏まった記事がなかったので、備忘録としてまとめてみた。

接続方法としては、以下のサイトを参考にしてみてください。
https://cloud.oracle.com/opc/paas/datasheets/ADW%20Connection%20Instructions_TableauDesktop.pdf


##動作環境
mac OS 
Tableau Desktop
Autonomous Data Warehous Cloud


##事前準備

###Oracle Clientをインストール
まずは、端末にOracle Clientをインストールします。手順はいろんな記事が纏まっているので、参考にするといいと思います。
参考：https://www.tank-sakurai.com/mac-os-x_oracle-database/

#####Oracle Clientを取得する
公式サイトからOracle Clientのインストーラを取得します。
※事前にOracleアカウントの作成が必要
ここでは Version12（最新）のBaseの「Basic Package」をインストールしました。
https://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
<img width="704" alt="スクリーンショット 2019-03-07 23.17.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/297721/577514b2-9cd7-a299-46a2-804cfa7ae654.png">

#####Oracle Clientを設定する
任意のディレクトリにzipを解凍し、解凍したフォルダ内に/network/Adminを作成します。
ここではtmp配下に解凍

```
cd /tmp
cp /Users/name/Downloads/instantclient-basic-macos.x64-12.2.0.1.0-2.zip ./
unzip instantclient-basic-macos.x64-12.2.0.1.0-2.zip
mkdir instantclient_12_2/network/Admin
```

#####PATHを通す
ORACLE_HOMEとSQLPATHとTNS_ADMINのPATHを作成します。
※SQLPATHはなくてもいいですが、他で使用することもあるので作成しておきます。

```
vi ~/.bash_profile
export ORACLE_HOME=/tmp/instantclient_12_2
export SQLPATH=$ORACLE_HOME
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH="$HOME/.rbenv/bin:$PATH:$SQLPATH:TNS_ADMIN"
```


##Autonomousから接続定義を取得する
Oracle Cloudのコンソール画面からAutonomousの接続定義を取得します。
<img width="1280" alt="スクリーンショット 2019-03-08 0.24.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/297721/74142ddf-81f6-d360-3452-7bd160530103.png">
<img width="637" alt="スクリーンショット 2019-03-08 0.26.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/297721/6e28de5d-78f9-0d0e-eaf4-645a5cca7b12.png">

Downloadに作成できた「Wallet_DB名.zip」を解凍し、配置ファイルを$ORACLE_HOME/network/adminに移動します。
※tnsnames.oraとsqlnet.ora を配置するだけで動作するようです。
※すでにtnsnames.ora,sqlnet.oraがある場合は、ファイル内の情報を既存ファイルに書き加えればOKです。
<img width="282" alt="スクリーンショット 2019-03-09 22.36.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/297721/235c8a47-2333-ca39-c559-5f541c3be4bd.png">
これでTableauからAutonomousに接続する準備は完了

##TableauでAutonomousに接続する
まずは、Oracleに接続するドライバーが必要か確認をします。
バージョンによっては必要になるため、事前にインストールをしましょう。
https://www.tableau.com/ja-jp/support/drivers

Tableau Desktopを起動し、Oracleの接続を選択します。
<img width="1003" alt="スクリーンショット 2019-03-09 22.41.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/297721/194d59e0-3f7e-73f7-6a2d-a48cb683ea05.png">

接続情報を入力します。ここでは接続数の多いlowタイプを使用しています。
・サーバー：tnsnames.oraからコピーをします。
・ユーザー名：admin
・パスワード：設定したもの
<img width="650" alt="スクリーンショット 2019-03-09 22.49.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/297721/2f46a452-6f69-61b5-b089-45e0b74ef8c8.png">

<img width="419" alt="スクリーンショット 2019-03-09 22.44.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/297721/b56c2734-4f90-b8ed-7ffe-8b6e694b78f3.png">


これで接続完了です！
Oracle Cloudは30日間、Tableauは14日間の無料トライアルもやっているので、試される際にはぜひ！
aliasまとめd(￣ ￣)

## aliasとは

wikipediaより

`Unixなどにおいてコマンドを別名で登録したもの。別名を登録するコマンド名
`

長いコマンドやいつも利用するオプションを毎回入力するのは手間なのでターミナルの設定ファイル(bashrc)にaliasを記述することで別名として定義することが可能です。
今回の記事ではターミナルの設定ファイル(bashrc)の説明とどのようにaliasに記述して登録するかについて書いていきたいと思います。



## 設定ファイル

ログインシェル(PCを起動した時にデフォルトに指定されるシェル)をbashにしている場合は(起動)時に以下のような順番で設定ファイルが読み込まれ,PATHを通す、エイリアスを定義する、プログラムを実行するなどの設定が自動で設定されます。


● .bash_profile
● .bashrc

この2つが設定ファイルです。
それぞれどんな使い分けなのかをまとめてみました。


## bash_profile

ログイン時にのみ実行されます。


● 環境変数(exportする変数)

環境変数はプロセス間で勝手に受け継がれるのでログイン時のみ設定すれば十分です。


## bashrc

.bashrc は対話モードのbashを起動する時に毎回実行されます。
具体的な用途は



● 環境変数でない変数を設定する(exportしない変数)
● エイリアスを定義する(alias)
● シェル関数を定義する
● コマンドラインの補完の設定をする

これらはbashを起動する度に毎回設定する必要があるものです。


## aliasの設定方法


``` 
$ vi ~/.bash_profile 



# Git系
alias checkout='git checkout'
alias g='git'
alias ga='git add'
alias gb='git branch'
alias gcm='git commit -m'
alias gd='git diff'
alias gf='git fetch'
alias gp='git push origin'
alias gs='git status'
alias gsas='git stash apply stash@{0}'
alias gsl='git stash list'
alias log='git log'

# mysql系
alias my='sudo mysql.server start'

# webpack系
alias pack='bin/webpack-dev-server'

# Rails系
alias r='rails'
alias R='rails s'
alias b='bundle'
alias be='bundle exec'
alias rc='bundle exec rails c'
alias rs='rspec'


# bash系
alias set='vi ~/.bash_profile'
alias update='source ~/.bash_profile'


```

## aliasの適用

.bash_profileを読み込みなおします。
```$ source ~/.bash_profile```

aliasコマンドを打ち、先ほど追加したエイリアスが反映されていることを確認します

<img width="677" alt="スクリーンショット 2019-04-14 15.30.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311533/e5b2df0e-6ad2-c1aa-5d09-9eb0b34c068d.png">

##  エイリアスを設定すると便利なのでぜひ！🎈
PycharmからGithubに連携するまで(コマンドを出来るだけ打ちたくない人向け)

Gitコマンドを覚えるのが面倒くさいけど、すぐにGithubを使わなければならない！！という人向けの記事になります。

今回はPycharmについて紹介しますが、JetBrains社のIDEであれば、大半同じように出来ると思います。

まずは下記の記事からGithubのアカウント登録から公開鍵の設定及び**有料版PyCharm**、Anacondaのインストールまで行ってください。**（学生ならPyCharmの有料版は無料なのでぜひインストールしてね！！）**
>[GitHubのアカウント登録からリポジトリ操作まで]
(https://qiita.com/muneo/items/1321bf8cdb21178a73e2)
[Python開発環境構築 ー PyCharm × Anaconda](https://qiita.com/tanj/items/d88a3084a092bb106a97)

次にPycharmを開いて、下記の記事を参考にすれば、連携はほぼおしまいだと思います。
（Pushの際はリポジトリの管理者から招待が必要なので忘れずに！！）

>[リモートホストからプロジェクトをチェックアウトする (クローン)](https://pleiades.io/help/pycharm/set-up-a-git-repository.html)

##簡単にPull,Pull,Checkoutのボタンがどこなのかを説明
###Pull,Push(commit)ボタン
Pycharmが開くと画面上部に下のような矢印？ボタンがあるのですが、これは左からpull,commit（pushまで出来ます）を意味します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398469/7f6cf791-10ed-e024-f98f-cdd809c7f8d9.png)


###Checkoutボタン
また、右下にもこのようなボタンがあると思います。Git:masterが今のブランチを示していて、ここをクリックするとLocal及びRemote branchの切り替えが出来ます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398469/f8df722c-8688-3d5b-e26b-5bc20dcf3a33.png)




以上です！

もし、分からないところがあれば、すぐにご連絡お願い致します！！
[golang]改行コードをトリムして、1行単位にファイルを読み込む

# はじめに
[[golang]改行コードを維持して、1行単位にファイルを読み書きする](https://qiita.com/y-moriyama/items/eaaa03569cfda8aaeb61)を調べていた過程で、改行コードをトリムしたい場合も自分なりに整理したので備忘がてら記載します。

# ソース
```Go:main
package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
)

const (
	initialTokenSize = 4096
	maxTokenSize = 500 * 1024 // scanner.Err()でエラーになる場合、ここの数字を増やす
)

func main() {
	// 読み込みたいファイルの指定
	file, err := os.Open("./file.txt")
	if err != nil { log.Fatal(err) }
	defer file.Close()

	scanner := bufio.NewScanner(file)
	buf := make([]byte, initialTokenSize)
    //bufのサイズが足りなかった場合、maxTokenSizeまでバッファを拡大してスキャンする。
	scanner.Buffer(buf, maxTokenSize) 

	for scanner.Scan(){
		// 改行をトリムした文字列は、scanner.Text()にて取得できる
		fmt.Println(scanner.Text())
	}
	// bufferが足りなかった場合などは、scanner.Err()でエラーを検出できる
	// このエラーハンドリングをしていないコードも結構あるので注意
	err = scanner.Err()
	if err != nil { log.Fatal(err) }
}
```
# 解説
改行をトリムする場合は、ReadLine()とScanner.Scan()とあるがScannerの方がシンプルで好みなのでこちらを採用。
Scanner.Scan()の問題点として、1行がMaxScanTokenSize(64 * 1024 バイト)を超えるとエラーになってしまう。したがって、Scanner.Buffer()を使用して、バッファが足りない場合はmaxTokenSizeまでバッファを拡大するよう指定する。
それでもバッファが足りない場合はScanner.err()でエラーとなるので、maxTokenSizeを見直す。

# 参考
[Goのbufio.Scannerは入力データの1行の長さが一定以上になるとスキャンをやめてしまう](https://mickey24.hatenablog.com/entry/bufio_scanner_line_length)
HomebrewをAWSCloud9に導入する手順

# HomebrewをAWSCloud9に導入する手順

ネット上で記事を探していると、下記のような記事がおそらく一番に見つかると思う。
※2019年4月14日時点※
https://qiita.com/fagai/items/0872536c46a91f429bbd

しかしながら、現時点ではこの方法はすんなりいかない。
コマンドに打ち込むと、最新のものを導入する手順をターミナルで教えてはくれるが、
備忘録のため、そしてこれからプログラミングを始める人のためにこの記事を残す。

## 簡単に言えばこのURLを参照してください

タイトルにもある通り、簡単に言えば、下記のようなURLに行けば良い。

https://github.com/Linuxbrew/brew

が、いちいちURLにまた飛ぶのはめんどうなので、この記事にも記載する。

### (1)下記のコマンドを打ち込む

```
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
```

###(2)PATHを通す

```
test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile
```

### (3)完了

```
brew install hello
```
MSYS2からAnacondaのcondaコマンドを使用できるようにする


<font color="red">condaのバージョンが4.6.11以降だとうまくいきません！</font>


~~投稿動機は問題解決のためにいったんアウトプットしようと思ったためです。[^1]~~

2019/8/13 追記: conda 4.7.10での動作確認をいたしました

早速本題。まず`.bash_profile`に以下を記述してAnacondaのPATHを通し、`conda activate`コマンドを使用してみます。
(`(Anacondaまでのパス)`は各自のパスに置き換えて考えてください。)

```bash:.bash_profile
if [ -d "(Anacondaまでのパス)/Scripts" ] ; then
  PATH="${PATH}:(Anacondaまでのパス)/Scripts"
fi
```

```bash:bash
$ conda activate
```

するとバージョンによって違いはあるのかもしれませんが、以下に示す親切なエラー文が出てきます。

```:バージョンが4.5.12の場合
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
If your shell is Bash or a Bourne variant, enable conda for the current user with

    $ echo ". (Anacondaまでのパス)/etc/profile.d/conda.sh" >> ~/.bashrc

or, for all users, enable conda with

    $ sudo ln -s (Anacondaまでのパス)/etc/profile.d/conda.sh /etc/profile.d/conda.sh

The options above will permanently enable the 'conda' command, but they do NOT
put conda's base (root) environment on PATH.  To do so, run

    $ conda activate

in your terminal, or to put the base environment on PATH permanently, run

    $ echo "conda activate" >> ~/.bashrc

Previous to conda 4.4, the recommended way to activate conda was to modify PATH in
your ~/.bashrc file.  You should manually remove the line that looks like

    export PATH="(Anacondaまでのパス)/bin:$PATH"

^^^ The above line should NO LONGER be in your ~/.bashrc file! ^^^
```

このエラー文から以下のことがわかります。

- `. (Anacondaまでのパス)/etc/profile.d/conda.sh`を実行すると現在のユーザーで`conda`コマンドが使えるようになります
- `conda activate`で`base`環境を立ち上げましょう
- バージョンが`4.4`以前ではパスを通すようにしていましたが現在は非推奨です

早速`.bash_profile`を書き換えパスを通すのをやめて`conda.sh`が実行されるように書き換えましょう。

```bash:.bash_profile
# 以下消す
# if [ -d "(Anacondaまでのパス)/Scripts" ] ; then
#   PATH="${PATH}:(Anacondaまでのパス)/Scripts"
# fi
# ここまで消す

. (Anacondaまでのパス)/etc/profile.d/conda.sh
conda activate base
```

シェルを立ち上げなおします。

```bash
(base)
$
```

こんな感じになれば`base`環境を立ち上げることに成功しています。これで`python`コマンドも使用することができるようになりました。

# `4.6.11`~~以降~~で起きている問題

`4.6.11`以降、MSYS2では

```bash
$ conda activate
CommandNotFoundError: No command 'conda conda'.
```

というエラーが発生しコマンドが使用できないです。

Anaconda Promptは使えますがとても不便です...

[リリースノート](https://www.anaconda.com/anaconda-2019-03-release/)によるとPowershellで使用できるようにしたそうなので確実にそれが問題な気がしますけどね...ちなみに`$ powersell conda activate`とか打っても同様のエラーが出ます。

何かわかり次第追記していこうと思っています。

追記: 上記に示す通り、現在はバグが修正され使用可能になっています!

[^1]: ~~[teratailで質問してみた](https://teratail.com/questions/183330)のですがまだ解決できてないです...うーん~~ 解決しました!
Travis CIのビルド結果をサーバにPOST通信で送信する方法メモ

# 概要
GitHubのリポジトリに**Push**もしくは**Pull Request**をした時に自動でテストを走らせる為のツールに、Travis CIがあります。

Travis CIでのテスト結果をSlackなどに通知させる方法はインターネット上にたくさん記事が挙げられていますが([こちら](https://qiita.com/vmmhypervisor/items/b6cd3f8db7b434fbb933)や[こちら](https://qiita.com/matsuda/items/01707c74c2423958a273)など)、`Webhook`を用いてサーバにテスト結果をPOSTする方法に関しては、Slackほど情報が手に入らず、且つハマりどころが多かった為、ここにメモを残します。
# やりたかったこと
Travis CIのテスト結果を、AWSのAPI GatewayにPOSTして、その情報を基にLambdaでゴニョゴニョしたかったです。
![Screen Shot 2019-04-14 at 14.45.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283226/abddf054-94fa-715a-3a27-0f2ae3dcc849.png)

# 失敗例
`Webhooks`を用いてPOST通信を行おうとしました。その時の`.travis.yml`が以下です。

```yaml:.travis.yml
language: go
os: osx
osx_image: xcode10.2
go:
- 1.11
install:
- export GO111MODULE=off
- go get -u github.com/golang/lint/golint
script:
- golint ./...
- go test game.go
notifications:
  webhooks: $API_GATEWAY
env:
  global:
    secure: NexCzvXM0+zYrXfKRzUL6/xpg ~省略~
```
上では、環境変数`API_GATEWAY`に送信先のurlを保持させ、暗号化させています(暗号化の方法は、[こちら](https://qiita.com/arukoh@github/items/0315e6b2c1ac046ab34f)や[こちら](https://qiita.com/gonzaemon111/items/0e3cb3d7ccf5e45135a2)に載っています)。

そして、この環境変数を用いて、Webhookで通知を送ろうとしました。以下の部分です。

```yaml
notifications:
  webhooks: $API_GATEWAY
```

しかし、この方法ではテスト終了時にリクエストが送信されることはありませんでした。

[こちら](https://github.com/travis-ci/travis-ci/issues/7486)に書いてあるように、`notifications`の設定はビルド前に行われるのに対し、環境変数の設定はビルド中に行われる為、`notifications`内の項目には環境変数の設定が反映されない為です。
# 解決法
環境変数を用いずに、urlを`.travis.yml`に直に書き込んだらうまくいくようになるのですが、それをGitHubに挙げてしまうのはなんかいい気分がしません。そこで、以下の方法で迂回しました。
## curlで送信
`notifications`ではなく、'after_success'と`after_failure`の中で`curl`コマンドを叩いて、リクエストを送信するようにしました。

まず、以下のようなbashファイルを用意します。

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

curl -X POST -H "Content-Type: application/json" $API_GATEWAY
```
このファイルをビルド完了後に実行することで、正常に通知が送られるようになります。

```yaml:.travis.yml
language: go
os: osx
osx_image: xcode10.2
go:
- 1.11
install:
- export GO111MODULE=off
- go get -u github.com/golang/lint/golint
script:
- golint ./...
- go test game.go
after_success:
- ./message.sh
after_failure:
- ./message.sh
env:
  global:
    secure: NexCzvXM0+zYrXfKRzUL6/xpg ~省略~
```

## 環境変数の取得
上に示したbashファイルでは、リクエストボディ部が空のリクエストが送られてしまいます。リクエスト内容にTravis CIのビルドのurlやコミットメッセージ内容などを組み入れたいときは、Travis CIのデフォルトの環境変数を利用します。

[こちらのドキュメント](https://docs.travis-ci.com/user/environment-variables/)にデフォルトの環境変数の一覧が載っていますが、これらを基にbashファイルを書き換えます。

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

curl -X POST -H "Content-Type: application/json" -d '{"status":0,"url":"'"$TRAVIS_JOB_WEB_URL"'","message":"'"$TRAVIS_COMMIT_MESSAGE"'"}' $API_GATEWAY
```

上の例では、コミットメッセージとビルドのurlを送信しています。
Filezillaを使ってEC2にファイル転送する方法

#作業環境
macOS ~~Mojave ver10.14.2~~ Big Sur 11.3

#AWSサービスに登録
まずはここからです。[AWS](https://aws.amazon.com/jp/)このページからAWSに関して色々な情報を見ることができます。
[サインアップ](https://portal.aws.amazon.com/billing/signup#/start)ページも貼り付けておきます。

#EC2インスタンスの作成
会員登録ができたら、早速インスタンスを作成していきます。
<img width="1238" alt="スクリーンショット 2019-04-14 14.03.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376889/a93c4c80-6289-09e1-b7bb-6952bb1dce96.png">
ログインしたらトップでこのようなページが表示されると思うのですが、仮想マシンを起動する。という欄が私のページでは左下に表示されていますので、ここからEC2インスタンス設定に飛びます。
もしかしたら人によっては違うところに表示があるかもしれないので、とにかくEC2インスタンスの設定ページまで飛んでください。
<img width="1253" alt="スクリーンショット 2019-04-14 14.09.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376889/ee96c7dd-473c-a865-44b8-054c0fa5e5ce.png">
そうしましたら、上記のページに遷移するので、今回はOSをUbuntuに指定していきます。
ちょうど黒の枠に囲っているものを指定します。(無料枠なので料金は発生しません。)

青い選択ボタンを押すと次に進みます。条件を確認して、よかったら青い確認と作成ボタンを押しましょう。すると、もうはや起動できるページに進みますので、青い起動ボタンを押しましょう。
<img width="1259" alt="スクリーンショット 2019-04-14 14.18.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376889/8babb4c7-9272-6966-97f1-680c47964f4d.png">
起動ボタンを押すと、秘密鍵がどうやこうやのポップアップが出てくるので、秘密鍵を作成しましょう。新しいキーペアの作成とし、任意でキーペアの名前を設定しましょう。

今回は鍵をデスクトップにフォルダを作成し、その中に入れておくようにしておきました。

#ssh接続
上記までの作業でインスタンスが生成され、起動もしてある状態と思いますので、ターミナルを開いてインスタンスの中に入っていきましょう。

```
ssh -i "秘密鍵の名前" ubuntu@ec2-18-219-190-23.us-east-2.compute.amazonaws.com
```
sshコマンドを実行し、接続します。

#FileZillaの設定
[FileZilla](https://filezilla-project.org)からクライアントの方をダウンロードしましょう。
インストールまでできたら、FileZillaを開きましょう。
そして開いたらアプリケーションを閉じるバツボタンの下あたりにルーターみたいなものが3つ並んだアイコンがあるので、それをクリックし、サイトマネージャーを開きましょう。
<img width="851" alt="スクリーンショット 2019-04-14 14.37.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376889/8afae64d-2736-b9cf-550d-098b518e9a49.png">
エントリの選択のところに新規作成で接続先を登録しておきます。いちいちIPやらなんやらを打つのは手間ですので!!
上記の画像では自分のサイトの下に何か出てますが、初めて起動させた方は出てないのが正解です。
<img width="735" alt="スクリーンショット 2019-04-14 14.42.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376889/4ad49d75-f09a-db66-d777-216803591763.png">
新しいサイトを押すと、新規サイトを登録できるようになるので、任意のサイト名を指定し、あとはインスタンスの情報を右の欄に埋めていきます。プロトコルをSFTPにし、ホストはインスタンスのv4のIPを指定してあげてください。
ログオンのタイプは鍵ファイルとし、ユーザーはubuntuとしておきます。

#### *2021/05/18 更新
`~/.ssh`以下などでsshコマンドを用いでec2インスタンスに接続できるよう、configしている方は省略することが可能です。

FileZillaを開き、上記のタブから設定を開き、SFTPの欄で秘密鍵を追加することが可能です。

![スクリーンショット 2021-05-18 12.36.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376889/238d2323-1785-12d4-ce3e-2a740b2338aa.png)

また、秘密鍵を用いた接続方法を取る場合、ログオンタイプは`通常`設定で問題ないかと思います。
ソース: https://support.leapy.jp/pc/891/

#リモート内にプロジェクトをコピー
ここまでできたら青い接続ボタンを押しましょう。
<img width="1195" alt="スクリーンショット 2019-04-14 14.51.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376889/9cc7df41-264b-2689-0035-52fcefd188b7.png">
接続に完了しますと、左側にローカル、右側に接続先の情報が見れるようになります。

ここでは簡単にフォルダ等作成できるので非常に便利です。

リモートの方に入れたいプロジェクトのディレクトリを作成します。
ubuntuを右クリックし、ディレクトリの作成です。

ディレクトリが作成できたらzip化したプロジェクトをドラッグ&ドロップで入れてあげます。

あとはターミナルからsshで接続し、unzipコマンドで解凍するだけですね。

#終わり
この記事はこれで終わりです。
すごく簡単に転送できますよねびっくり
なんか面倒なコマンドを打たないといけないとかがなくFileZillaを使えば直感的にちょちょいと転送できちゃいます。
mrubyでの３０日開発日記（イントロダクション！）

#どうしてこんなことをしようとしたのか

今日友人と食事をしているときに、友人が３０日でどれだけウェブサイトが作れるのかということを自分のブログで記事にしていることを聞いた。
僕も少し前にmrubyでopenglを使えるようにするライブラリを作っていたので、それなら「３０日でどれだけのことができるかを記事にしたらおもしろいのではないのか！？ニコ動のやってみた動画のように！」と思いたち、行動することにした。
まあ、ブログのように書くかもしれないが気軽に楽しんでくれ。

#githubのリポジトリとtwitterアカウント

github:https://github.com/yuukis234/mruby_games.git
twitterid: @yuukis2342

twitterで随時更新しておくのでみてください！
Java SE8 Silver はJava開発業務に役立つか！？

# Java SE8 Silver は業務に役立つかどうか！？

少し前にJava SE8 Silverに合格したので、勉強方法そして業務の役に立ったかどうかを書き記そうと思います。

Java開発経験：4年
勉強期間：2週間(平日約1時間、休日約2時間)
取得点数：82%(合格ライン65%)

# 想定読者
- Java SE8 Silverの受験を考えている方
- Java SE8 Silverを勉強している方
- プログラミングの資格が業務に役立つかどうか気になる方

# Java SE8 Silverとは
正式名称は「Oracle Certified Java Programmer, Silver SE 8 認定資格」である。

##### 資格の評価目的レベルは以下(Oracle公式引用)
Javaアプリケーション開発に必要とされる基本的なプログラミング知識を有し、上級者の指導のもとで開発作業を行うことができる開発初心者向け資格です。日常的なプログラミング・スキルだけでなく、さまざまなプロジェクトで発生する状況への対応能力も評価することを目的としています。


# Java SE8 Silver は業務に役立つか？
いきなり結論にいこうと思います。私個人的にはすごく役に立っていると思います。
一番はIDE(統合開発環境)のエラーメッセージに頼らなくて済む場面が多くなり、開発効率があがりました。
また、レビュワーとしてレビュー指摘した際にはっきりとした技術観点を持てました。
今までわかったようでわかってなかった部分が鮮明になり自身の知識の幅が広がったと思います。

ex)例外処理について、ふわっと「例外」で一括りの理解で、3種類あるとは知らなかった
　⇛例外処理のレベルを必要に応じて切り分けるコーディングができるようになった。

# なぜ取得しようと思ったか
ふと自身のスキルを棚卸しをしているときに、自分は今まで開発で使ってきたJavaのスキルに対してはっきりと「Javaができる！」と言えるのかどうか不安になりました。なので、第三者からみても一定のスキルを有していると評価いただけるように上述のJava SE8 Silverを受けようと考えました。

# 勉強に使用した本
通称黒本と呼ばれているものです。いろんな方の合格体験記を見てもこれが一番良いとの口コミだったので使用しました。確かにこれ一冊を徹底的に理解していれば必ず合格できると思います。
各章を2～3回すべて理解するまで繰り返し問題を解きました。

[徹底攻略 Java SE 8 Silver 問題集1Z0-808対応](https://www.amazon.co.jp/gp/product/4844339931/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1)

# 主な出題内容・観点
主な出題観点を記載しておきます。ご参考までに
Javaのデータ型、クラスの作成からメソッドの定義方法まで、演算子やループなどの構文を理解する必要があります。

### Javaの基本
- クラスの宣言
- パッケージインポートの記述方法(staticインポート)
- Java実行コマンド

### javaの型操作

- データ型(プリミティブ型)
- クラスとインスタンスの関係

ちなみに軽くデータ型をまとめた表を以前Qiitaに投稿したので参考までに
https://qiita.com/yutaka_oshiro/items/fa8fb01118584b9101db

### 演算子と判定構造
- インクリメント演算子とデクリメント演算子
- 論理演算子、優先順位
- if文
- Switch文
- 三項演算子

### 配列
- 配列の初期化、宣言、生成
- 多次元配列

### ループ構造
- while,dowhile
- for文、拡張for文
- 二重ループ
- 無限ループ
- break,continue

### カプセル化
- メソッドの定義
- staticメソッド
- オーバーロード
- コンストラクタ
- アクセス修飾子
- カプセル化とデータ隠蔽
- 値渡しと参照渡し

### 継承、実装
- クラスの継承
- インターフェース
- 抽象クラス、具象クラス
- オーバーライド
- ポリモーフィズム
- アップキャスト、ダウンキャスト(型変換)
- this,super()

### 例外処理
- try-catch文、try-catch-finally文
- 検査例外と非検査例外、エラー
- 例外クラス

### Java8での新機能API
- ラムダ式
- LocalDate,LocalTime

# 試験について、感想

##### 受験手順

受験手順はすごく面倒くさいです。以下参考サイト様
https://qiita.com/yskuma6684/items/b8604d6e5572490a13a8

すぐに合格がわかるようにCertViewには登録しておいた方が良いと思います。

##### 受験の感想

黒本を解説をすべて理解出来ていれば合格できると断言できます。
模擬問題の問題ほぼほぼそのままで、変数名やクラス名だけが変わっており選択肢の位置すらも全く一緒という問題が多数ありました。
あと、受験時間は2時間半で77問と長丁場になる可能性もあるので、しっかり睡眠しておいたほうが良いと思いました。
受験が終了してから会場のビルを降りたところで合否がでたメールが届きました。早いですね！

Javaについて学びたい方、自身のスキルを試してみたい方はぜひ受験してみてください！
Qiitaの使い方についてつらつらと

#Qiitaの使い方についてつらつらと
今の時代、検索すればコマンドやら、Rubyやら、様々な情報がQiita上にアップされていて、それらの情報で自分の問題を解決できるのに、なぜ次々と同じような記事がアップされるのだろうかと疑問に思っていた。

しかし、自分も本格的にプログラミングをするようになって、なぜなのかが分かった。

## 結局は自分のため
プログラミングをしていると日々様々な課題にぶつかる。そうなったときに、ストックしておいた記事を探すのはあまりに手間がかかるし、そもそも実は自分の環境では役に立たなかったような記事がいくつも見つかってしまう。その間に膨大な情報の海に漂流したまんま時間が過ぎ去ってしまう。

そうすると、結局は、自分の環境に適した自分の、自分による、自分のための記事が結局は一番役に立つということになる。

それが、結局は日々Qiitaの情報が増え続ける理由ではなかろうか。
実際、自分で自分のための記事を書かんとだめだなと実感している。

しかし、自分のために記事を書いていると、それが結局は他人のためになることにもなるというのがQiitaの素晴らしいところ。Qiitaのサービスを作った方には頭が上がりません。

今は備忘録の性質が強いが、自分もQiita上や様々なサイトから学びを得たので、自分の記事が皆様にもみやすいようなものになるようにこれからは読みやすい記事を書くことも意識していきたい。