不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

paizaラーニング『Webアプリ開発入門 Servlet/JSP編1: JavaでWebアプリケーションを作ろう (全10回)』を受講してみた

2021-04-04 23:14:24 | paiza

『Webアプリ開発入門 Servlet/JSP編1: JavaでWebアプリケーションを作ろう (全10回)』


とうとうこの講座を受ける前に、6ヶ月の期限が来てしまった。
前回までのアルゴリズム入門編もかなり駆け足でやったから、
あんまり身にはなっていないだろうな。

これでとりあえずpaizaの契約は解除しよう。

一応、この講座のレッスン1はすべて無料だから、これだけは受けておくかな。

そうだった!?無料だと倍速ができないんだった。
倍速でやってきたから、やたら遅く感じるな😅 

それと、このレッスンを自分の環境で試す場合には、
Tomcatをインストールする必要がある。
たぶん、以下のサイトが分かりやすいので、試してみる。
うん、たぶんなんかできた気がする。
とりあえず/opt/tomcatというディレクトリに一式インストールされてるし、
sudo /opt/tomcat/bin/startup.shでサーバーが起動してるしな。

イマイチまだサービスの登録とかよくわかんないけど、
Ubuntu起動時にスタートアップさせるかどうか、ってことだろうな。

だから、自分の意志で起動と停止をコントロールするため、
/opt/tomcatを/home/{$USER}にコピーして、
コピー先の所有者を{$USER}に変更しておいた。

あとは、このコピー先のtomcatに対して、編集とか起動とかやっていこう。

メモ

#01:Webアプリの初歩を理解しよう

#02:Tomcatを呼び出してみよう

  • Tomcatの起動と停止
    • 起動
      $ tomcat/bin/startup.sh
    • 停止
      $ tomcat/bin/shutdown.sh
  • Tomcatへのアクセス
    http://(ドメイン):8080/

#03:Hello Worldをコンパイルしよう

  • サーバー上で動作するHelloWorld
    tomcat/webapps/mywork/HelloWorld.java
  • コンパイル操作
    $ javac -classpath "../../lib/servlet-api.jar" HelloWorld.java

#04:ServletでHello Worldを出力しよう

  • Servletの配置ディレクトリ
    /tomcat
     /webapps
      /mywork
       HelloWorld.java (ソースコード)
       /WEB-INF
        web.xml
        /classes
         HelloWorld.class   (クラスファイル)
    • ↑WEB-INFは、サーバーから呼び出せるが、ユーザーからはアクセスできない。WEB-INFの上位のディレクトリは、ユーザーが直接アクセスできるので、ソースコードは上記の位置に残さないようにする。
  • web.xmlを作成する
    tomcat/webapps/mywork/WEB-INF/web.xml
  • 配置先を指定してコンパイルする
    $ javac -classpath "../../lib/servlet-api.jar" -d WEB-INF/classes HelloWorld.java
  • ブラウザからServletを呼び出す

#05:ルーティングを理解しよう

  • サーバー上で動作するHelloServletの作成
    tomcat/webapps/mywork/HelloServlet.java
  • web.xmlで、複数のアドレスを割り当てる
    tomcat/webapps/mywork/WEB-INF/web.xml

#06:JSPで表示しよう

  • JSP(JavaServer Pages)とは
    Webアプリケーションで出力するHTMLのテンプレート
    • HTMLの中にJavaコードを記述できる
    • Webページとして出力
  • JSPによるサンプルプログラム
    mywork/HelloTemplate.jsp
    • <%@ page language="java" ~ %>
  • JSPの実行方法
    JSPのコンパイルは、Tomcatが自動的に行うので、ブラウザからアクセスするだけで結果を表示することができる。

#07:ServletからJSPを呼び出そう

  • ServletとJSPを連携させることで、Webアプリケーションの制御部分と表示部分を分けることができる。
  • Servlet/JSPの配置ディレクトリ
    tomcat/
    - webapps/
     - mywork/
      - HelloWorld.java (ソースコード)
      - ShowTemplate.java
      - WEB-INF/
       - web.xml
       - classes/
        - HelloWorld.class (クラスファイル)
        - ShowTemplate.class

       - views/
        - index.jsp   (JSPファイル)
  • JSPを呼び出すServletの作成
    tomcat/webapps/mywork/ShowTemplate.java
  • Servletをコンパイルする
    javac -classpath ~
  • web.xmlの修正
    tomcat/webapps/mywork/WEB-INF/web.xml
  • ブラウザからServletを呼び出す

