[資格] [Java] Oracle Java SE11 Silver 認定資格 合格しました!黒本だけでOK!!

f:id:WaterFalls:20210404201459j:plain

下記のエントリーに書いてから3週間で取得できました。
(実際は2週間だったけど受験会場を確保できなくて+1週間かかりました。。)
[書籍] [Java] [資格] Java Silver SE 11 認定資格 に挑戦してみる - 1分技術ブログ


Oracle Java SE11 Silver に合格したので簡単なTips。

大事なこと

  • 勉強は黒本だけでOK!!基本ができていれば2週間!!
  • 受験会場は早めに確保すること!!2,3週間先になるので注意!!
  • 再受験無料キャンペーンをやってるかチェック!!

Tips

勉強方法

Javaに限らず型について、オブジェクト指向についての基本的なことがわかっていれば
黒本(徹底攻略Java SE 11 Silver問題集)だけで問題なし。
Javaやプログラミング初心者はやさしいJavaなどの書籍で基本から学んだ方がいいです。たとえ黒本をみっちり覚えてテクニカルな手段で資格を取れたとしてもJavaの能力は身に付きません。)
全体を2周、12章と13章の総仕上げ問題を3周(9割回答できるくらいまで仕上げる)すればOK!
実際のテストにほぼ同じ問題が何問もでます笑
1日1時間、週7時間の2週間で合計14時間もあれば合格できます。

Oracleのサイトにサンプル問題(SE8)もあるけど気分転換に眺めるだけでいいかな。

SE8 サンプル問題: Sample_1Z0_808_JavaSE8Silver

紫本やスピードマスターは必要ないです。

受験申込

黒本で仕上げてから週末に受験しようとしても受験会場を確保できない(空きがない)ので早めに確保を!!!
都内の会場では週末が3週間先まで埋まってました。。仕方なく大宮会場を。それでも1週間後でした泣

ちなみに受験申込はOracleアカウント作って、CertViewにログインして、とめちゃくちゃ面倒くさいです。
名前はローマ字じゃないとダメとか色々あるので他の方がまとめた受験方法をよく見ながら申し込んでください。

キャンペーン有無

私が申し込んだ時は2020/12/1 ~ 2021/5/31に申し込めば、たとえ落ちても再受験料が1回まで無料になるキャンペーンをしてました。

Oracle :: ピアソンVUE

これは精神的に本当に助かった!!!!
受験料が32,340円もするので失敗を恐れてこのキャンペーンがなかったらスピードマスターも購入していたと思う。
でも、もっと早くに知っていれば黒本周回する前に受験会場を確保して2週間目で受験できてましたね。

問題内容

黒本に目を通していればわかるけれど、基本的な文法などを理解している前提での重箱の隅をつついたような問題ばかりがでます。
プログラミング初心者はまずは基本的な部分を理解してから挑戦することをおすすめします。
逆に業務で経験があってもIDEが勝手にやってくれた部分やコーディング規約上そんなコードは書かねぇよ(アクセス修飾子を省略するなど)って問題が頻出するので黒本は必須です。
問題内容について:

  • ラムダ式は1問程度しか出題されないので苦手なら捨ててよい(Consumer,Supplier,Predicate,Function程度)
  • モジュールシステムも何問か出題されるが黒本の内容を超えることはないので黒本部分の理解のみで問題ない
  • APIも出題数は少ないし、無勉でも対応できる内容
  • 上記以外の黒本範囲はまんべんなく出題されるので黒本をしっかりと解くこと
  • 最悪、黒本の出題内容と答えを暗記するだけでもぎり合格点に届くかも笑

最後にもう一度。
黒本を買いましょう笑

[書籍] [Java] Javaによる関数プログラミング ~ Java 8ラムダ式とStream

対象書籍

書籍:Javaによる関数プログラミング Java 8ラムダ式とStream

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

  • 作者:Venkat Subramaniam
  • 発売日: 2014/10/24
  • メディア: 単行本(ソフトカバー)

読んで、一部を写経。

目的

C#LINQは使ったことがあるがJavaでのラムダ式は経験がなかったので勉強のため。

感想

箇条書きで。

