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

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

Spring SecurityのPreAuthorizeで独自メソッドを呼び出す

Spring Securityのメソッド認可でちょっと複雑なロジックで認可したい場合、任意のbeanのメソッドを呼び出すことが出来ます。

ちなみにカスタム認証を正しく追加したい場合は PermissionEvaluator を実装するのが恐らく正当なアプローチです。
PermissionEvaluatorの実装についてはこちらの記事が分かりやすく詳しかったです。
拡張フレームワーク開発などで汎用的なEvaluatorを追加したい場合はこちらがよいでしょう。
https://www.codeflow.site/ja/article/spring-security-create-new-custom-security-expression

今回はもうちょっとお手軽な方法でも書けるよという手順です。

## Controller側のPreAuthorize定義

“`Controller.java
@PreAuthorize(“@customPreAuthorizer.belongGroup(#groupId, authentication.principal)”)
@

元記事を表示

未経験からIT企業に就職した勉強メモ

29歳IT業界未経験で
某無料プログラミングスクール1.5か月 → 就職
年明け入場予定。(大手)
(ただのメモ)

勉強前のスペック
・macユーザ winも持ってたしいじれるけど苦手
・HTMLは分かる
・ワードプレスでホームページ公開したがことある(ロリポップ使って)
・プログラミングは一切触ったことがない。
・エクセルとワードMOS2003エキスパート所持
 でもマクロとか全然忘れてる

#自分的勉強まとめ(Java)

■就職するまでの勉強
・スクールの勉強 基礎構文→SQL→バグ改修→個人開発
・ドットインストール有料登録
 寝る前とかに15分くらいドットインストールを見ていた。
・個人開発では、在庫管理システムを作る
 mySQLで登録、削除、追加、更新、画像の登録削除更新、キーワード検索、ソート機能など
[→自習が苦手ですぐ人を頼る自分の打開策](https://qiita.com/nekomaru991/items/23431f091f8bf3b47971)

■SES会社に入ってからjavaに関してやった勉強一覧(現在も)
(資格を取ったわけではない)

・Jav

元記事を表示

なんだかんだ使うUtil

##ライブラリ自作

備忘録です
コメントとか適当なのであしからず

“`Utils.java
package util;

import java.util.function.Function;
import java.util.function.Predicate;
import java.util.Arrays;

