JAVA関連のことを調べてみた2020年01月17日

JAVA関連のことを調べてみた2020年01月17日

SpringSecurityで認証機能を実装②

**[前回](https://qiita.com/YJ2222/items/73642c3a0af776927db5)の続きです。**

元記事を表示

JDBCを利用する場合、NLSパラメータはJavaのロケールに影響される。

# 実行環境

本記事を書くにあたって、利用した主なソフトウェアのバージョンは次の通りです。なおOracle Databaseの構築にあたってはDockerおよび[Oracle公式のDocker Image](https://github.com/oracle/docker-images)を利用しています。

|software|version, edition|
|—|—|
| Oracle Database 12c | Oracle Database 12c Standard Edition Release 12.2.0.1.0 – 64bit Production |
| ojdbc8.jar (12c JDBC Driver) | Oracle 12.2.0.1.0 JDBC 4.2 compiled with javac 1.8.0_91 on Tue_Dec_13_06:08:31_PST_2016 |
| javac | javac 11.0.4 |
| java | openjdk version “11.0.4” 2019-07-16 |

# 概要

Ora

元記事を表示

兵庫県全域数値地形図DSMから三次元モデル(PLY形式)を作成してみる

## 1.概要
先週末、兵庫県が1mメッシュの全県域3次元データセットを公開をしました。
公開データはDSM、DEM、CS立体図で、ライセンスはC.C.4.0、「目的を問わず二次利用可能なデータですので、様々な用途でご利用ください。」とのことです。

– [兵庫県HP:全国初「全県土分の高精度3次元データ」の公開](https://web.pref.hyogo.lg.jp/press/20200110_4566.html)
– [G空間情報センター:兵庫県全域数値地形図ポータル(2010年度~2018年度](https://www.geospatial.jp/ckan/dataset/2010-2018-hyogo-geo-potal)

これまで公開されていた三次元データセットとしては、[国土地理院:基盤地図情報サイト](https://www.gsi.go.jp/kiban/)の数値標高モデル(5mメッシュDEM)がありましたが、兵庫県全域数値地形図はその25倍のデータ密度であり、DEMに加え、建物や森林を含めたDSMが公開されています。
さっそくこれを利用して、都市や山林部の三次

元記事を表示

NLP4J [006-034c] NLP4J で言語処理100本ノック #34 「AのB」をさらにスマートに解いてみる(完結編)

# 課題

[NLP4J [006-034b] NLP4J で言語処理100本ノック #34 「AのB」の Annotator を作ってみる](https://qiita.com/oyahiroki/items/0f1d7863e92747343634) では以下のようなロジックを切り出して定義することでロジックの再利用を可能にしていました。

ところがこれでもまだ足りないのです。
キーワードの抽出ルールをロジックで書いているため、柔軟性が足りないのです。
「AのB」であればこのロジックで問題ありませんが、では「AがB」のようなものを抽出したいときはまた別のロジックを用意しなければなりません。

“`java
/**
* 「名詞の名詞」を「word_nn_no_nn」キーワードとして抽出します。
* @author Hiroki Oya
*/
public class Nokku34Annotator extends AbstractDocumentAnnotator implements DocumentAnnotator {
@Override
public void

元記事を表示

SpringSecurityで認証機能を実装①

現在、フレームワークの勉強中でSpringBootを扱っております。
その中でログイン機能を実装する際に、SpringSecurityの認証機能を使うのが定石らしく、これを使って実装いたしました。
その際にだいぶ難儀しまして、実装までにだいぶ時間を要したので自分なりにまとめてみました。

## 1、SpringSecurityのイメージ

SpringBoot_Di_Security_DB.png

すごく簡素なイメージ申し訳ないのですが、イメージ的にはこんな感じになります。
SpringBootのDI(依存性の注入)という機能を使って**SpringSecurityを外部から読み込んでDBとやり取りを行います**。
DIに関しては詳しく説明しませんが、外部のオブジェクトをDIコンテナという箱に入れておくことで、い

元記事を表示

【初心者】Java クラスフィールド・メソッド/カプセル化(ゲッター・セッター)【備忘録25】

##クラスフィールド・クラスメソッド
###クラスフィールド
インスタンスフィールドがありましたが、クラスに属するクラスフィールド
というものもある。具体例としては、インスタンスがいくつ生成されたのか数える
countというものがある。
【例】

“`java
class Person{
public static int count = 0;
//…略

Person(String firstName,…);{
Person.count++;
… //↑こうすることで、インスタンスが生成されるたびに1ずつ足されていく。
“`

###クラスメソッド

“`java
class Person{
public static int count = 0;
//…略
public static void printCount(){
System.out.println(“合計” + Person.count + “人です”);
}
}
“`
クラスメソッドは、インスタンスの生成がない場合でも呼び出すことが可能。

“`java
//

元記事を表示

Java 順列の生成

“`java
public List permutation(List list, String target, String ans){
if(target.length() <= 1) { list.add(ans + target); } else { for (int i = 0; i < target.length(); i++) { permutation( list, target.substring(0, i) + target.substring(i + 1), ans + target.charAt(i)); } } return list; } ``` [全組み合わせの列挙 Java](https://qiita.com/masakinpo/items/b6ae147d9a61b592240a)

元記事を表示

LinkedListとArrayList

##リストって
脳死でArrayList使っていたけれど、実はいろいろあるらしい

“`LinkedArrayListTest.java
package listTest;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class LinkedArrayListTest {

public static void main(String[] args) {
measure(1000000);
}

private static void linked(int num) {
List list = new LinkedList<>();
for (int i = 0; i < num; i++) { list.add("asd"); } } private static void array(int num) { List list = new ArrayList<>();
f

元記事を表示

Spring Boot(Spring Web MVC + Tomcat)におけるSameSite Cookie

Spring Boot(Spring Web MVC + Tomcat)でSameSite Cookieを使うにはどのようにすればいいか、調べてみました。

## SameSite Cookieとはなにか

MDNのドキュメントを参照してください。

– https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies#SameSite_cookies_experimental_inline

## TomcatのSameSite Cookie対応

TomcatではCookieをHTTPレスポンスへ書き出すため`javax.servlet.http.Cookie`から文字列へのシリアライズを行います。
シリアライズは`org.apache.tomcat.util.http.CookieProcessor`インターフェースを通じて行われます。
実装クラスとして`org.apache.tomcat.util.http.Rfc6265CookieProcessor`が用意されていますが、この`Rfc6265CookieProcessor`クラスの

元記事を表示

RやRStudioでJava (jdk)のバージョンが高すぎてh2oライブラリが使えなかったのを解決した話

#動機
久しぶりに書いたと思ったらまたPATHの話です。
Mac向け。Winの人はごめんね。
学校でR環境下でh2oという深層学習ライブラリを使えという課題が出た際に私だけjdkのバージョンが引っかかって課題が進まなかったのを解決した怒りの手記。

#解決方法
#####R環境下で使うjdkのバージョンを下げる。以下、具体的手法。

####今Javaは何がいくつ入ってんの?

Rコンソールではなくターミナルを起動し、

“`
/usr/libexec/java_home -V
“`
と打ち込んで調べよう。入っているJavaのバージョンが全て出てきます。こういう感じです。
スクリーンショット 2020-01-16 2.32.45.png

####h2oライブラリが使えるjdkを持ってる?

h2oライブラリ

元記事を表示

アルゴリズム 体操16

#Merge Sort
マージソートはソートアルゴリズムの中でもdivide&conquerを使った有名な一つですね。
再帰的に分割していき、再び併合(マージ)していくことで、並び替えを実現しようとする、ソートアルゴリズムです。
今回はそのマージソートを使って配列ではなく、Linked Listをソートしてみたいと思います。

##例
![Screen Shot 2020-01-15 at 7.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/fd8ce790-da1f-52aa-e3f6-75b1649d4dae.png)

##Solution

###Runtime Complexity O(n(log(n))
n 個のリストとをマージするには n に比例した時間がかかります。(merge)
また、n 個のデータを1個ずつになるまで2分割していくには log(n) 時間がかかります。(divide)
したがって、実行時間は O(n log(n)) となります。
###Memo

元記事を表示

【備忘録】統合開発環境Eclipseでjavaプログラムを実行~gitを使ってみた

#【備忘録】統合開発環境Eclipseでjavaプログラムを実行~gitを使ってみた

初めて統合開発環境Eclipseをインストールし、「Hello world!」の出力までできたので、
そのコードをgithubにpushしてみた。

今後Eclipseを使用していくにあたり、備忘録として残しておく。

1. github上にリモートリポジトリを作成
1. githubの画面右上部の「+(プラス)」ボタンを押下し、**New Repository**を選択
2. **Repository name**にリポジトリの名前を入力し、**Create repository**を押下

2. 「新規Javaプロジェクト」の作成
1. メニューより[ファイル]→[新規]→[その他]を選択。ウィザードが出てきたら[Javaプロジェクト]を選択して次へをクリック。
2. 「関連付けられたパースペクティブを開きますか?」のウィンドウがでてきたら「はい」を選択。
3. 「新規Javaプロジェクト」ウィンドウが表示されるので、[プロジェクト名]欄に、任意のプロジェクト名をつけて「完了」ボタンを

元記事を表示

Javaプログラマ(4年目)が今まで買った技術書の棚卸しとオススメ度

#初投稿です
前々から投稿したかったけど、怖くてできませんでした。慣らすためにとりあえず書こうと思いました。
#買った本の棚卸し
買った本の個人の棚卸し的目的も含むため、特定の用途でまとめての紹介ではございません。
ほぼ全て紙の本です。自分は技術書って電子書籍だと読みにくい
また完全に個人の感想です。

あとなんか画像勝手に持ってくるのはいやだし、Amazonのリンク貼るのもいやだし、自分の撮った写真は汚いしで面倒になったので本の画像はなしでお送りします。

★=1点
☆=0.5点

#1.リーダブルコード
**オススメ度:★★★**

言わずと知れた超有名な本。
新人の頃に初めて先輩に勧められて、とりあえず買ってワケ分からなくて途方にくれた思い出深い逸品。もはや御守り的にカバンに入れて持ち歩くような存在。

中身に関しては新人にはハードルが少し高く感じた。「このように書くと良いよ」を紹介してくれるのはすごく良いのだが、「もっとJavaとして書くときの書き方を教えてくれよ!」と当時は思っていた。

ただなんだかんだ書いてある内容は今も実践しているつもりだし、かなり良い本。
#2.ベター

元記事を表示

JUnitでprivate scopeなものをテストする方法

## private scopeなものをテストする
Javaでprivate scopeのフィールド、メソッド、内部クラスを外部から呼び出し、
JUnitでテストしてみます。
※何番煎じか、出涸らしかという記事です。

まず、JUnitでテストしようとしてみます。

![error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533981/e667302e-da43-2797-0c48-b0d5600840a5.png)

コンパイルエラーです。仕様です。実行できません。
privateなので、publicと同じようには呼び出せません。

そこでReflectionを使ってprivate scopeなものを呼び出します。

## Reflectionとは
Reflectionとは、Javaの標準ライブラリの一種で
クラスそのものの情報を扱うことです。
具体的な例として、
クラス名、メソッド名、フィールド名の文字列で
そのクラスを生成、メソッド実行、フィールドへのアクセスが
できたりします。

以下、外

元記事を表示

NLP4J [007] で kuromoji を利用する Annotator を作成する

# 形態素解析のモジュールを使い分ける

NLP4J では標準(nlp4j-core)においてYahoo!デベロッパーネットワークの形態素解析処理を利用しています。

テキスト解析:日本語形態素解析 – Yahoo!デベロッパーネットワーク
https://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html

Yahoo!デベロッパーネットワークのAPIはHTTPで呼べるので便利ではありますが、回数制限があるという弱点もあります。
そこでローカルでも使える [kuromoji ](https://www.atilika.com/ja/kuromoji/) を利用するライブラリを作成することにします。

# Annotator の作成

今回は nlp4j プロジェクトのサブモジュール(sub module)として nlp4j-kuromoji を作成しました。

nlp4j-kuromoji
https://github.com/oyahiroki/nlp4j/tree/master/nlp4j/nlp4j-kuromoji

Maven

元記事を表示

JSP-サーブレットのMVCモデルとリダイレクト・フォワード、スコープについて

#MVCモデル
 Model,View,Controllerモデルの略で、それぞれ「処理」「結果表示」「統括」を担当する。
 ユーザ側のリクエストをコントローラが受け、コントローラはモデルにデータ処理を依頼し、モデルは処理したデータをコントローラに返し、そのデータはビューに渡され、ビューは成形してユーザにレスポンスとして返す、といった形になる。

 サーブレット・JSP環境では、コントローラをサーブレットクラスが、ビューをJSPが、モデルを通常のJavaのクラスが行うことが多い。
 こうする利点の一つに、複数分野にまたがる知識がなくても分担して開発することができる、という利点がある。

01.png

#フォワードとリダイレクト
 サーブレットクラスからJSPやほかのサーブレットクラスにページを遷移する方法として、

元記事を表示

【Mockito】ランダム生成の文字列を使ったdo whileループを検証する

# 問題
Mockitoを使って単体テストを作成中
以下のようなコードのテストに悩んでいた…

* ユーザーIDを生成
* 既存ユーザとIDが重複していたら生成し直す
* 生成したIDでSELECTしてEntityが取得できた場合は重複しているとする。

“`java
private String generateUserID() {
String userId;
do {
// ランダム8桁の文字列を作成
userId = RandomUtil.getRandomString(8);
// 作成したuserIDが既に使用されてなければループを抜ける
} while (userRepository.findByUserId(userId) != null);
return userId;
}
“`

Repository部をスタブ化してSELECTの戻り値を設定することでテストする。

“`java

// Entityが取得できるパターン
when(userRepository.findBy

元記事を表示

Java + MySQLで簡易掲示板を作る

![board.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/44aafca8-4c47-98a7-814f-4ba20f3e45ef.png)

mysqlを使った簡易的な掲示板を作りました。

##概要
・ID、名前、コメント、タイムスタンプを掲示板に表示する。
・名前かコメントが未入力だとエラーメッセージがポップアップする。

##苦労したところ
・DBに格納したデータを取り出す方法がわからなかった。
最初は配列で別々にID、名前、コメント、タイムスタンプを取り出そうとしたが上手くできなかった。
ArrayListならインスタンスまるごと格納できる!

・ArrayListの中身をjspで取り出す方法がわからなかった。
EL式で取り出そうとしたが上手くできなかった。
JSTLのcoreタグライブラリで`forEach`を使って取り出すことができた。

・mysql接続時にtime zoneエラーが出る。
下記を参考に接続URLを変更。日本時間にしたい場合は末尾をJSTに変更する。
[

元記事を表示

Javaでいいね機能の実装

![iineko.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/290f2b85-4b6b-7484-e3dc-f9db743d30fc.png)

アウトプットはどんどんした方がいいらしいので、初めて作ったいいねアプリの公開をします。
MVCモデルで作りました。
##概要
画像をクリックするといいねこ!が増えます。
値はアプリケーションスコープに保存しています。
https://iineko.herokuapp.com

##苦労したところ
1、HTMLから画面遷移せずに値を送る方法がわからずに四苦八苦しました。
[画面遷移せずにHTMLで値を送る方法](https://qiita.com/parapore/items/227782c252af6ab5aa03)

2、いいねを押しても1以上にならない。
いいねされる度に毎回newしていたので初回起動判定を入れた。

3、クラスをまたいでインスタンスを渡す方法がわからなかった。
YoineServelet.javaで`Yoine y =

元記事を表示

画面遷移せずにHTMLで値を送る方法

画面遷移せずにGETで値を送る方法のメモです。

##HTMLで値をGET送信
a href=”URL?属性名=変数名”

“`html



“`

##Javaで値を受け取る
request.getParameter(“属性名”)
sは文字列「sample」を受け取ります。

“`java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String s = request.getParameter(“action”);
“`

元記事を表示

OTHERカテゴリの最新記事