神奈川J1チームの聖地

今回はこの記事をサッカーでやってみました。

horicun.hatenablog.com

神奈川県のJ1チーム(2016)で同じことをやってみます。

http://horicun.hatenablog.com/entry/2017/06/18/200726:f:id:dokyou3:20170624225437p:plain

聖地はどこだ!

まずは外心を求めてみます。

import math

# yokohama
x1 = 35.510195
y1 = 139.606362
# kawasaki
x2 = 35.593980
y2 = 139.653738
# shounan
x3 = 35.343804
y3 = 139.341233

x_n = (x1 ** 2 + y1 ** 2) * (y2 - y3) + (x2 ** 2 + y2 ** 2) * (y3 - y1) + (x3 ** 2 + y3 ** 2) * (y1 - y2)
y_n = (x1 ** 2 + y1 ** 2) * (x3 - x2) + (x2 ** 2 + y2 ** 2) * (x1 - x3) + (x3 ** 2 + y3 ** 2) * (x2 - x1)
d = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)
x = x_n / (2 * d)
y = y_n / (2 * d)

print(str(x) + "," + str(y))

実行結果がこれ

35.75784648334858,139.26616287535109

googleで調べてみると (・・?)
f:id:dokyou3:20170624233002p:plain

山??

どこだ??

f:id:dokyou3:20170624234201p:plain

神奈川J1チームの聖地が東京に…

しかも結構遠い。。。

というわけで電車の所要時間で聖地を探してみます。

public class App {
	public static void main(String[] args) throws IOException {
		final String chromeDriverPath = "chromedriver";
		System.setProperty("webdriver.chrome.driver", chromeDriverPath);
		WebDriver driver = new ChromeDriver();

		String to[] = { "日産スタジアム", "等々力競技場", "スタジアム平塚" };

		File file = new File("out.csv");
		PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));

		Scanner scanner = new Scanner(new File("station20170403free.csv"));
		scanner.nextLine();
		while (scanner.hasNextLine()) {
			String line = scanner.nextLine();
			String from = line.split(",")[2];
			double la = Double.parseDouble(line.split(",")[9]);
			double lo = Double.parseDouble(line.split(",")[10]);
			if (139.341233 < la && la < 139.653738 && 35.343804 < lo && lo < 35.593980) {
				String writeline = from + ",";
				for (int i = 0; i < to.length; i++) {
					driver.get("https://transit.yahoo.co.jp/search/result?flatlon=&from=" + from + "&tlatlon=&to="
							+ to[i]
							+ "&via=&via=&via=&y=2017&m=06&d=08&hh=17&m2=0&m1=3&type=1&ticket=ic&al=1&shin=1&ex=1&hb=1&lb=1&sr=1&s=0&expkind=1&ws=3");
					WebElement we = driver.findElements(By.className("time")).get(1);
					String text = we.getText();
					String minitus = text.split("(")[1].replaceAll("分)", "");
					writeline += minitus + ",";
				}
				pw.println(writeline);
			}
		}
		pw.close();
	}
}

seleniumはここのサイトを参考にさせてもらいました。
unagi-tabetai.hatenablog.com

で、結果がこんな感じです!

f:id:dokyou3:20170625143241p:plain

ブルーラインの駅が多いです
下飯田駅中田駅の分散が同じなので、平均時間の低い「中田駅」聖地とします!

どんな駅か調べてみました。
https://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Nakada-Sta-2.JPG/1920px-Nakada-Sta-2.JPGf:id:dokyou3:20170625143621j:plain

地下鉄開業前は交通の便が悪いにも関わらず1960年代から宅地開発が進行していた。戸塚駅までの長後街道の慢性的な交通渋滞と不安定なバスの運行に悩まされていた中田地区の住民にとって、地下鉄開業は数十年来の悲願であった。
横浜市郊外部の特徴である農村と新興住宅地の共存が見られる地域である。
(中田駅 - Wikipedia より引用)