public class Utils {

/** ————— Object ————— */

/** nullでなけれは真 */
public static final Predicate nonNull = v -> v != null;

/** nullなら空文字に変換 */
public static final Function nullToEmpty = v -> v == null ? “” : v.toString();

/** nullと数値でないものなら0に変換 */
public static final Function

Javaで作る自動販売機のサンプル

#目的
Javaを使ってプログラミングの経験を積むこと

#対象者
Javaの基本を学んだ初学者

#達成目標
フローチャートと機能詳細を元にプログラミングができる。

#フローチャート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190809/e8be6c8c-a893-80d2-f230-147a33a3327e.png)

#機能詳細
・商品リスト初期化
商品は以下の3つ固定とする。
コーラ100円
オレンジジュース120円
水80円

・入金
1円単位で入金可能とする。
購入可能な最低金額が入金されるまで入金を促す。
(今回の場合、水の80円以上)

・商品選択
入金額の範囲で商品を表示する。
商品名で選択する。

・販売
選択した商品を提供する。

・課金
入金額から購入金額を引く。
釣銭を返す。

#サンプルコード
“`
package vm;

import java.util.HashMap;
import java.util.Map;
import java.ut

授業で習ったJavaの復習をつらつらと part2

# はじめに

[part1](https://qiita.com/arch-yzk/items/a8b49c905779cf49b708)を読んでから、もしくはJavaでif文が取り敢えずわかったら読んでね。

今回はpartを前提に、for文や文字入力等、オブジェクト指向ではない部分を取り扱う予定。

# ループ文

Javaにはforとwhileがある。例文を使い分けができればなお良い。

まずはfor文から。

“`java/for.java
public class for
{
public static void main(String[] args)
{
System.out.println(“terminalに1~5を出力”);

//for文で使えるint型のiを定義、制御に使っている
for(int i = 1; i <= 5; i++) //i++ でループする時にiに1を足して再実行できる { System.out.println(i);

プロキシ祭りだ☆ワッショイ!

## プロローグ

デバッグをしていると PKIX path building failed ~
あり~?
昨日まで普通に動いていたのに。
しかし、これは前にも起きたことがあるのでサクっと解決できる。
いま思えば、これが不幸の始まりでした。(所要時間12時間)

## 1.証明書エラーの解決(プロキシなし)

![aws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63018/e2937731-31f4-497e-48c5-1a5387570613.png)

AWS環境では、EC2 with 似非SSLからインターネットに接続しようとして、 PKIX path building failed ~ が発生していたので、javaに似非SSL証明書を登録して解決。

[PKIX path building failed:javaにSSL証明書を追加する](https://qiita.com/ckoshien/items/6072e01760e8e2a0d21c)

## 2.証明書エラーの解決(プロキ

Java(Eclipse)でAWSBatchにジョブ送信

Java(Eclipse)でAWSBatchにジョブ送信を試してみたので共有します。

#前提
AWSBatchで以下が設定されている。
・ジョブ定義名:sample-job-definition
・キュー名:sample-job-queue
・コンピューティング環境名:sample-compute-environment

Eclipseで以下を実施している。
・AWS Toolkit for Eclipseをインストール。
・AWS Toolkit for EclipseにIAMユーザのアクセスキー、シークレットアクセスキーを設定。
・Gradleプロジェクト作成。

#build.gradleの編集、SDKをインストール
`dependencies`に`aws-java-sdk-batch`を追加して、プロジェクトにインストールします。
(プロジェクトを右クリックして Gradleプロジェクトのリフレッシュなどすると処理が開始されます)

“`gradle:dependenciesに追加
dependencies {
…略
compile(‘com.amazon

Java で DataFrame を使う

### DataFrame ご存知ですか?

DataFrame は Python や R言語でデータを扱ったり、機械学習したいときによく使われるとても便利なライブラリ・オブジェクトです。表形式のデータや2次元の配列のデータを扱うための様々な機能が揃っています。

どのくらい便利かというと、Excel や CSV から一気にデータを読み込んだり、2次元配列の任意の行列を抽出したり、表同士を SQL 操作のごとく join したりと、とにかく 2次元データを使う際には欠かせないというレベルです。

でも Java だとこれという DataFrame 相当の実装が無くて、ありがたい DataFrame の恩恵を受けられない、データ処理に時間がかかる、なんで Python じゃないんですかと暴言(?)を吐かれるなどの悲しい目に合うわけです。

### Morpheus data science framework

しかし、そこに一筋の光が。
Morpheus data science f

アップキャスト/ダウンキャスト

初学者ですが、個人的な勉強のため書きました

##アップキャスト

・サブクラスのインスタンスをスーパークラスのオブジェクトに格納することを**アップキャスト**という
・コンパイラは互換性をチェックできればキャストを自動的に行ってくれるので、継承関係であるサブクラスはスーパークラスのすべてのメンバーを保証できるためアップキャストは**暗黙的**に行われる
・スーパークラスとサブクラスに、同じ名前のフィールド変数やメソッドがある場合には、**フィールド変数はスーパークラス、メソッドはサブクラスが優先**される

##ダウンキャスト

・アップキャストとは逆に、サブクラスのオブジェクトにスーパークラスのオブジェクトを格納することを**ダウンキャスト**という
・スーパークラスはサブクラスのすべてのメンバーを保証できないため、スーパークラスからサブクラスにダウンキャストする場合は**明示的に**ダウンキャストを行う必要がある
・アップキャストされていないオブジェクトをダウンキャストすると、ClassCastExceptionの例外が発生するので、**一度アップキャストしてからダウンキャスト

エラーメッセージ出す処理

##エラーメッセージ出す処理

なんか便利そうなの思いついたので備忘録に

“`ErrorMessage.java
package listTest;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

public class ErrorMessage {

public static void main(String[] args) {

// モデルのリストが入力とかされたとする
List models = new ArrayList<>();

// 検知されたエラーメッセージを全種類取得
List eMsgCodes = models.stream()
.map(ErrorMessage::validationLogic)
.flatMap(Collection:

Swift Network.framework Study 20191204「UDP」

# Study
Network.framework
Study:Client側

## 環境

Client:Swift、Xcode
Server:Java、NetBeans

# Client Source Swift

SwiftはNWConnectionに「NWParameters.udp」を設定するだけ。

“`swift
import Foundation
import Network

var running = true

func startConnection() {
let myQueue = DispatchQueue(label: “ExampleNetwork”)
let connection = NWConnection(host: “localhost”, port: 7777, using: NWParameters.udp)
connection.stateUpdateHandler = { (newState) in
switch(newState) {
case .ready:

インターフェイス/抽象クラス/オーバーライド 

初学者ですが、個人的な勉強のために書いたものです

##インターフェイス

インターフェイスとはクラスのような具体的な処理を提供するものではなく、**決まり事**を定めるために明示しとくものであり、実際の処理はインターフェイスを実装したクラスで定義する
これにより、プログラムを複数人で作るような会社の現場では、親の抽象クラスで子クラスに実装してほしいメソッドを抽象メソッドとして定義しておくことで、他の人が作成する子クラスでも、必ずそのメソッドを実装してもらえるという利点がある

**※抽象メソッド**・・・名前/型/引数だけを定義したメソッド

####①クラスから「型」だけ取り出したもの

**※「型」**・・・そのものの**「扱い方を決める方法」**であり、変数を宣言するときに、型を指定するのは変数の扱い方を決めるためである

・注意すべき点は、**扱う対象そのものの種類と、型で指定する「扱うものの種類」は異なる概念**であること。例えると、1という数値をint型で扱うのか、double型で扱うのか変えられるように種類と扱い方は異なるということ

####②ほかのクラスから

[Java] すこしふしぎなsplitの挙動

# [Java] すこしふしぎなsplitの挙動

## 環境

Java8 (のはず)

## splitクイズ

突然ですが問題です。

以下はJavaのコードです。
実行結果はどうなるでしょうか。

第1問!デデン♪

“`java
String test = “a-i-u-e-o”;
String[] tests = test.split(“-“);
System.out.println(tests.length);
System.out.println(java.util.Arrays.toString(tests));
“`

答え

>“`
>5
>[a, i, u, e, o]
>“`

正解しましたか?

次です。 こちらの結果はどうなるでしょうか。

“`java
String test = “–o”;
S

Javaをはじめよう – 開発環境をつくる②

今回は,前回説明していなかったIDEのダウンロード,インストール方法について説明します。
「なんとなくわかる」などの方はこの回をスルーしても大丈夫です。
※**この記事は2019/12/04現在のモノです。表記が古い場合があります**
#Pleiades All in One(Eclipse)の導入
###ダウンロードしよう
ダウンロードリンク: https://mergedoc.osdn.jp/
このページに飛んだら,自分のパソコンの_bit数_に合ったものをダウンロードしてください。
>bit数の確認方法(Win10)
「設定」を開く→左上の「システム」を選択→左の項目を下までスクロールし,「ⓘバージョン情報」を選択→「デバイスの仕様」項目の「システムの種類」に書いてあります。
![mergedoc.osdn.jp_ (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545051/fb7d00bb-e633-949d-0bf6-b62fdb1f4059.png)

64bitの場合は,最新版の

Javaをはじめよう – 開発環境をつくる①

#Javaをはじめよう
Javaのプラグラムを組むときは,**IDE(統合開発環境)**を使いましょう。IDE以外でJavaのプログラムを組むにはメモ帳なども使えますが,こちらは軽めのプログラムを試すときに使いましょう(大規模なプログラムを組むには向いていない)。
#IDEをインストールしよう
まず,IDEとは,Javaなどのプログラムを扱うときに効率よくコードを組めるアプリケーションです。
無償で公開されているものもあります。**JDK**とインストールすれば,すぐに使用することができます。
**追記: 今回説明したIDEにはJDKがセットになっているためJDK単体は不要です!!**
> JDKとは,Java SE Development Kit(Java SE開発キット)の略。無料でインストールができます。
今回は詳しい説明は省きます。

代表的なIDEとして**Eclipse**や**IntelliJ IDEA**があります。
しかし単体だとすべて英語となっているため,日本語したい場合は,**Pleiades All in One**というIDEを使い,EclipseやIntel

Azure BlobStorage SDK Java V8 で BlobItemにテキストを追記(Append)する

BlobItem の TYPE が APPEND BLOBとして作成されていないとAppendできないところがポイントでした。

“`java
package hello.azure.blobstorage;

import java.util.Date;

import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.blob.BlobRequestOptions;
import com.microsoft.azure.storage.blob.CloudAppendBlob;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;

public class WriteData2

MultipartResolverを設定してSpringでファイルアップロードを行えるようにする

# Springでファイルアップロードができるようになるまで
[Spring MVCでJava Config](https://qiita.com/HiroyaEnd/items/17175e947911d84c1b3b)の続編を少しだけ書いてみました。
前回Java Configで設定した内容に加えて、今回はSpringのファイルアップロード設定を行ってアップロードができるようにしていきます。

## 設定方法
設定クラスにMultipartResolverをBean登録していきます。
登録時にメモリサイズ、アップロードサイズの上限値を同時に設定することができます。
FWのマイグレーションとしてこの設定を行う場合は、元々の設定値を調べて設定することで同様の挙動を再現することができます。

“`java
private static final int MAX_UPLOAD_SIZE = 1024 * 1024; //1MB

private static final int MAX_IN_MEMORY_SIZE = 1024 * 256; //256KB

@Bean

クラウドネイティブ時代のApache Camel

こんにちは、レッドハットの駒澤です。
今年のRed Hat Forumでは、Apache Camelの魅力について紹介しました。
Apache Camel はオープンソースのインテグレーションフレームワークです。2007年に産まれて10年以上、IT環境の変化とともに進化してきました。
クラウドネイティブなアプリケーションが増えてくると、連携の組み合わせもより複雑になっていきます。そのような連携をシンプルに開発する仕組みとして、EIPを実装しています。今回は、最新のサーバーレス技術である、Camel Kもデモを交えて紹介しました。

セッション資料:http://redhat.lookbookhq.com/rhft2019-matome/65-25?lx=ChT-oZ

今回私がテーマにしたかったのが、「企業システムにおけるインテグレーションのあり方」です。
長年蓄積されたIT資産は、もはや全体を把握することも難しいくらい複雑になっていますが、少し大きな視点でシステムを見つめ直すと解決策が見えてくるのではないかと思います。
そこで私は、「企業システムをシルクロードのような経済圏として見て

2つのEntityでのやり取りで簡単そうなのに意外と難しかったやつメモ

##難しいというか長かった
完全に備忘録です

モデルが2個あって
PKがかぶってるデータを排除して
のこったデータをリストとして保持する

“`.java
package test;

public class Models {
class Model1 {
private String id;
private String name;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

class Model2 {
private String id;
private String name;

public String getId() {
return id;
}

Java 7以降でのEnumの差別

1.中黒「.」(U+30FB)が使えなくなったため

  例:
  Java 7 以前の場合
   enum 学校 {
      …
      保育園・幼児園
   }
  Java 7 以後の場合
   enum 学校 {
      …
      保育園幼児園
   }