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

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

shaded-jarの作り方

# Shaded jarとは
Javaでのdependency-hellを回避するための方法の一つ。

元々のコードベースが、ライブラリAのバージョンXに依存しているとする。
このコードベースに新たなライブラリBを追加したい。
しかしながら、ライブラリBはライブラリAのバージョンYに依存しており、
ライブラリAのバージョンXとYは互換性がないという状況を考えよう。

“`
CodeBase
|- Library A, Version X
|- Library B
|- Library A, Version Y # Conflict!!!
“`

このままではライブラリAのバージョンX, Yのどちらを選んでも新規機能と既存機能の
両方を同時に動かすことはできない。

ここで登場するのがshaded-jarである。
Library AのバージョンYのクラスを全てLibrary Bに同梱してしまい、依存関係を排除したライブラリB’を作成するという方法だ。

“`
CodeBase
|- Library A, Version X
|- Library B’ (includ

元記事を表示

Mac,VSCode,JavaでHelloWorldした

# はじめに

タイトル通り、ただHelloWorldするだけです。
よくある標準出力するだけの課題とかをささっとすますにはいいかもしれません。
今からこの環境でWebアプリとか作っちゃうんだ!って人にはお勧めしません。
他にIntelliJ IDEA, Eclipse + Pleiades, NetBeansでの環境構築をしている記事等々あると思うので、そちらを参考にしてください。
どうしても、VSCodeでやってみたいんだ!って人だけ参考にしていただければと思います。

## 動作確認した環境

– macOS : Catalina 10.15.5
– VSCode : 1.45.1
– Java : Amazon Correto 11.0.7

## 方法

Javaはすでに入っているよと言う人は、「VSCodeにJavaの拡張を入れる」まで飛ばしてください。

### SDKMAN!をインストールする

SDKMAN!は簡単に言うと同一環境で複数のJavaを管理するためのツールです。
こちらを参考にSDKMAN!をインストールしましょう。

元記事を表示

progate java L1基本まとめ cosole.log,変数と定数の違い、if文

#console.log
console.log();と使う
コンソール上に()内を表示させる
注意点として文字列を表示させたい場合はconsole.log(“”)のように文字列を””で囲む

○ console.log(“あいうえお”) ⇨ あいうえお と表示される
× console.log(あいうえお) ⇨ referenceエラーになる

#値の宣言 変数letと定数const

値を宣言する場合、letまたはconstで宣言する

let numberA = 1;
const numberB = 2;

この2つには違いがあり、letは更新できるがconstは更新できない

###値の更新
変数は値を更新することができる
let numberA = 1;
この時点ではnumberAは1だが、

numberA = 10;
これでnumberAはではなく10になる

#if文
if(条件){処理}←セミコロンは付けない
(条件)を満たした場合に{処理}が実行される

条件の例
a>=b aは以上
a

RとJavaの文法を翻訳してみた【随時更新】

#まえがき
##これは何?
統計データの処理、解析に特化した言語である**R**の文法を、汎用言語である**Java**の書式と比較して対置してみたものです。
Javaがわかる人がRを書きたい時に使えるように、参考にしてください。

##必要な前提知識(Javaサイド)
・変数の型(int, double, boolean, String, Object辺り)について理解している
・多次元配列がわかる
・List, Mapが使える(一部サンプルコードで使用しています)
・拡張for文[Java 8]が使える(同上)

Rでやりたいことって言うと、だいたいこの辺が押さえられていればわかると思います。

##必要な前提知識(Rサイド)
・Rをインストールした
・文末にセミコロンが無くていいことぐらいは知っている
・やるき

#R-Java対置辞典

##汎用の文法
###JavaとRで共通のもの
・**除算絡み以外**の算術演算子(+, -, *)
・比較演算子(<, >, <=, >=, !=)
・条件論理演算子(&&, ||)、論理演算子(&, |)、否定(!)

###異なるもの

JMeterで負荷テスト

ハマったところの忘備録と、意外と上から下まで説明した記事がなかったのでまとめ。

# 目的
JMeterで、負荷テストを行う。
1秒10アクセス。
https://hogehoge.jp/abc を対象とする
ベーシック認証付き
nuxt.js、API通信でバックエンドはLaravel
JMeterはMacで実施。

# JMeterインストール
何はともあれJMeterをインストール。
brewで行います。brewがない場合はbrewをインストールしてね。

JMeterを使うには、本体とJavaが必要です。

“`sh
brew install jmeter
brew tap homebrew/cask-versions
brew cask install java
“`
javaはこれ書いている時点でバージョン14がインストールされましたが普通に使えました。

# JMeterの実行
コンソールから実行します。

“`
jmeter
“`

するとGUIツールが開きます。この画面を使ってテスト計画(テストの内容)を作ります。

Javaが既存のPDFドキュメントにページ番号を追加する

日常業務では、PDF文書の読み取り、検索、管理を容易にするために、PDF文書にページ番号を追加する必要があることがよくあります。 そこで、Free Spire.PDF for Javaを使用して、JavaプログラムでPDF文書にページ番号をすばやく追加する方法を紹介します。

**まず、参照用に結果グラフを配置します:**
![page numbers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/28ff65e4-e9cf-f083-082e-7a65b228181c.png)

**基本的な手順:**
**1.** [Free Spire.PDF for Java](https://www.e-iceblue.com/Download/pdf-for-java-free.html)パッケージをダウンロードして解凍します。
**2.** libフォルダーのSpire.Pdf.jarパッケージを依存関係としてJavaアプリケーションにインポートします。(Mavenリポジトリから直接JAR

java BigDecimal型からString型へ型変換

javaにはもともとBigDecimalというクラスがあるみたいです。

初めてBigDecimal型の変数を宣言し、
最終的にBigDecimal型の変数をString型に変換したいと持った時にvalueOf()メソッドを使えばいいんじゃないかと思ったがBigDecimalには型変換用のメソッドがあるみたいでした

サンプル
スクリーンショット 2020-06-10 16.09.28.png

<簡単に説明>
まず上の方でBigDecimal型の変数宣言&初期化をしております。
全部で3つの変数(right,left,decimalValue)があります。

次に、switch文でrightとleftの計算結果をdecimalValueに格納してます。

そして注目ポイントである型変換ですが、
String d

美大生のためのプログラミング入門:基本的な四角形の描き方

※ Qiita では、本文部分のみの印刷に苦労します。そのため、同じ内容を以下のページにも掲載しています。プリンツアウトしたり PDF 化したい人は、こちらのページを利用して下しさい(同じ内容です):

http://gurakura.sakura.ne.jp/hellomondrian/rect1/

# はじめに:四角形を描く

![composition-in-color-a-1917.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176385/7956f17e-40cd-2844-71d4-54679944fc34.jpeg)

 上の画像は Piet Mondrian の作品 Composition in Color A (1917 年)で、[https://www.wikiart.org/en/piet-mondrian/composition-in-color-a-1917](https://www.wikiart.org/en/piet-mondrian/composition-in-c

VS CodeでJavaの未使用インポートを保存時に消す設定

Visual Studio Codeで
Javaのソースファイルにて、
保存時に
未使用インポートを消す。

という設定を見つけましたので、メモしておきます。

Java > Save Actions: Organize Imports
JavaSaveActionsOrganizeImports.png

です。

Macをご使用の方は
「Command + ,」で設定ファイルを開き、「Java import」って検索ワードを打ち込むと見つかると思います。

ちなみに、

Organize は 整理する って意味で、 オーガナイズ と発音するそうです。[こちら](https://www.google.com/search?q=Organize+%E6%84%8F%E5%91%B3&oq=Organize%E3

Ysoserial JDK7u21

## 环境
jdk7u21 ysoserial idea

## 复现
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/9b93766d-c715-ef1d-520a-8b5b59df49b5.png)

“`java
package ysoserial.mytest;