ちなみに平均時間だけでみると「横浜駅」がtopでした。
どこ行くのにもやっぱり横浜が便利!


聖地中田駅に今度行ってみようかな。。

Java SE 8 Silver 試験前の勉強で気になったところ その2

前回の続きです。

(前回です)
dokyou3.hatenablog.com

2. リテラル表記

リテラル表記って普通に仕事で書いてる分には、ほとんどコンパイルエラーにならないのでどういう表記がNGか覚えていませんでした。

以下のルールを覚えておくといいでしょう。試験に出ます!

  • アンダースコアはリテラルの先頭と末尾には使えない
  • アンダースコアは記号の前後には使えない

※記号は「L(long型を表す)」「F(float型を表す)」「0b(2進数を表す)」「0x(16進数を表す)」「.」

Java SE 8 Silver 試験前の勉強で気になったところ

少し前にJava SE 8の資格についてブログを書かせて頂きましたが、思いのほか反響があり自分でも驚いています。

dokyou3.hatenablog.com

さらに試験のお役に立てればと思い、勉強時に気になったところを思い出して書いてみます。よかったら参考にしてください。

Silverの勉強した本はこちらです。

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

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

問題集を最初から順番に解いていき、解けなかったところを最後にまとめて再テストするという流れで進めました。では、自分が引っかかったところをピックアップして見ます。

  1. staticインポート

業務で頻繁に使っていましたが、importはIDEが勝手にやってくれるのでちゃんと理解できていませんでした。

staticな変数やメソッドにアクセスするとき、皆さんはどうしていますか?

public class Main {
    public static void main(String[] args) {
        // static メソッド
        String str = String.valueOf(1);
    }

↑のような感じでしょうか。

ちなみにStringのjava.langパッケージはデフォルトで全クラスにインポートされるのでimport文は不要です。valueOfメソッドをstaticインポートすると下記のよう書くことができます。

import static java.lang.String.valueOf;

public class Main {
    public static void main(String[] args) {
        // メソッド名だけでOK
        String str = valueOf(1);
    }

valueOfメソッドを頻繁に使用する時は、Stringを省けるので便利です。

ここ試験に出ます!staticインポートの書式に要注意です。

import static java.lang.String.valueOf;

import の後にstaticです。staticインポートと言っていますが逆なので間違えないでください。
それからメソッド名だけで()や引数は不要です!

staticインポートについては下記の本にも載っています。

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

Gradleでwar

この本を参考にTomcatServletを動かすまでをやってみました。

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

まずは任意のフォルダを作成し、Javaのプロジェクトを作ります。

gradle init --type java-library

そして、build.gradleを書き変えます。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.bmuschko:gradle-tomcat-plugin:2.0'
    }
}


apply plugin: 'war'
apply plugin: 'com.bmuschko.tomcat'


repositories {
    mavenCentral()
}


dependencies {
    providedCompile 'javax:javaee-web-api:7.0'
    compile 'org.slf4j:slf4j-api:1.7.21'
    testCompile 'junit:junit:4.12'

    def tomcatVersion = '8.0.39'
        tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
               "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"
        tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
            exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj'
        }
}

一番上のbuildscriptは、Tomcatプラグインを利用するための設定です。
buildscriptについては、以下のサイトをご参考ください。
第60章 ビルドロジックの体系化

providedCompileは、ビルド時には参照にするが、生成物からは除外する場合に使います。

次にサーブレットクラスを作成します。
src/main/javaディレクトリにサーブレットを作ります。

ここまででできればあとはtomcatを実行させるのみ!
以下のコマンドで実行します。

gradle tomcatRunWar

または

gradle tRW

でもOKです。


あとはブラウザからアクセスして起動していることを確認してください。
簡単にできてびっくりでした。

Java SE 8 SilverとGoldを取りました

2週間ほど自由な時間ができたので、Oracle認定Java資格を取得することにしました。
無事に取得できたので、勉強方法をメモしておきます。