良い点

  • 命令型ではなく関数型プログラミングを使うメリットが理解できる
    • 単純に「コードが短い=可読性が高い」のような雑な説明ではなく、なぜコードを短くできるのか、なぜ可読性が高いのかを説明してくれている
    • mutable(可変)変数ではなくimmutable(不変)変数を使う利点
  • Stream、基本的な関数型インターフェイル(Consumer,Supplier,Predicate,Function)にそれなりのページを割いて説明をしている
  • デザインパターンに対してラムダで置き換えることができることを説明している
  • ラムダの取っ掛かりの学習用として優れいていると思う。

悪い点

  • 言葉での説明がほとんどでコード量は少ないので写経して理解するには不向き
  • 書籍に記載されているコードは一部抜粋なのでそのまま写経してもコンパイルできない
    • webより全コードをダウンロードできるので書籍で省略されている部分はそこから掬い取れるが。。
  • ラムダを現場で使えるレベルになるには本書だけでは不十分
    • コードの反復練習が必要

[Python] 定期的にマウスカーソルを動かしてスクリーンセイバーの起動やスリープを防ぐツール

機能

定期的にマウスを動かす&「Ctrl」入力をしてスクリーンセイバーの起動防止、スリープ回避やアプリのログイン状態を維持させます。
マウスだけだとスクリーンセイバーが起動したので「Ctrl」入力もさせています。
コードとexeファイルは以下に。
Python未インストール環境でも使えるようにexe化してます

github.com

動機

このtogetherがツール作りの動機に笑
在宅勤務中、「5分間マウスカーソルが動かないと休憩しているとみなし、勤務時間が減らされる」という会社があるらしい - Togetter

Skype for Businessのプレゼンス状態に対応できてるかなど
スクリーンセイバー以外にも対応できているのがあれば教えてもらえると嬉しいです!

コード

マウス操作するためにpyautoguiモジュールを使ってます。

#!python3
import pyautogui

# constants
MOVE_DISTSANCE = 60

# method
pyautogui.PAUSE = 2
pyautogui.FAILSAFE = True

def main():
    """main process
    """
    # 画面中央に移動
    screen_pos = pyautogui.size()
    center_x = screen_pos.width / 2
    center_y = screen_pos.height / 2
    pyautogui.moveTo(center_x,center_y)

    try:
        x,y = pyautogui.position()

        while True:
            pyautogui.moveTo(x, y + MOVE_DISTSANCE, duration=0.2)
            pyautogui.moveTo(x - MOVE_DISTSANCE, y + MOVE_DISTSANCE, duration=0.2)
            pyautogui.moveTo(x - MOVE_DISTSANCE, y, duration=0.2)
            pyautogui.moveTo(x, y, duration=0.2)
            pyautogui.press('ctrl')

    except KeyboardInterrupt:
        print('end')


if __name__ == "__main__":
    print('start')
    print('停止するにはマウスを画面の四隅に移動するか')
    print('コマンドプロンプト上でCtrl+Cを入力してください(2回入力したほうがいいかも)')
    main()



[Eclipse] 個人的によく使うショートカットキー一覧(Windows)

内容

WindowsEclipseショートカットキーの個人的メモ

機能 ショートカット 補足
前の操作に戻る/進む Alt + ←/→
コメント追加/削除 Ctrl + /
プロジェクト内検索 Ctrl + h プロジェクト内検索は「ファイル検索」
補完呼び出し Ctrl + space 加えて、private Hoge(Hogeのあとにスペースがいる)まで入力してCtrl + spaceでhoge変数名を表示してくれる
クイックフィックス Ctrl + 1 クラス新規作成などできる。
テスト側で暫定クラス名を用意してクラス生成など。
importの自動生成も対象(赤文字)に対してQFを呼び出す
新規ユニットテスト作成 Ctrl + 9 すでにテストクラスがある場合はテストクラスとクラスの表示切替、そうでない場合はテストクラス新規作成ウィザード表示
実行 Ctrl + F11 JUnitも可能
デバッグ実行 F11 JUnitも可能
クラスやメソッドコメント挿入 Alt + Shift + j
クラス作成 Ctrl + n ウィザードが開く
リソースを開く Ctrl + Shift + r クラス名などを検索して飛ぶ
型を開く Ctrl + Shift + t 型名を検索して飛ぶ
宣言を開く F3 該当のメソッドなどに飛ぶ
型階層を開く (該当のメソッドなどにカーソルを合わせて)Ctrl + t 抽象メソッドから具象メソッドを探したい場合に使う
宣言や実装などを選択して開く Ctrl を押下しながらマウスホバー F3やCtrl + tのいいとこどり
矩形選択 Shift + Alt + a マウスカーソルが十字にかわり矩形選択モードに。解除はもう一度同じキーを。
下に1行追加 Shift + Enter カーソルが行末になくてもOK
上に追加する場合はCtrl + Shift + Enter
検索窓などを閉じる (開いている状態で)esc

