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

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

JavaでJanusGraphを組み込む方法

JanusGraphはPythonやJavascriptなど、様々な言語用のドライバを提供しており、それらの言語からGremlinサーバーにアクセスできるようになっているが、DB自体を組み込んだ(Embeddedな)アプリケーションを作ろうと思った場合、選択肢は事実上JavaとGroovyに限られる。

今回はJavaでJanusGraph(with Berkeley DB)を組み込んだアプリケーションの作り方を説明する。

![JanusGraph-article01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235258/d87c9305-b758-5f90-d8cd-883b7a05f614.png)

DBの設定と永続化データはそれぞれディレクトリに保存されるが、それ以外は単体で完結するシンプルなアプリ構成。

## JDKのインストールと環境変数

JanusGraphを動かすだけならJREだけでも良かったが、開発を行うのであればJDKが必要になる。バージョンはJava 8となる。Orac

元記事を表示

今更だけどTDD導入(成功編)

# 前回の話

>今更だけどTDD導入(失敗編)
https://qiita.com/ilohas20983/items/b1ca1edbb2ad600a2b9c

# いろいろ調べて考えたこと

### Q1. 馴染ませるために必要なことって?

TDDをプロジェクトに馴染ませるために必要なことをまじめに考えてみた。

まず、馴染ませるためには**工数が見える**ことが最低条件。でないと誰も作業の承認なんてしない。
工数が見えるためには、**A1. 基準と手順**が必要になるけど、
手順化が必要なレベルの作業をプロジェクトに新しく馴染ませようとすると**すぐ廃れる**。
なら、**A1. 自動化**するしかない。

### Q2. 何を自動化すればいいのか?

すぐ思いついたのは、エラーになっているテストがどれかをわかるようにすること。

つまり、**A2. テスト実行の自動化とテスト結果の自動出力**をすること。
`gitlab-ci`を利用したテストの自動化や、`gradle`のプラグインでテスト結果の自動出力はすぐ実現できた。

**見えるようにできた**では見に行ってもらうと

元記事を表示

Ubuntuにknowledge(wiki)を導入

