スッキリわかるJava入門3①

変数宣言が必要

int test; test = aaa;

public class Main {
  public static void main(String[] args) {
    int age;
    age = 30;
    System.out.println(age);
  }

}

金額計算に関して

float やdouble を使用してはいけない。 厳密な計算ができずチリツモで大きな誤差になる。

文字(列)の引用符について

文字の場合はシングル 文字列の場合は二重引用符

初期化

int age = 20;

定数化する場合

finalを使う

public class Main {
  public static void main(String[] args) {
    final double PI = 3.14;  😘定数には大文字を使用する
    int pie = 5;
    System.out.println("半径" + pie + "cmのパイの面積は、");
    System.out.println(pie * pie * PI);
    System.out.println("パイの半径を倍にします");
    PI = 10;
    System.out.println("半径" + pie + "cmのパイの面積は、");
    System.out.println(pie * pie * PI);
  }
}

エスケープシーケンス

これを使う

評価の順番

=演算子は右から
+演算子は左から

前置か後置インクリメントで気をつけないといけないこと

Javaプログラミング ~陥りやすいミス①~ | エンジニア入門・未経験者のLAブログ

型変換について

小→大への変換は自動的に行なってくれる。

文字列の比較

文字列型の変数.equals(比較相手の文字列) ==ではないことに注意すること

九九の計算

public class Main {
  public static void main(String[] args) {
    for (int i = 1; i < 10; i++) {
     for (int j = 1;j < 10;j++) {
       System.out.print(i * j);  // 掛け算の結果を出力
       System.out.print(" ");    // 空白を出力
     }
     System.out.println("");     // 改行を出力
    }
  } 
}

jのループが終わったらiのループが進む。

配列等の違い

JavaエンジニアのためのRuby入門 - Qiita

Ruby文法

x = false
unless = x
    puts "unless: xはfalseです"
end

条件→満たされない。 条件が満たされないときunlessは実行されるので puts "unless: xはfalseです"が実行される。

x = false
if !x 
    puts "if: xはfalseです"
end

条件→満たされる。 条件が満たされるときifは実行されるので puts "if: xはfalseです"が実行される。

  • !xはtrueとfalseを反転させる*
  • ifの条件のルールはnilやfalse以外は条件を満たす

どんな時に使えるのか? qiita.com

rbenvを用いて最新バージョンにアップする

本日の時点でrubyの最新版は2.6.5

www.ruby-lang.org

前提

Homebrewとrbenvはすでにinstall済み

手順

~ $ rbenv versions
  system
  2.3.7
* 2.6.4 (set by /Users/mackxxx/.ruby-version)

~ $ brew update
Updated 1 tap (homebrew/core).
==> New Formulae
detekt             dune               gnirehtet          krew               skymaker           texlab
diesel             fastlane           imgproxy           powerline-go       terrahelp
==> Updated Formulae

==> Deleted Formulae
aap                bubbros            curlish            docker-cloud       muttils            shocco
archivemail        bzr-fastimport     cvs2svn            euca2ools          nicotine-plus      tnote
borg               closure-linter     ddar               ino                php@7.1
~ $ brew upgrade ruby-build
==> Upgrading 1 outdated package:
ruby-build 20190828 -> 20191205
==> Upgrading ruby-build 
==> Downloading https://github.com/rbenv/ruby-build/archive/v20191205.tar.gz
==> Downloading from https://codeload.github.com/rbenv/ruby-build/tar.gz/v20191205
######################################################################## 100.0%
==> ./install.sh
🍺  /usr/local/Cellar/ruby-build/20191205: 464 files, 231KB, built in 6 seconds
Removing: /usr/local/Cellar/ruby-build/20190828... (454 files, 227.4KB)
==> Checking for dependents of upgraded formulae...
==> No outdated dependents to upgrade!
==> Checking for dependents' broken linkage from upgraded formulae...
==> No broken dependents found!

~ $ rbenv install --list
...

Available versions:
 2.6.4
 2.7.0-dev
 2.7.0-preview1
...

問題発生

$ rbenv install --listに2.6.5が存在しない...

rbenv pluginを利用していたようなので下記コマンドが必要でした。 pluginバージョンが優先されるようです。

$ cd ~/.rbenv/plugins/ruby-build 
$ git pull origin master

参考

nafuruby.hatenablog.com

最新版をインストール

~ $ rbenv install 2.6.5

インストールされているか確認

~ $ rbenv versions
  system
  2.3.7
* 2.6.4 (set by /Users/mackxxx/.ruby-version)
  2.6.5

Git復習

ローカルブランチを削除する

$ git branch -d

ローカルブランチ名を変更

$ git branch -m 変更前 変更後

git fetch とは

  • リモートのコピーをローカルにダウンロードするものでリモートに影響を与えない。

git merge とは

  • 今いるブランチに別のブランチの内容を結合し履歴を残す。

git rebaseとは

  • rebase前とrebase後では内容は一緒でも、1個前の親コミットとコミットIDが変更される。
  • 取り込みたいブランチに今のブランチの内容を上乗せするイメージ。

git pull --rebaseとは

  • git pull は fetch + merge
  • git pull -rebase はfetch + rebase
  • --rebaseある無しに関わらず作業ブランチに最新の master を取り込むことができる。

実践したもの

qiita.com

ためになったサイト

qiita.com

kray.jp

感想

git mergegit pull --rebase はどちらも一長一短であり プロジェクトごとに変わるのかなと思いました。

nginx で SSL 対応サイトを作る