#08:JSPの書き方を理解しよう

  • JSPタグの種類
    - <%@ %> JSPの宣言(ディレクティブ)
    - <%! %> 変数やメソッドの宣言
    - <%= %> 式の評価結果を出力
    - <% %> コードを実行
    - <%--  --%> コメント
  • ServletからJSPにデータを渡す
    • tomcat/webapps/mywork/ShowTemplate.java
      • request.setAttribute("message", "Hello World!");
    • tomcat/webapps/mywork/WEB-INF/view/index.jsp
      • <% String message = (String)request.getAttribute("message");%>

#09:具体例:RPGの行動選択メニューを作ろう その1

  • web.xmlの修正
    tomcat/webapps/mywork/WEB-INF/web.xml
    • /menu
  • メニューのServlet
    • tomcat/webapps/mywork/Menu.java
    • Servletのコンパイル
  • メニューのJSP
    • tomcat/webapps/mywork/WEB-INF/view/menu.jsp
  • アクセス

#10:具体例:RPGの行動選択メニューを作ろう その2

  • web.xml
    tomcat/webapps/mywork/WEB-INF/web.xml
    • /walk
  • 「あるく」画面のServlet
    tomcat/webapps/mywork/Walk.java
    • Servletのコンパイル
  • 「あるく」画面のJSP
    tomcat/webapps/mywork/WEB-INF/view/action.jsp

認定証

半年に亘るpaizaでのオンライン学習もひとまずこれで終了だな。
長かった😭 
ちょっともう後半きつかったな〜😩 


学習ステータス


特に変化なし

今後の予定

あとはまぁ、無料のC#入門編やるかどうかだな。
てか今度の仕事C#やるからほぼ必修なんだけど😅 
でも他のテキストで勉強してもいいしな。
等倍の動画って眠くなるしな〜😴 

paizaラーニング『アルゴリズム入門編: 「巡回セールスマン問題」を学ぶ (全8回)』を受講してみた

2021-03-31 22:39:54 | paiza

『アルゴリズム入門編: 「巡回セールスマン問題」を学ぶ (全8回)』


メモ

#01:巡回セールスマン問題とは?

#02:入力データの形式を確認し、プログラムの枠組みを考えよう

  • 設計

#03:2次元平面上の点を扱おう

  • Pointクラス:整数座標を表す
  • java.awt.Pointの使い方
    • import java.awt.Point;
    • Point p = new Point(x,y)
  • 2点間の距離の計算
    • Pointクラスのdistanceメソッド

#04:2次元平面上の経路を扱おう

  • 経路の距離
  • 経路の表示

#05:ロジックを変数、関数・メソッドで整理しよう 

  • tsp関数の作成

#06:入力処理を作ろう

  • ループによる入力処理

#07:貪欲法を考えよう

#08:貪欲法で解いてみよう

  • 学びを深めるためのキーワードの紹介
    • 本レッスンでは、貪欲法による最近傍(Nearest Neighbor)法と呼ばれるアルゴリズムについて学んできた。
      巡回セールスマン問題の貪欲法のアルゴリズムは他にもいくつか有名なものがあり、特に近傍挿入法(Nearest Insertion)法が有名。
    • 2-opt法や3-opt法などのk-opt法は、実装が比較的簡単な、巡回セールスマン問題の局所解探索アルゴリズム。
    • 焼きなまし法やタブーサーチなどの局所解探索アルゴリズムとして有名な手法。
    • 厳密な解の求め方としては、ビット列を利用した動的計画(DP)法による解法が15頂点程度までのデータに対して、現実的な時間で解を求められることが知られている。
    • また、整数計画法と分枝限定法を組み合わせた手法では、より多くの頂点をもつデータに対して厳密解を求めることができる。

認定証



学習ステータス


最終的なジョブは、一流女剣士のままだったな

paizaラーニング『アルゴリズム入門編: 「ハノイの塔」を学ぶ (全10回)』を受講してみた

2021-03-31 21:20:20 | paiza

『アルゴリズム入門編: 「ハノイの塔」を学ぶ (全10回)』


メモ

