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

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

VM引数を変更しつつマイクロベンチマークする方法

VM引数を変更しながら、マイクロベンチマークを取りたいケースってあると思うのですが、
JITコンパイラに影響のある引数の場合、ただプログラムを実行して時間を計測するのみでは
うまくその影響を測れません。なぜなら、プログラムの実行中にVMが判断したタイミングでJITコンパイラが走りコードが最適化されるので、どの程度そのVM引数の変更の効果があったのか測れないからです。

# JMH の利用
このようなケースでは、ベンチマークツールである JMH を使用するのが便利です。
JMH の使用方法についてはこちらのの[記事](https://www.codeflow.site/ja/article/java__java-jmh-benchmark-tutorial)で説明されていますので、以降では、JMHでのベンチマークの際にVM引数を指定する方法を説明します。

# VM引数の指定方法

以下のようにベンチマークを行うメソッドにForkアノテーションを付与し、JvmArgsAppend属性を利用することによってVM引数を指定することができます。
この例では、「-XX:-Inline」を指定てい

元記事を表示

apkからjavaファイル生成(BytecodeViewer式)

dex2jarでは精度がいまいちだったので精度の良かった物を紹介します

# Bytecode Viewer
https://bytecodeviewer.com/

dex2jarの代わり。
GUI操作です。JD-GUIのような類ですね。
普通に便利です。apkやdex、jar、zip、classがデコンパイルできます。
デコンパイル後は好きなデコンパイラーで見れます。
apkから出たclassの保存とか、デコンパイラーでデコンパイルしたjavaの出力とか出来ます。
ただjavaへの出力は不安定です。

# Procyon
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

Bytecode Viewer内臓のデコンパイラーですね。
安定していると思います。

手順としてはBytecode ViewerのFile->Save As Zipでapkから出たclassを保存。
できたzipをProcyonでデコンパイル。

ソースコードを見て比較とかしましたがFernflowerより良いなと思った点が2つ。

元記事を表示

javaでAtCoder Beginner Contest 152を解く

AtCoder Beginner Contest 152お疲れ様でした!
[公式ページ](https://atcoder.jp/contests/abc152)

今回の自分の書いたコードは[こちら](https://github.com/ko-flavor/atcoder-java/tree/master/atcoder/src/abc/abc152)
結果はA-DまでAC、EがWAでした。

以下簡単に解説します。

##[問題A](https://atcoder.jp/contests/abc152/tasks/abc152_a)

引数のNとMを比較する問題。
同じ場合は`Yes`、違う場合は`No`を出力すればOK

##[問題B](https://atcoder.jp/contests/abc152/tasks/abc152_b)

aをb回繰り返した文字列とbをa回繰り返した文字列のどちらが**辞書順**ではやいかを出力する問題。
辞書順なので、aとbのうち小さいほうが先です。

aとbの小さい方をaとbの大きい方ぶん繰り返した文字列を出力できたらACです。

##[問題

元記事を表示

Javaで実行しているディレクトリの絶対パスを取得する方法

##はじめに
Qiita初投稿です。
#環境
java1.8.0_221
#やりたいこと
`C:\Users\Miyayu\IDEA\example\example.jar`を実行しているとする。
`C:\Users\Miyayu\IDEA\example`(String型)を取り出したい。
#コード
“`java
FileSystems.getDefault().getPath(“”).toAbsolutePath().toString()
“`
これだけ!かんたんでしょ?
##指定したファイルの絶対パスを知りたいときは
`.\expdir\hoge.json`の絶対パスを知りたい

“`java
FileSystems.getDefault().getPath(“expdir”,”hoge.json”).toAbsolutePath().toString()
“`

元記事を表示

【Java】多重forループを一重にする方法

**ネタです**

# はじめに
Javaに限らず,プログラムを書いていると何重ものforループを書かなければならない時が発生します.

例. int型三次元配列の全ての要素を1にしたい.

“`java
final int n = 10;
final int[][][] cube = new int[n][n][n];

for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { cube[i][j][k] = 1; } } } ``` しかし,このようなループはネストが深くなったり行数が無駄に増えるため,プログラムの保守性が悪化する原因となります. そこで,多重forループを一重にする方法を考えます. # forループの構文 問題を解決するために,まずはforループの構文を確認して行きます. [Eclipse JDT](https://help.eclipse.org/2019-12/index.jsp?topic=%2F

元記事を表示

Javaのインライン展開についてちょっと実験してみる

JavaではJITコンパイラがインライン展開を行っているということは聞いたことがあるのですが、それによってどれだけの恩恵を受けているのか、ちょっと実験してみたくなりました。

## そもそもインライン展開とは
詳細は[Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E5%B1%95%E9%96%8B)を参照してください。
要はメソッドの呼び出しにはオーバーヘッドがあるため、メソッド内の処理をメソッドの呼び出し側に埋め込んでしまえば、メソッド呼び出しのコストを抑えることができるということですね。JITコンパイラが必要に応じてこれを行っています。

## 実験

今回試してみるコードは以下の通りです。StringBuilderに文字列をappendするだけのメソッドを用意して、繰り返し呼び出してみました。
同じメソッドを何度も呼び出していますので、インライン展開される/されないによってパフォーマンスに差が出るのではないかと仮説を立ててみました。

“`java:I

元記事を表示

macOS での Java のバージョン管理

ちょっと真の本題で書いたことを調べようと思って、いろいろ調べた結果の備忘録です。
でも、真の本題の方は、いまいち解決していないという。。

## Java のバージョンについて

Java については、まず、言語そのものと、その動作環境である JVM があり、それらについて、公式の仕様の部分と、公式 (Oracle) やその他さまざまなところが出している実装の部分があります。

Oracle が出している Java の仕様は Java SE (Standard Edition) と呼ばれます。
アプリケーション実装に踏み込んだ仕様である Java EE (Enterprise Edition) (現在は Jakarta EE として移管) や組み込み用途での Java ME (Micro Edition) というのがあった影響で、 Java SE と名付けられていますが、完全に歴史的経緯ですね。

Oracle による Java 実装は、通称 [Oracle JDK](https://www.oracle.com/technetwork/java/javase/downloads/in

元記事を表示

【2020年3月5日まで】RDS証明書を更新する for java

# プロローグ

[新しい SSL/TLS 証明書を使用して MySQL DB インスタンスに接続するようにアプリケーションを更新](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/ssl-certificate-rotation-mysql.html)

2020年3月5日までにRDSのcaを更新してくださいという話。
手順通りやれば問題ないのだが、いくつかハマりポイントがあったので記事にした。

# 前提

・java
・tomcat
・mysql
・証明書はJKS形式
・クライアントの証明書を先に更新し、mysqlの証明書は後から更新
(同時の場合は、ダウンロードする証明書が異なる)

# 手順

### 1.証明書の取得

先にクライアントを更新するので、2015,2019のバンドル版をダウンロード
場所は現在と同じでよいかと。

“`
$ cd /etc/pki/java
$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bun

元記事を表示

過去1世紀の間に日本で出回ったすべての本のデータベースを作ろう

# 0. 初めに(対象読者など)

釣りタイトルです。すみません。
本当は、過去1世紀の間に日本で出回ったすべての **「699 テレビ・ラジオ」に分類される**本のデータベースを作ります。
また、 **国会国立図書館のサーバへの自動アクセスを大量に行うこととなるので、くれぐれも自己責任でお願いします**。

対象読者

– 国会国立図書館サーチを(API使わずに)自動で行いたい人
– javaがある程度できる人
– privateメソッドで怒らない人
– 自己責任を理解できる、精神的に大人の方(極稀に、これに残念ながら該当しない社会ガク者の方がいます)

# 1. 実験
国会国立図書館サーチで詳細検索し、分類記号「699」だけを条件に検索すると、
1925年~2020年の、テレビやラジオに関する本をすべて検索することができる。
 しかし、誠に残念ながら、一回の検索で見ることができるのは、上位500件の結果のみである。(501件目以降は、そもそも検索結果に表示されない)
また、出版年

元記事を表示

Yellowfinのカスタムフォーマッターを作って数値のマイナスを△(三角)で表示する

経理関係の資料などでマイナスの数値を「△100,000」のように表記するケースがあります。
Yellowfinでは **カスタムフォーマッター** を使えばこのような表示を実現することができます。

カスタムフォーマッター等の **Yellowfinのプラグイン** はJavaで開発します。
今回はEclipse(を日本語化した [Pleiades](https://mergedoc.osdn.jp/))を用いています。

なお、開発方法はYellowfinのオンラインマニュアルに記載があります。
[プラグイン開発の基礎](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=10945559)
[カスタムフォーマッターの作成](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=10945478)
本記事では端折りながら進めていきますので、適宜マニュアルを参照してください。

# Javaプロジェクトの作成

新規Javaプロジェクトを作成します。Javaのバ

元記事を表示

[MySQL][java]日時を受け取る

##概要
MySQLに登録された日時をjavaで取得する方法、javaからMySQLへ日時を登録する方法を紹介する。
MySQLへ接続する方法はこちらを見て頂きたい。https://qiita.com/QiitaD/items/d605b07e849e3bec0722

##MySQLに定義する列
日時をtimestamp方で定義する。列名は”date_time”、フォーマットは”yyyy-MM-dd HH:mm:ss”である。

##MySQLからjavaでの取得

~~~java
String mySql = “select * from table_name”;//日時のあるデータを取得するSQL文
ResultSet rs = stmt.executeQuery(mySql); //SQL実行、データを取得
while (rs.next()) {
rs.getTimestamp(“date_time”); //取得データから日時情報を取得
}
~~~

##javaからMySQLへ日時を登録する

元記事を表示

Java合併 & マージを解除Excelセル

本論文では、どのように使うかを紹介しますSpire.XLS for Java Excel Java合併 & マージを解除Excelセル

使用ツール: [Free Spire.XLS for Java無料版](https://www.e-iceblue.com/Introduce/free-xls-for-java.html)

Jarファイルの取得と導入:

Method 1:ホームページを通じてjarファイルのカバンをダウンロードします。ダウンロード後、ファイルを解凍して、libフォルダの下の[Spire.xls.jar](https://www.e-iceblue.com/Download/xls-for-java-free.html)ファイルをJavaプログラムに導入します。

Method 2:[maven倉庫](https://www.e-iceblue.com/Tutorials/Licensing/How-to-install-Spire.PDF-for-Java-from-Maven-Repository.html)設置による導入。

合併Excelセル

Spi

元記事を表示

Java 11 (OpenJDK: AdoptOpenJDK) を Homebrew で macOS にインストールする

## 今回の環境

– macOS Catalina 10.15.2

## インストール

公式資料通りにインストールする。
[GitHub \- AdoptOpenJDK/homebrew\-openjdk: AdoptOpenJDK HomeBrew Tap](https://github.com/AdoptOpenJDK/homebrew-openjdk)

“`
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk11
“`

## java_home コマンドでインストールされたディレクトリの場所を確認

“`
$ /usr/libexec/java_home -v 11
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
“`

## 環境変数 JAVA_HOME と PATH を設定

必要に応じて .bash_profile や .bashrc などに記述する。

“`
export JAVA_HOM

元記事を表示

SpringSecurityで認証機能を実装③

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

**※ここからたくさんのファイルを作成していきます。失敗した際に、途中で後戻りが出来なくなる可能性が高いので、ここまでプロジェクト情報をコピーまたはGithubなどに挙げておくといいでしょう。**
私はこれをせず何度もプロジェクト作成してかなりの時間を要しました。SpringBoot_Di_Security_DB_13.png

## 5、SpringSecurityの認証機能の実装。

・ここからがメインディッシュになります。
 前回までの実装がうまく行ってないとエラー対応が面倒なので、ここまでを完璧に実装しておきましょう。

元記事を表示

SpringSecurityで認証機能を実装②

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

## 4、ログイン画面の実装。

・今回はログイン画面と実装します。ただ認証機能は実装しないので、**ログイン画面からボタンを押せばフォームの内容に限らず画面を遷移させます**。

・ファイルの構成イメージは以下になります。コメントをズラーと書いてしまったので不要な場合は消して下さい。

 SpringBoot_Di_Security_DB_11.png

・コードは以下になります。

“`java:SpringLogin.app.controller/LoginController.java

package SpringLogin.app.controller;

imp

元記事を表示

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」をさらにスマートに解いてみる(完結編)

[Indexに戻る](https://qiita.com/oyahiroki/items/ba79a759c599d3459d29)

# 課題

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

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

「AのB」を抽出するためだけにプログラム・ロジック・メソッドを作成するのは、勉強のためなら問題ありませんが、自然言語処理を業務で使うには効率がよくないのです。

“`java
/**
* 「名詞の名詞」を「word_nn_no_nn」キーワードとして抽出

元記事を表示

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
//

元記事を表示

OTHERカテゴリの最新記事