import ysoserial.payloads.Jdk7u21;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class JDK7u21 {
public static void main(String[] args) {
try {
Object calc = new Jdk7u21().get

Cannot apply expression operators to method bindingとなった時の対応方法

– 環境
– CentOS Linux release 7.8.2003 (Core)
– Eclipse IDE for Enterprise Java Developers Version: 2020-03 (4.15.0)
– openjdk version 11.0.7

# 事象 : JSFの「!(否定)」でなぜか怒られている

“`xhtml:hoge.xhtml

“`

“`text:エラーメッセージ
Cannot apply expression operators to method binding
“`

# 原因 : 書き方がいまいち?
英語のサイトが多くていまいちちゃんとした原因わからず。
誰か説明してほ

初心者がObject指向を理解するまでに行ったこと

# Object指向を理解するまでに行ったこと
– Javaの基本文法の復習
– 参考書を読破
– スッキリわかるJava入門 第2版

## そもそもObject指向とは
 参考書には、下記のように記載されていました。
 「オブジェクト指向とは、 **ソフトウェアを開発するときに用いる部品化の考え方** のこと。」
 
 とはいえ、部品化とだけだと理解が難しいと思います。
 そこで、オブジェクト指向を理解するためにこのような手順で理解していきました。

 1. Object指向を使うメリット
 2. Object指向の本質の理解
 3. Object指向の3大機能

### 1. Object指向を使うメリット

 簡単にいうと、楽に開発できることです。
 例えば、複数同じ実装をする時に、Object指向を使うと1回で済みます。
 また、私たちが理解しやすい構造になるため、複雑な内容でもミスを減らし、
 実装できるようになります。

 オブジェクト指向は、
 「プログラミングで作成する仮想世界を現実世界に当てはめること」
 が最大のメリットです。

 したがっって、
 「開発時間を

java エスケープ解析とは

## 前書き

Graalを触っていて、部分的エスケープ解析が何のこっちゃ分からなかったから、調べたメモ。

↓Graal・GraalVMに関して書いた記事
https://qiita.com/kinshotomoya/items/39a821dd6a6a52202c0a

サンプルコードは、scalaで書いています。

## エスケープとは
オブジェクトの参照がメソッドの外や、違うスレッドに存在すること。
エスケープすると、不特定多数の場所からオブジェクトへ参照できる。

## エスケープの条件
実際にのコードでは、どのような場合にオブジェクトがエスケープされていると言えるのか?
主に、以下の3つの条件がある。

1. メソッドの引数に指定
2. returnで返す(戻り値に指定する)

### 1. メソッドの引数に指定

Objectのインスタンスであるaへの参照は、hogeメソッドを超えて参照できる。
fooメソッドからも参照できる

“`scala
case class Object()

object Test {
def hoge: Object = {

【JavaServlet】千里の道も一歩から 四歩目

#進行状況
前回でようやく
`login.jsp → LoginServlet.java → mypage.jsp`
の遷移ができるようになりました。
ちなみに、mypage遷移時のURLは
`http://localhost:8080/ServletApp/mypage.jsp`
となりますが、もし最後の拡張子が気になる場合はweb.xmlに

“`web.xml

mypage
/mypage.jsp


mypage
/ServletApp/mypage

“`

を加えてあげると、遷移時のURLが
`http://localhost:8080/ServletApp/mypage`
になります。

##その他のデータの受け渡し方法
実は、サーブレット間の

SeaserのBeans.copyと存在しないプロパティ

# 主旨

業務で
`org.seasar.framework.beans.util.Beans#copy`
を使うことがたまにあります。

便利なのですが、頻繁には使わないので、使うたびに以下に2点が不安になります。

– コピー元にはあって、コピー先にないプロパティがあるとエラーになる?
– コピー元になくて、コピー先にあるプロパティがあるとエラーになる?

[Javadocもこんな感じ](http://s2container.seasar.org/2.4/s2-tiger/ja/apidocs/org/seasar/framework/beans/util/Copy.html#execute())で上記のことについては書いていないので、テストしてみました。

# 結論

– いずれもエラーにはならない。
– コピー元になくてコピー先にあるプロパティは、影響を受けない(事前に代入された値のまま)。

# 実行したコード

“`Java

import org.seasar.framework.beans.util.Beans;

public class BeansTest {

納期守れない系エンジニアが遅延無しでちょっと頼りにされるまでに学習したこと

#初めに
この記事は、私が納期をまともに守れなかったころから、
遅延しなくなり後輩の遅延を手助けするまでに
学習したことや心がけていること及び失敗談を記述します。
暇つぶしに読んでいただければ幸いです。

#前提:どれぐらいできなかったか
・イケると思った機能が1週間遅延して更にバグまみれ。
・プロトタイプ版開発に時間をかけすぎて仕様変更によって結局遅延。
・ユーザーが欲しいと思った機能が、完成とほぼ同時に不要になってしまった。

この記事の内容は、主観と経験に基づくものが多いです。筆者はよく言っても中堅エンジニア
なので、記述内容が必ず参考になるとは限りません。

#勉強した事
##交渉&見積もり編
**・正確な工数見積もりは「不可能」である事を認識する。**
実際に機能を作る前には、「だいたいどれくらいでできるのか」という事を絶対に確認されます。
その時に、過去の経験からn日でできるな…と考えても、それはたいてい失敗します。
なぜなら、全く同じ機能を2度作ることは殆どない為です。かなり近しい事をしたことがあっても
前回とは違う部分が必ずあります。そして大抵の場合、そこが大きなボトル

Eclipse上でFlywayを追加・設定・実行

# EclipseプロジェクトにFlywayを追加・設定・実行までの手順

今回はmavenプロジェクトでflywayを追加などを説明

## 追加手順

pom.xmlにFlywayのdependencyを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546056/57acfdc6-d199-30ed-bcb7-4d12681fb6b9.png)


org.flywaydb
flyway-core

## 接続設定

pom.xmlに

project > build > plugins の中にpluginを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546056/d7107dbe-a0df-5199-fdb8

【android studio(version4.0)】project作成まで

##androidstudioダウンロード

以下から最新版のandroid studioをダウンロードしましょう。
https://developer.android.com/studio?hl=ja

##newファイルの作成
start a new Android studio projectをクリックしたら新規ファイルが作成されます。
スクリーンショット 2020-06-09 1.43.27.png

ビュー画面のテンプレートを選択します。特にこだわりが無ければEmpty Activityでいいと思います。

スクリーンショット 2020-06-09 1.47.00.png例外の際、waiting for debuggerが再表示されLogcat例外が見れない問題がある

・問題の解決には至っていませんが、原因までは突き止められたので、もしよかったらご参照頂ければと思います。
・アプリ開発の実績があまり無い人間が書いているので間違っている内容かもしれないという事は十分考慮の上ご参照下さい

Android studioで例外が出た際、waiting for debuggerが出てしまって、その時例外を見ようと思ってもLogcatが消えてしまって見れないという問題がありました。

このwaiting for debuggerですがデバッグを開始する時に毎回でます。

出る時でない時があるので、少しどのような条件で出るか試してみたところ下記の様な条件で出ました。
例外は

“`
int[] i = null;
for(int a:i){
}
“`
とnullのint配列に拡張forでアクセスしRuntimeExceptionを発生させました。

Logcatが見える時と見えない時がある為、どのような条件の時見えて、どのような条件の時見えないのか試したところ、下記の様な条件でした。
前提
1.Activityを3つ作成(Activity1、A

ネイティブアプリ実装の選択肢考察(執筆中)

# ❶ はじめに

## 1. 要約
実務経験2年半のWebエンジニアが、はじめてネイティブブアプリを実装するにあたって、どの言語を使用するかの考察をおこないます。

## 2. 前提
今までに経験したプログラミング言語は、Ruby・Python・JavaScript、フレームワークは、Rails・Djnago等です。元々、非理系からエンジニアに転職したので、基礎は結構あまあまです。気合いでいくつもの現場を乗り越えて来ました。今回は知識をしっかりと深めるためにも記事を投稿することにしました。

# ❷ Webアプリとネィティブアプリの違い

## 1. Webアプリ
– Webブラウザー(Chrome・Safari・Firefoxなど)上で動作するアプリケーション。
– OSに依存せずに動作する。そのため、プラットフォームごとの開発が不要。
– オンライン環境で動作する。
– ダウンロードなどの手間がからない。
– 検索・SNS・ダイレクト(URL直打ち)の流入が見込め、チャネルが広い。

※ PWA(プログレッシブ・ウェブ・アプリケーション)を実装すれば、オフライン動作・ローカル通知