Let’s EncryptSSL証明書取得

SSL証明書は有料で数千のものから数十万のものまであるみたいです。「Let's Encrypt」ですと無料で取得できる そうなのでこれを使っていきます。

  • certbotをインストールする
$ sudo apt-get install certbot

オプションの意味について

参考 sig9.hatenablog.com

sudo certbot certonly --webroot -w demo/public_html/www.mackxxx.site/public/ -d www.mackxxx.site

...

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.mackxxx.site/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.mackxxx.site/privkey.pem

...

/etc/letsencrypt/live/www.mackxxx.site/に以下のファイルが作成されたのを確認します。

$ sudo ls /etc/letsencrypt/live/www.mackxxx.site

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

2つ目のserver{ 以下を追加します

$ sudo cat www.mackxxx.site
server {
        listen 80;
        server_name www.mackxxx.site;
        access_log /home/mackxxx/demo/public_html/www.mackxxx.site/log/access.log;
        error_log /home/mackxxx/demo/public_html/www.mackxxx.site/log/error.log;
        location / {
                root /home/mackxxx/demo/public_html/www.mackxxx.site/public/;
                index index.html index.php;
                }
        }

server {
    listen 443 ssl;
    server_name www.mackxxx.site;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.mackxxx.site/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.mackxxx.site/privkey.pem;
    location / {
        root /home/mackxxx/demo/public_html/www.mackxxx.site/public/;
        index ssl-index.html index.php;
        }
    }  
  • 今回はhttpとhttpsで別のページを表示するので /home/mackxxx/demo/public_html/www.mackxxx.site/public/;以下に表示させるssl-index.htmlを追加します。

  • 最後に再起動して正しくページが表示するか確認します

$ sudo /etc/init.d/nginx stop  
$ sudo /etc/init.d/nginx start  

Virtual Hostで複数ドメインを設定する

お名前.comにてドメインを取得する

f:id:shiness:20191205123039p:plain

f:id:shiness:20191205125028p:plain

以下は下記を参考に進める。

blog.goo.ne.jp

今回はmack.sitewww.mack.siteをアクセスした際に別のindex.htmlを表示させるのがゴール

 注意事項

  • 下記箇所の書き方の意味を理解できず同じように記述してしまい、mack.sitewww.mack.siteで別のページを表示することができず。 この記述はwww.nikukyu.clubnikukyu.clubで同一のページを表示させるときの設定であることに気づきました。
server {
   listen 80;
   server_name www.nikukyu.club;
   access_log /home/demo/public_html/nikukyu.club/log/access.log;
   error_log /home/demo/public_html/nikukyu.club/log/error.log;
   location / {
        root /home/demo/public_html/nikukyu.club/public/;
        index index.html index.php;
        }
   }
server {
   listen 80;
   server_name nikukyu.club;
   access_log /home/demo/public_html/nikukyu.club/log/access.log;
   error_log /home/demo/public_html/nikukyu.club/log/error.log;
   location / {
        root /home/demo/public_html/nikukyu.club/public/;
        index index.html index.php;
        }
   }

access_log /home/demo/public_html/nikukyu.club/log/access.log;これらのディレクトリの設定はきちんと自分の環境で試さないと エラーが必ず出ます。その際はnginx -t コマンドで確認すると分かりやすいです。

私の実行環境では access_log /home/mackxxx/demo/public_html/mackxxx.site/log/access.log;でした。ハマりました。

$ sudo ln -s /etc/nginx/sites-available/mackxxx.site /etc/nginx/sites-enabled/mackxxx.site
$ sudo ln -s /etc/nginx/sites-available/www.mackxxx.site /etc/nginx/sites-enabled/www.mackxxx.site
$ sudo ls -l 
$ sudo unlink

コマンド例

mackxxx@xxxxxxxx:/etc/nginx/sites-enabled$ ls -l
total 4
lrwxrwxrwx 1 root root  34 Dec  4 01:27 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root  39 Dec  6 16:21 mackxxx.site -> /etc/nginx/sites-available/mackxxx.site
-rw-r--r-- 1 root root 305 Dec  6 23:58 www.mackxxx.site
mackxxx@xxxxxxxxx:/etc/nginx/sites-enabled$ sudo unlink www.mackxxx.site

sites-enabledのところでls-laコマンドでシンボリックリンクが作成されているかどうか確認できます。

mackxxx@xxxxxxx:/etc/nginx/sites-enabled$ ls -la
total 8
drwxr-xr-x 2 root root 4096 Dec  7 00:13 .
drwxr-xr-x 8 root root 4096 Dec  4 01:27 ..
lrwxrwxrwx 1 root root   34 Dec  4 01:27 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root   39 Dec  6 16:21 mackxxx.site -> /etc/nginx/sites-available/mackxxx.site
lrwxrwxrwx 1 root root   43 Dec  7 00:13 www.mackxxx.site -> /etc/nginx/sites-available/www.mackxxx.site

よく使うコマンド

設定ファイルをいじった後はこれをしないと設定が反映されません。

$ sudo /etc/init.d/nginx stop # nginxをストップ  
$ sudo /etc/init.d/nginx start # nginxを起動  

telnet続き

GET 

f:id:shiness:20191204010309p:plain

POST

f:id:shiness:20191204010336p:plain

 メモ

  • GETはなにかを取得するときに使う
  • POSTはなにかを新しく登録するときに使う(POSTリクエストで変更すると漠然と思っていました..)
  • リクエストボディの長さは、「Content-Length:」という項目で表される。