#概要
情報共有Wikiとして、Ubuntu14.04を入れたPCで[Knowledge](https://information-knowledge.support-project.org/)を動かしたくなった。ローカル環境で実行テストを行うため、Mac Book ProにVagrantを入れて仮装環境を構築しました。
*Vagrantについては少し古いですが[過去記事](https://qiita.com/rerere0101/items/c8846453362fb5393c34)を参照ください*

今回仮想マシンに入れたOSはUbuntu14.04です。ゼロからKnowledgeを動かすまでをメモがてら掲載します。動いた後の図はこちら。結構モダンなUIですね!
スクリーンショット 2020-05-02 1.25.53.png今更だけどTDD導入(失敗編)

# はじめに

自動テストの導入事例に基づく反省と結果をつらつらと書きます。
コストに対するメリットや、そもそも必要なのかは別の話。

|環境|内容|
|:–|:–:|
|OS|Linux|
|開発環境|Eclipse|
|リポジトリ|GitLab|
|FW|SpringBoot|
|FW|Junit|

# 新規システム構築時に導入

### 結果

|自動テスト内容|結果|
|:–|:–:|
|実装|〇|
|指標|△|
|継続|×|

半年くらいでメンテされなくなり、続かなかった・・・。工数は通常より膨らむし、
導入結果の計測できず、だんだんとお荷物扱いに。

テストの指標や共通処理の実装に時間をかけた結果、初期導入は上手くいった。
**初期導入さえ上手くいけば、後は勝手に回り出すと思ったのが間違い。**
改修する内に修正もれがあったり、後回しにされたり、微妙な感じになってしまった。

![コメント 2020-05-02 004613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6302

元記事を表示

Ruby と Perl と Java と Python で解く AtCoder diverta 2019 Programming Contest C

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder diverta 2019 Programming Contest C – AB Substrings](https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c)*
Difficulty: 911

今回のテーマ、文字処理
# Ruby
与えられた文字列を、`BXA` `BX` `XA` でそれぞれカウントします。
この内、`BXA` は `BXA` 同士で合体しても又 `BXA` になりますので、まずこれを処理して、`BXA` の個数を減らします。
同様に、`BXA` と `BX` が合体しても `BX`、`XA` と `BXA` が合体しても `XA` で

元記事を表示

Spockで「where-blocks may only contain parameterizations」のエラー

## Spockで発生したエラー

Spockでテストを実行します。

“`groovy
import spock.lang.*

class DataDrivenSpec extends Specification {

def “a + b == sum”() {
expect:
a + b == sum

where:
a | b || sum
1 | 2 || 3
3 | 1 || 4
}
}
“`

ちなみに、`build.gradle`の設定は次のようにしました。

build.gradle

“`groovy:build.gradle
plugins {
id ‘groovy’
}

group ‘old-spock-sample’
version ‘1.0-SNAPSHOT’

sourceCompatibility = 1.8

repositories {
mavenC

元記事を表示

【新人~若手向け】自宅待機中に資格を取ろう

#はじめに

※この記事は未経験1年目~3年目程度の新人・若手向けです。

#資格を取ろう
突然のコロナ禍。自宅待機になった方も少なくないかと存じます。これを機に新しい言語に挑戦したり、作りたかったアプリケーションを作ろうという方も少なくないかと思います。

そんな中の一つの選択肢として**資格の取得**があるかと思います。

資格を取ると、
– 単純に**スキルアップ**
– 会社によっては**資格手当で昇給**したり、合格祝い金の給付がある
– 常駐の場合、面談で多少有利になる

などメリットも色々あるので資格を増やしておきたいところ。

#ただこの現状
・IPA系試験などの**国家試験は開催中止**になってしまった
・その他の民間試験も小規模開催等の対応をしている
・そもそも極力家から出ない方がいい

という部分もあり、満足に資格も取れない現状。

なら、**家から出ないで試験を受けよう**じゃないか!!

#家から出ないで試験を受けよう

Oracleの
・Java Bronze
・Oracle master Bronze SQL基礎

の試験は、なんと**オンラインで受

元記事を表示

【STS4】MacでゼロからJava開発環境を構築したいんじゃ!

## はじめに

こんにちは!
この世界のどこかのWindowsで、STSを使ってJavaの何かを作成している民です。
家のMacではJava触れてないな…セットアップが面倒だもんな…と思っていたのですが、一念発起してMacでJavaの開発環境をセットアップしてみようと思いました!

基本的にはこれらの記事を参考にさせていただきました!

– [MacにSpring Tool Suiteを導入する](https://qiita.com/segur/items/f9d7b5cdbc02531ffbb0)
– [Spring Tool Suite 4インストールマニュアル](https://qiita.com/kurukuruz/items/3425a6f7a836433ca9f8)

これらを見ながら、[Spring徹底入門](https://www.shoeisha.co.jp/book/detail/9784798142470)と見比べたり、Macに置き換えたりSTS4に置き換えたり、そもそも分からない部分があって都度調べたことも備忘録として残しておきました。この記事はより初心者向け

元記事を表示

【Java】HashMapの要素を拡張for文を使ったループ制御で取得する方法

##開発環境
・ホストOS: Windows10 Home
・ゲストOS: WSL2 Ubuntu20.04 LTS
・VScode ver 1.44.2
・openjdk 11.0.7

##概要
・拡張for文を使ってHashMapの各要素を取得します。配列やリストと比較してやや複雑な文になります。

##サンプルコード

“`java

HashMap map = new HashMap();

map.put(“犬”, 3);
map.put(“猫”, 10);
map.put(“兎”, 5);
“`

##①keyを取得する

**keySet()**メソッドを使います

“`java

for(String animal : map.keySet()) {
System.outprintln(animal);
}
“`

出力結果

“`



“`
(※HashMapは配列やリストと異なり順番が担保されません)

##②valueを取得する

**values()**メソッドを

元記事を表示

MapをMapに変換する(MapのValueを変換する)

# 概要

Mapのvalues()を一括で別のクラスに変換したいとき、どのように書けばよいのでしょうか。
`Map`を`Map` に変換するサンプルで、説明してみます。

# 実装案

## 案1: for文を使う
“`java
public Map strToInt(final Map map) {
final Map ret = new HashMap<>();
for (final Map.Entry entry : map.entrySet()) {
ret.put(entry.getKey(), Integer.valueOf(entry.getValue()));
}
return ret;
}
“`

とりあえずJava 7までの書き方で書いたものです。冗長であり、本質的でないコードが多いですね。

## 案2: Java

元記事を表示

Java Silverメモ

test

元記事を表示

文字列の中に変数を入れる記法

自分はもともとRubyでプログラミングに触れて、eRubyでCGIを書いたりしてたから文字列の中に`{}`でくくった変数を入れるのを多用していたのですが。

~~~HelloWorld.rb
str1 = “Hello”
str2 = “World!”
print “#{str1}, #{str2}\n”
~~~

これをC#で書こうとしたらこうなります。

~~~HelloWorld.cs
var str1 = “Hello”;
var str2 = “World!”;
Console.Write($”{str1}, {str2}\n”) ;
~~~

別解でこういう風にも書けるようです。

~~~HelloWorldAlt.cs
var str1 = “Hello”;
var str2 = “World!”;
Console.Write(“{0}, {1}\n”, str1, str2);
~~~

ところで、最近Javaをはじめたのですが、Javaだとこういう風に書くみたいです。

~~~HelloWorld.java
var str1 = “Hello”;
var str2 =

元記事を表示

こんなコードは嫌だ!現場で実際に見たアンチパターン集

# はじめに
内容はタイトルの通りなのですが、アンチパターンなコードを書いた人をこき下ろす意図は一切ありません。コードを憎んで人を憎まずという言葉もありますしね。[^code]
[^code]: ググってみたら本当にありました。

そのようなネガティブな動機ではなく、アンチパターンからできるだけ教訓を汲み取って前に進もうというポジティブな動機で筆を執っています。

全体的に古い話が多いので、最近はこのようなコードや状況が減っていたらいいな、と願っているところです。

# 環境
* 主にJava 6

# 内容
## Struts1を拡張したオレオレフレームワークの使用
ご存知の方も多いでしょうけど、Struts1はもう何年も前にサポートが切れているので、この時点で嫌な予感しかしないところです。

Strutsをそのまま使うならまだいいんですが、そのプロジェクトでは見出しの通りStrutsを拡張したオレオレフレームワークを使っていました。そのフレームワークでは、1リクエストの処理を書くのに大量のクラスを作成する必要があり、StrutsのActionやFormBean、ビジネスロジックを記

元記事を表示

「徹底攻略 Java SE 11 Silver 問題集」から学ぶオブジェクト指向設計

# 前置き

現在参画している現場でJavaの案件に携わることになりました。
しかし、エンジニア歴15年目になるにも関わらずずっと.NET周りの技術しか扱ってこなかったので、今回が初のJava案件になります。
そこでJavaの基礎知識をゼロベースで学ぶために、Java SE 11 Silver/Goldの取得を目標とした学習を始めることにしました。

学習を始めるに当たり、まずは[徹底攻略 Java SE 11 Silver 問題集](https://www.amazon.co.jp/dp/4295007625/)(いわゆる「黒本」を購入しました。

回答の解説が非常に丁寧に記載されているので、試験対策だけでなく基礎知識を学ぶのに最適な教材だと感じたのですが、自分は書籍内で「参考(試験対策と直接関係ないが、知っておくと有益な情報)」と記載されている箇所に注目しました。

「参考」の箇所でも、特に今後「オブジェクト指向」を深堀りしていくのであれば非常に重要となる記述が散見されたので、今回の記事ではそれらをまとめてみようと思います。

# P51より:不変(immutable)オブジェクト

元記事を表示

【Java】Resource interpreted as Stylesheet but transferred with MIME type text/html

CSSが適用されなくてずっとハマっていた時の話。せっかくなのでここに書き留めておく。
ちなみに、Javaのコードに原因があった話なので関係ない方は参考にならないと思います。

#環境
OS: Windows10
サーバー: Apache Tomcat 9.0.26
Java: JDK13
HTML: HTML5
CSS: CSS3

#ブラウザで警告が出ていた
 CSSは正しくダウンロードされているのに、適用されていない。ブラウザの開発ツールを見ると、この警告が出ていた。

`Resource interpreted as Stylesheet but transferred with MIME type text/html`

*Internet ExplorerやMicrosoft Edgeだと次のような警告になる。

`SEC7113: CSS は、MIME の種類が一致しないため、無視されました`

いくつかのブラウザで試しても同じだったので、サーバー側に問題があることは察しがついた。

#行きついた原因
 原因は、次のコードにあった。クラス名やメソッド名から分かる通り、フィル

元記事を表示

読みやすいコードを意識するために

# 読みやすいコードを意識する

気を抜くと冗長なコードになりがちになるので、意識づけのために
可読性の高くなるポイントについてまとめました。

##条件式を簡潔化

“`java:java
if (a == 1 && b == 2 && c == 3 && d == 4){
System.out.println(“test”);
}

//if 文の条件式を折り返す

if (a == 1 &&
b == 2 &&
c == 3 &&
d == 4){
System.out.println(“test”);
}

//メソッドを作り可読性をあげる
if (output()){
System.out.println(“test”);
}

private boolean isValidType(){
//処理
return true;
}
“`

##ネストが深すぎる

“`java:java
//NG
if(a == 1){
if(b == 2){
if(c == 3){
if(d == 4){

元記事を表示

AWS LambdaのJavaは遅い?

AWS Lambdaで動作するJavaは初回が遅いですが、速くする方法がないか調べました。
末尾にある参考サイトの内容にたどり着いて、実際に試してみたのでその記録です。

レイテンシ情報はX-Rayにて取得しました。

# テスト対象

S3にファイルをPUTするだけのものです

“`java
S3Client s3 = S3Client.builder().region(Region.AP_NORTHEAST_1).build();
PutObjectResponse result = s3.putObject(
PutObjectRequest.builder().bucket(ENV_BUCKET).key(“filename.txt”).build(),
RequestBody.fromString(“contents”));
“`

# 検証1 普通に実行

まずは普通に試してみます。

ソース全体

“`java
package helloworld;

import c

元記事を表示

TabLayoutとViewPagerを利用したタブの実装

初めてQiitaに投稿させてもらいます! 今までは多くの方々の記事を見て、たくさん勉強をさせてもらっていましたが、自分も多くの方々の参考になるような記事を書いていけるよう努めますので、よろしくお願いします。

本題ですが、TabLayoutを使用しているときに、ActivityのToolbarのメニューをクリックしてFragmentのメソットを呼びたかったのですが、分かりやすく書いているページがすぐには見つからなかったのでまとめます。
まずは、TabLayoutとViewPagerを使ったシンプルなタブの実装を紹介します。タブの実装を紹介している記事は多くありますが、この記事ではMaterialDesignを考慮したりして作っていこうと思います。次の記事でActivityからFragmentを操作する方法とFragmentからActivityを操作する方法をまとめようと思います。

# タブの実装(表示まで)

  • TabLayout … ActivityのLayout.xmlに記載するユーザーが操作する「タブ」のバーに値するもの。TabLayoutに個々のタブが動的に
元記事を表示

ActivityとFragment、両方向の操作

前回実装したタブ(TabLayoutとViewPagerを利用したタブの実装 – Qiita)をさらに拡張していきます。今回はActivityからViewPager内のFragmentのメソッドを呼ぶ方法と、ViewPager内のFragmentからActivityのメソッドを呼ぶ方法を紹介します。
#ActivityからFragmentを操作する
##使用例
ActivityのToolbarに作成したメニューがクリックされた時に、Fragment内のEditTextに入力された文字列を保存して、Activityを終了する。
##流れ
1.FragmentにToolbarのメニューがクリックする時に呼ばれるpublicなメソッドを作成する。
2.Toolbarのメニューがクリックされた時、ViewPagerでどのFragmentが表示されているかを取得する。
3.取得されたFragmentによって、1で作成したメソッドを呼ぶ。
4.Activ

元記事を表示

MacOSでのPostgresSQLを用いたJDBCの始め方

## はじめに

JDBCを触る機会があったのですが、個人用の環境でも練習したいと思い、PostgreSQLを導入した際の手順です。基本的には備忘録です。

## 各種バージョン等

- macOS : 10.15.4
- JDK : 13.0.1
- PostgreSQL : 12.2
- JDBC Driver : 42.4.12
- ターミナル : bash

## Homebrewを用いてPostgreSQLをインストール

– [MacにPostgreSQLを導入する方法&初期設定をおこなう](http://vdeep.net/mac-postgresql)

上記の記事を参考にPostgreSQLをインストールします。
以下では、userとpasswordは`postgresql`として説明します。

## PostgreSQL JDBC Driverをダウンロード

– [PostgreSQL公式](https://jdbc.postgresql.org/download.html)

上記ページからJDBC Driverをダウンロードします。

元記事を表示

OTHERカテゴリの最新記事