因みに自分のJava経験は以下の通りです。

今回のターゲットは…

それぞれの勉強方法を記載します。

Silver SE 8(Java SE 8 Programmer I)

10年以上前に(まだSunの時代)資格を取っていますが、さすがに覚えていないので1から勉強し直しました。

勉強した本はこちら。

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

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

取得者のブログをいくつか拝見し、おすすめの書籍としている方が多かったのでこれにしました。

内容を確認してサクサク解けそうだったので、モチベーションUpも考え、書籍購入日から4日後を試験日に設定し、申し込みました。

書籍は11章構成になっています。
1日3章ペースで進め、試験当日は間違った箇所を解き直して、試験に臨みました。

勉強時間:14時間(4日)

結果:正解率 87%(合格ライン65%)

書籍と全く同じ問題もいくつか出てきたため、総仕上げ問題(10章、11章)で90%ぐらい取れていれば、余裕で受かると思います。
開発経験が2年ぐらいあれば、1週間の勉強で受かるのではないでしょうか。
因みに試験時間は60分ほどで解き終わりました。

f:id:dokyou3:20160906203352p:plain

Gold SE 8(Java SE 8 Programmer II)

Silverを取得した次の日からGoldの勉強を開始しました。
勉強した本はこちら。

オラクル認定資格教科書 Javaプログラマ Gold SE 8 (EXAMPRESS)

オラクル認定資格教科書 Javaプログラマ Gold SE 8 (EXAMPRESS)

Goldの書籍は現時点で1冊しか出ていないで、何も考えずこちらの一択になると思います。

今回も自分を追い込むため、先に受験日を決め、10日後設定で試験を申し込みました。
この本は12の章と模擬試験の構成になっており、各章に説明テキストと問題が載っています。
1日2章ペースで読み進めましたが、ボリュームが多い章もあり1日1章になってしまった章もちらほらありした。
12章まで終わったら、付属チェックシートで理解度を確認し、不十分なところはサンプルコードを実際に動かしながら理解度Upを図りました。
(各章のテキストと問題のサンプルコードはWebからダウンロードできます)

勉強時間:36時間(10日)

結果:正解率 77%(合格ライン65%)

勉強した書籍はSilverの本と違って問題数が少なかったので、SE 7 Goldの問題集を購入しようか迷いました。
受験日まで時間もなかったので結局買わず(7と8で変わっているところもあるので混乱しそうなのもあり)、購入した本をしっかり理解することに努めました。
試験本番、テスト終了15分前に解き終わりましたが、残りの時間をレビューに使い、結局ギリギリまで席にいました。
ラムダ式とStream APIの問題は多めだったので、使い方はちゃんと覚えておいた方と思います。

f:id:dokyou3:20160906205825p:plain

2週間でGoldを取得するのは時間に余裕のある方でないと難しいかもしれませんが、少しでも受験の参考になると嬉しいです。

追記
ちょっとずつ勉強していた時に気になった点もまとめていきます。
dokyou3.hatenablog.com

プロビジョニング

下記のサイトを参考にMacでプロビジョニングしてみました。

totech.hateblo.jp

知らなかったことを調べたのでついでにメモ。

Vagrantプラグインvagrant-vbguest」って?

VirtualBox のゲストマシンと、ホストマシン(今回はMac)との間の操作を便利にしてくれる。
例えば、
クリップボードの共有
・ フォルダの共有
・ 自動ログイン
・ ホストマシンとの時刻同期

bundlerでchef関連インストールって

Bundlerはプロジェクト内で使うRubygemsを管理するしくみ。

GemfileがBundler用の設定ファイル。

BundlerはGemfileの記述にしたがって、gemの依存関係を示したGemfile.lockを生成する。

・ Bundlerのインストール

gem install bundler

・ Gemfileの雛形作成

bundle init

あとはGemfileを編集すればよい

Vagrantのデフォルトパスワード

vagrant

こちらのサイトで再確認させて頂きました。

qiita.com