#01:ハノイの塔の問題を理解しよう

#02:ハノイの塔のデータ構造を考えよう

  • 変数の用意と初期化メソッド、printメソッドの作成

#03:1つの円盤を動かす処理

  • 円盤を動かすメソッドの作成

#04:円盤が1枚、2枚、3枚のときの解法を考えよう

  • 1つ1つ指定して移動。

#05:一般的な解法を考えよう

  • 再帰呼び出しを使う方法

#06:再帰で実装する

  • 再帰呼び出しの実装
※ なぜそうなるのかよく分からんが、たった数行でハノイの塔が解けるなんて!?😲 
ここで、ジョブが進化

#07:カウントを追加する

  • カウントを追加

#08:円盤の移動回数を調べる

  • 円盤の枚数と移動回数
枚数移動回数
11
23
37
415
531
※ 前回の移動回数×2+1の関係だな
  • 移動回数=2^n-1

#09:特定のステップの状態を表示する

  • 指定したステップの状態を表示

#10:まとめて移動して、再帰を省略

  • 再帰処理を減らして、円盤が多くても対応

認定証



学習ステータス


なんか文字が表示された状態でスクショされちゃったな😅 

paizaラーニング『アルゴリズム入門編: FizzBuzzとフィボナッチ数を学ぶ (全7回)』を受講してみた

2021-03-30 23:49:14 | paiza

『アルゴリズム入門編: FizzBuzzとフィボナッチ数を学ぶ (全7回)』


ちょっと始めるのが遅くなってしまった。
せめてこの2講座を明日(3/31)の午前0時までに修了することはできるだろうか?

メモ

#01:FizzBuzz問題に挑戦しよう

#02:FizzBuzz問題を改良しよう

  • FizzBuzzのプログラムを少し違う方法で作成する
※ このチャプターの演習課題を終了するとジョブが進化。

#03:フィボナッチ数に挑戦しよう vol.1 - シンプル編

#04:フィボナッチ数に挑戦しよう vol.2 - 配列編

  • 途中の計算結果を配列に格納しておく。
※ このチャプターの演習課題を終了するとジョブが進化。

#05:フィボナッチ数に挑戦しよう vol.3 - シンプル再帰編

  • シンプルな再帰を使う。
    → 負荷が大きい。

#06:フィボナッチ数に挑戦しよう vol.4 - 再帰1回編

  • 再帰呼び出しの回数を2回から1回に減らす
※ このチャプターの演習課題って普通に解けるものなのか?

#07:フィボナッチ数に挑戦しよう vol.5 - ビネの公式編

  • ビネの公式を使う
  • 使った関数
    • べき乗:Math.pow(基数, n)
    • ルート:Math.sqrt(数値)
    • 切り捨て:Math.round(数値)

認定証

思いの外、てこづってしまった!?😅 


学習ステータス




paizaラーニング『Java入門編10:例外処理を理解しよう (全13回)』を受講してみた

2021-03-29 22:59:38 | paiza

『Java入門編10:例外処理を理解しよう (全13回)』


メモ

#01:例外処理の概要を理解しよう

  • 実行時エラーに対応するのが、例外処理。
  • 例外処理(Exception)の機能
    • try:あらかじめコードを指定して、プログラム実行時に、処理の問題を検出する
    • catch:問題を検出した時、どのように対応するか記述しておく
    • throws:対応を記述していない場合、メソッドの呼び出し元に対応を任せる
  • 例外が発生する例(コンパイルエラーなし)
    - ゼロで割り算
    - 配列の範囲外アクセス
    - ファイルが存在しない
    - オブジェクトがnull
    - 引数が不正
  • 例外が発生する例(コンパイルエラーあり)
    • 以下の処理を行う場合は、必ず例外処理を記述する。
      - ファイルの読み書き
      - ネットワークにアクセス
      - データベースにアクセス
      → チェック例外(検査例外)

#02:簡単な例外処理してみよう

  • try-catch-finally
    - try : 例外を捕捉する範囲
    - catch : 例外ハンドラー。例外発生時の対応処理
    - finally : 例外が発生してもしなくても、必ず実行する処理
  • 例外処理 - 0除算
    • try {
       // 実行時エラーが起こりそうな処理
      } catch (Exception e) {
       e.printStackTrace();
      } finally {
       // 必ず実行する処理
      }