参考

以下を参考にさせてもらいました。

開発効率UP!Java開発者が使いこなすべきEclipseの便利ショートカットまとめ - Qiita

Eclipse + Quick JUnit Plugin ショートカット一覧メモ (Windows) — Eclipse Cheat Sheet 0.1 documentation

新人研修でドヤ顔で披露したらウケたEclipseのショートカット集 - Qiita

[Java][Eclipse] Eclipse上でJUnit 4 テスト実行時にNoClassDefFoundErrorが発生し失敗する

環境

内容

Eclipse上で簡単なテストクラスを作ってJUnitテストを実行したら
下記のNoClassDefFoundErrorが発生する現象があり少々はまったので
対応策を備忘録として記載。

java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:315)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadTestLoaderClass(RemoteTestRunner.java:381)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:371)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:366)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:310)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:225)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: java.lang.ClassNotFoundException: org.junit.runner.manipulation.Filter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 8 more

対応策

おそらく本現象が発生している場合、
プロジェクト(右クリック) > Javaのビルド・パス > ライブラリータブ >
で以下のようにモジュールパス配下にJUnit4が入っているはず f:id:WaterFalls:20210308164217j:plain
これをクラスパス配下に変更する。 f:id:WaterFalls:20210308164415j:plain おそらく問題なくJUnitが動作するはず。



テスト駆動開発

テスト駆動開発

[書籍] [Java] [資格] Java Silver SE 11 認定資格 に挑戦してみる

目的

Java Silver SE 11に挑戦の記録。

経歴

業務でのJava経験は6年前にSpring FrameworkJava:SE 7)を使用してWEBアプリケーションを1年間実装していたのみ。

勉強方法調査

  • 黒本
    Javaの経験者などは黒本がいいらしい。

徹底攻略Java SE 11 Silver問題集[1Z0-815]対応

徹底攻略Java SE 11 Silver問題集[1Z0-815]対応

  • 作者:志賀 澄人
  • 発売日: 2019/10/18
  • メディア: 単行本(ソフトカバー)


  • スピードマスター
    時間とお金に余裕があれば仕上げにスピードマスター問題集もありとのこと。


  • 紫本
    黒本で難易度が高いと感じた場合は紫本。黒本より初心者向けらしい。

[Python] Python + Pytest ( + VS Code) テスト環境構築

内容

Python + PyTest ( + VS Code) で動作する最低限のテスト環境。
単純なクラス(calc.py)とFizzBuzzfizzbuzz.py)を対象としたテストコードを用意。
コードは以下にアップ。

github.com

必須

pytestが必要なのでインストールしてください。

pip install pytest

実行方法

Windowsであればコマンドプロンプトを開き該当プロジェクトのルートに移動してpytestコマンドを実行する。

cd c:\workspace\python\pytest_demo
pytest

ディレクトリ構成

.
│  fizzbuzz.md
│  LICENSE
│  pytest.ini
│  README.md
│  requirements.txt
│  
├─.vscode
│      launch.json
│      
├─src
│  │  calc.py
│  └─fizzbuzz.py
│          
└─tests
    │  test_calc.py
    │  test_fizzbuzz.py
    └─__init__.py

補足説明

  • ./pytest.ini
addopts = -v --capture=no

caputure=no はプログラム中のprint出力をpytest時に表示させるために必要。

  • ./tests/__init__.py

test_***.pyがある階層に必要。内容は空でよい。

"cwd": "${workspaceFolder}",
"env": {"PYTHONPATH": "${cwd}"}

VS Codeからtest_**.pyを実行(F5)時にModuleNotFoundErrorが発生する。
この設定がない場合は以下の長いコードをテストモジュール全てに書く必要がある。

import os
import sys
sys.path.append(os.path.abspath(os.path.dirname(os.path.abspath(__file__))[1]))
from src.calc import Calc

設定があれば以下でOK

from src.calc import Calc