#03:いろいろな書式で例外に対応しよう

  • 例外処理のメッセージを「実行時エラー」タブに出力する
    • System.err.println()

#04:発生させる例外を変えてみよう

  • 数値変換の例外
  • 登場した例外
    - Exception すべての例外を捕捉する
    - ArithmeticException ゼロ除算など、不正な算術計算で発生する例外
    - NumberFormatException 数値変換する文字列が不正な形式の時に発生する例外
    - ArrayIndexOutOfBoundsException 配列の範囲外にアクセスする例外

#05:複数の例外を捕捉してみよう

  • 複数の例外に対応するコード
    • try {
      } catch (NumberFormatException e) {
      } catch (ArithmeticException e) {
      } catch (Exception e) {
      } finally {
      }

#06:具体例:標準入力でプレイヤーを選択する

  • 具体例:標準入力でプレイヤーを選択するプログラム

#07:throwで意図的に例外を投げよう

  • throwで直接例外を投げる

#08:テキストファイルを読み書きしよう

  • 必要なライブラリのインポート
    • import java.io.*;
      import java.util.*;
  • ファイルの用意
    • File file = new File("test.txt");
  • テキストファイルを書きこむ(上書き)
    • FileWriter filewriter = new FileWriter(file);
      filewriter.write("Hello world\n");
      filewriter.write("Hello Java\n");
      filewriter.close();
  • テキストファイルを1行ずつ読み込む
    • Scanner scan = new Scanner(file);
      while (scan.hasNextLine()) {
       String line = scan.nextLine();
       System.out.println(line);
      }
      scan.close();

#09:ファイルアクセスに例外処理を追加しよう

  • ファイル読み書き + 例外処理
    • throws IOExceptionを削除するとコンパイルエラー
  • FileNotFoundException ファイルが存在しない場合の例外

#10:ファイルアクセスにtry-with-resourcesを使おう

  • ファイルアクセス + try-with-resources
    • 書き込み:try (FileWriter filewriter = new FileWriter(file)) {
    • 読み込み:try (Scanner sc = new Scanner(file)) {

#11:例外クラスのクラス構成を理解しよう

  • 例外オブジェクトの親子関係のサンプル
    Exception ← RuntimeException ← IllegalArgumentException ← NumberFormatException
  • 例外関連クラスの種類
    • Throwable
      エラーと例外のスーパークラス
    • Exception
      チェック例外/検査例外(プログラム内で捕捉が必要)
    • RuntimeException
      非チェック例外/実行時例外(プログラム中で捕捉は任意)
    • Error
      致命的な問題が発生し、実行を継続できない問題を表す。
  • 主なチェック例外:Exception
    • IOException
      ファイルやネットワークなど入出力の問題を検出
    • FileNotFoundException
      ファイルが開けなかったことを検出。IOExceptionのサブクラス
    • SQLException
      データベースアクセスの問題を検出
  • 主な非チェック例外
    • ArithmeticException
      ゼロ除算などの算術計算の問題を検出
    • NumberFormatException
      数値変換時に文字が与えられたことを検出。IllegalArgumentExceptionのサブクラス
    • ArrayIndexOutOfBoundsException
      配列の範囲外アクセスを検出

#12:throwsで例外処理を呼び出し元に任せよう

  • throwsで、例外対応を呼び出し元に任せる

#13:throwとtry-catchで再スローしよう

  • throwとtry-catchを組み合わせる再スローについて学習する。
    • 再スローでは、メソッドのcatchブロックの中から、受け取った例外を呼び出し元にスローする。そのおかげで、捕捉した例外を、catchのところで出来るだけ対応して、残りの作業を呼び出し元に任せることができる。

認定証

やっぱり例外の勘所がつかめないな〜😕 
チェック例外だったら、ちゃんと記述しておかないとコンパイルエラーなるらしいから、なんとかなるかもしれないけど。



何はともあれ、Java入門編もこれですべて修了だな。
契約期間も残り2日!?
さて、あと何個の講座を受けられるか?
全部終わらなかったとしても、とりあえず今月で解約して、
あともう1ヶ月単発で契約してみるかな?

まだ、受講していない講座はこんな感じかな?

学習ステータス


おぉ〜、なんか奇跡の騎士、かっちょえ〜😍 
アップの写真も載せとこう。