- 1. Automation Anywhere A2019 の共通開発部品であるパッケージを作成する #1~まずはSDKサンプルをそのままビルドして使う
- 2. Spring Boot 2.3のApplication Availability
- 3. Java/Google Sheets API V4/APIキー認証の場合はデータの更新処理(update)は401エラー(OAuth認証が必要)さらにSheetsオブジェクトにcredentialを渡すインタフェースが無い
- 4. Spring BootでDynamoDBのquery methodを使う
- 5. 昔ながらのプログラマが躓いた Android アプリ開発のポイント
- 6. 【Java】わざわざインターフェースを使うのはなぜか(Springもあるよ)
- 7. Spring Boot と Let’s Encrypt でHTTPS
- 8. 学んだこと②〜Mock〜
- 9. 学んだこと①~DJUnit~
- 10. flywayのコールバックをJavaで書く
- 11. MySQLのINSERT … ON DUPLICATE KEY UPDATEでレコードの挿入/更新を便利に実行
- 12. STS(SpringToolSuite)の半角スペースを「u」から「・」に変更する
- 13. 【Java】Word文書の複数列効果を実現する
- 14. Androidアプリを作っていてエラーなどで詰まった所とその解決法
- 15. Javaのカプセル化とゲッターとセッター
- 16. 【JavaServlet】千里の道も一歩から 三歩目
- 17. Ruby vs Java: What makes a perfect fit for your custom software?
- 18. WebSocket通信におけるJSONデータの利用方法 (Java , JavaScript)
- 19. ○ヶ月から、○年○ヶ月に変換する
- 20. JavaによるWebアプリケーション構造とプレゼンテーション層における処理の流れ
Automation Anywhere A2019 の共通開発部品であるパッケージを作成する #1~まずはSDKサンプルをそのままビルドして使う
Automation Anywhere A2019では、「パッケージ」という共通開発部品を作成、配布することでBot作成を効率化することができます。
先日オンラインで開催された[Automation Anywhere社主催Developer Meetup Vol.2](https://rpasouken.com/event-2/webinar/2488/)でも解説されていた内容を参考にしながら概要をまとめてみました。パッケージはJavaのテクノロジーを使ってビルドされていますので、開発にはJavaのビルド環境を整えます。環境として使うのは以下のものです。
* Automation Anywhere Enterprise A2019.12 (ビルド4111) 商用版
* JDK 11
* IntelliJ IDEA Community Edition (Java等の統合開発環境、Eclipseでもよい)+Gradle plug-in v.5.x.x
* Gradle (オープンソースビルド自動化システム)※ スクリーンショットはDeveloper Meetup Vol.2のウェ
Spring Boot 2.3のApplication Availability
[Spring Boot Features – 1.6. Application Availability](https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/html/spring-boot-features.html#boot-features-application-availability)を動かしただけのメモ。
“`gradle:build.gradle
plugins {
id ‘org.springframework.boot’ version ‘2.3.0.RELEASE’
id ‘io.spring.dependency-management’ version ‘1.0.9.RELEASE’
id ‘java’
}sourceCompatibility = ’11’
repositories {
mavenCentral()
}
dependencies {
implementation ‘org.springframework.boot:spring-boot-
Java/Google Sheets API V4/APIキー認証の場合はデータの更新処理(update)は401エラー(OAuth認証が必要)さらにSheetsオブジェクトにcredentialを渡すインタフェースが無い
できないならできないと書いておいて欲しい。=>Googleさん
# 環境
| 項目 | バージョン等 |
|:–|:–|
| java | 1.8 |
| Sheets API Version | 4 |
| スプレッドシートの所有状態 | 所有かつURLを知っていれば誰でも編集可能 |# 症状
– スプレットシートを所有しているアカウントでGoogle API Projectを作成
– Sheets APIを有効可
– APIキーを作成(Sheet API使用を割り当て)
– APIキーを使ってスプレッドシートにアクセス
– 読み込み(get)はOK
– 書き込み(update)で401エラー
– 例外は`GoogleJsonResponseException`
– エラーメッセージ:`401 Unauthorized`# 原因
(どこにも書いてないが)書き込みの場合は、APIキー認証では不可でOAuth2認証が必要な模様。
どこにも書いてないのに、この結論を得られたのは`API Explorer`のおかげ
Spring BootでDynamoDBのquery methodを使う
# 状況
“`java:TweetRepository.java
package com.pontsuyo.anyiine.domain.repository;import com.pontsuyo.anyiine.domain.model.Tweet;
import java.util.List;
import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
import org.springframework.data.repository.CrudRepository;@EnableScan
public interface TweetRepository extends CrudRepository{
@Override
ListfindAll(); List
findAllByType(String type); // <- これはダメという話をします } ``` これはSpringアプリケーションのDBとしてDyn
昔ながらのプログラマが躓いた Android アプリ開発のポイント
# これって何の話?
私は元々 C/C++ や Java で PC のデスクトップまたはコマンドラインで動作するアプリケーションを主に書いていたのですが、いまは Android アプリを書くことが多いです。
昔ながらのデスクトップアプリやコマンドラインアプリの開発から入ったプログラマから見ると、Android アプリの開発には大きなカルチャーギャップがあります。それが原因で Android 開発が思うように行かなかったり挫折しちゃってる人もいるんじゃないかなと思ったりします。
そこで、そんな昔ながらのプログラマのために、押さえておきたい Android 開発のポイントを書いてみたいと思います。# エントリポイントはどこだ?
昔ながらのプログラマにとってコンピュータプログラムは「始まりと終わりが明確にあるもの」です。
たとえば以下のような C のプログラムを見てみましょう。“`c
#includeint main(int argc, char* argv[]){
printf(“Hello, world!”);
return 0;
}
【Java】わざわざインターフェースを使うのはなぜか(Springもあるよ)
# はじめに
javaを学んでいるけれども、インターフェースの使いどころがわからないという方は多いのではないでしょうか。
実際、インターフェースがなくてもプログラムは動きますし、単に動かすだけならない方が楽だと思います。
この記事では、そんな一見すると不要に思えるインターフェースについて書いていきます。以下、通常のJavaのコードとSpringを使ったコードが交互に出てきます。
インターフェースを理解する上で、Springは非常によくできたフレームワークのため、あえて今回併記しました。
どちらも実行結果は同じなので、お好きな方をご覧ください。# サンプルプロジェクト
gradleがよしなにいろいろやってくれます。
実際に実行しないなら、ここはスキップして大丈夫です。“`
$ git clone https://github.com/reta-ygs/interface-demo.git
$ cd interface-demo
“`通常のjavaとして実行
“`
$ ./gradlew pojo
“`Springを実行
“`
$ ./gradlew sp
Spring Boot と Let’s Encrypt でHTTPS
# はじめに
Spring Boot でHTTPS対応のWebアプリを作ります。アプリケーションサーバーは、Spring Bootのアプリ内に自動的に組み込まれるTomcatを使用します。
サーバー証明書はLet’s Encryptを使用してインターネットで信頼される正式な証明書を作成します。なお、HTTPSを利用するには自サーバーがインターネットからアクセスできる必要がありますので、ドメイン名(FQDN)が必要です。私の場合、試験用に使用したサーバーでは以下のDDNSを利用しています。
[私的MyDNS.JP](https://www.mydns.jp/)
https://www.mydns.jp/※ AWSでEC2のサーバーを立ち上げるとパブリックIPアドレスに紐づいたドメイン名が与えられますが、Let’s Encryptのポリシーによりこの名前で証明書を作成することはできません。
### 開発環境
Open JDK 14.0.1 (※)
Spring Boot 4 4.6.2.RELEASE
開発PC Windows 10 Pro 1909
サーバー AWS EC
学んだこと②〜Mock〜
#はじめに
単体テストでMockを使用しているので、簡単にまとめたいと思います。#Mockとは
簡単に説明すると、
**「テスト対象クラスから呼び出される、
部品(他のソース)の代わりになってくれるもの」。例えば、計算結果を出力するテスト対象クラス、
実際に計算をしてくれるサブクラスがあったとする。このサブクラスの代わりをしてくれるのがMock。ということ。
##Mockまとめ
####1.モックオブジェクトの生成
“`java
Sub sub = Mock(Sub.class);
“`
Mockメソッドを使用してモックオブジェクトを生成####2.Mockito.when().thenReturn();
“`java
//aは部品の呼び出し処理
//bは呼び出された部品が返す値
Mockoito.when(sub.getAns()).thenReturn(b);
“`
テスト対象ソースでSubクラスを呼び出しているが、
テストを通すにあたって、Subという部品が完成していない場合、
呼び出し部分でテストが落ちてしまい、最後まで通すことができない
学んだこと①~DJUnit~
#はじめに
私がテスト作業をするにあたって使用している**「DJUnit」**について、
簡単にまとめたいと思います。この記事がこれからテストを初めてやるという方の**入口**として、
少しでも力になれたらと思います。#DJUnitについて
「JUnitとは違うのか?」と最初戸惑いましたが、
どうやらほとんど同じと考えて良いみたいです。1つJUnitと違う点を挙げるとするならば、
DJUnitを実行すると、カバレッジレポートというのが使えるということ。
↓こんなの
![カバレッジ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641913/9182a4d6-d4ef-45ee-798e-8d193266ffad.jpeg)
テストにおけるカバレッジとは何か、、、
簡単に解釈すると、
テスト対象となるソースの全体の何%を確認できたかな(網羅できたかな)ということ!つまりDJUnitは機能的に見ると、
**カバレッジレポートを視覚的に見ることが簡単にできるJUnit**ということになります。
flywayのコールバックをJavaで書く
## はじめに
Gradleとflywayを使ってデータベースマイグレーションをしているアプリで
コールバックをJavaで書いた時に試行錯誤しました。結論からいうと、flywayのタスク実行前にCallbackクラスをコンパイルすれば良いです。
今回検証したコードは以下のリポジトリを参照してください。
https://github.com/mahaker/flyway-callback-java## 環境
Java: OpenJDK 11
Gradle: 5.2.1
flyway: 6.4.2
Postgres: 12## コールバックをJavaで書く
`org.flywaydb.core.api.callback.Callback`インターフェースを実装したクラスを作って
flyway.callbacksプロパティに完全修飾名を設定します。
https://flywaydb.org/documentation/api/hooks#java-based-callbacksまた、flywayのタスクより先にclassesタスクを実行するようにします。※これ大
MySQLのINSERT … ON DUPLICATE KEY UPDATEでレコードの挿入/更新を便利に実行
## 概要
MySQLのINSERT文には”INSERT … ON DUPLICATE KEY UPDATE”という構文があります。レコードを挿入または重複があった場合は更新したい場合に、INSERT文とUPDATE文を別個に書くよりはるかに便利になります。
本記事ではそんな”INSERT … ON DUPLICATE KEY UPDATE”の使い方、便利なポイント、その他仕様についてまとめます。## 準備
以下のようなテーブルを使います。
“` sql
select version();
+———–+
| version() |
+———–+
| 8.0.17 |
+———–+CREATE TABLE users (
id INT(8) NOT NULL,
name VARCHAR(128),
age INT(3),
registered_timestamp timestamp not null default current_timestamp,
updated_times
STS(SpringToolSuite)の半角スペースを「u」から「・」に変更する
SpringFrameworkの学習をするために、STSを導入したが半角スペースがuで非常に見づらいため変更の手順をメモとして残しておきます。
基本的にはEclipseの場合と同じ手順です。# STSバージョン
Spring Tool Suite 4
Version: 4.6.0.RELEASE## 手順
STSのインストール先パス(人によるけど参考までに)
`”C:\Applications\sts-4.6.0.RELEASE\dropins\MergeDoc\eclipse\plugins\jp.sourceforge.mergedoc.pleiades\conf\pleiades-config.xml”`“`
$3 = $3.equals(“·” ) ? “ᴜ” // 半角空白 例:▫ᵁᐡᶸᓑᴜՍ
$3 = $3.equals(“” ) ? “ᴜ” // 半角空白 例:▫ᵁᐡᶸᓑᴜՍ
“`
以上です。それでは良いコーディングライフを。お疲れ様でした。#
【Java】Word文書の複数列効果を実現する
マルチカラムは、新聞、本、雑誌で一般的に使用されている組版スタイルで、読みやすさだけでなく、ページの美しさも向上させます。この記事では、Free Spire.Doc for Javaを使用してJavaアプリケーションのWord文書に複数の列を追加し、、各列の幅、間隔、分割線を設定する方法を紹介します。
**基本的な手順:**
**1.** [Free Spire.Doc for Java](https://www.e-iceblue.com/Download/doc-for-java-free.html)パッケージをダウンロードして解凍します。
**2.** libフォルダーのSpire.Doc.jarパッケージを依存関係としてJavaアプリケーションにインポートします。(Mavenリポジトリから直接JARパッケージをインストールすることもできます(pom.xmlファイルを構成するコードについては、以下を参照してください))。
**3.** Javaアプリケーションで、新しいJava Class(ここではMutiColumnという名前)を作成し、対応するJavaコードを入力して実行し
Androidアプリを作っていてエラーなどで詰まった所とその解決法
https://www.udemy.com/share/101xtQB0ASdFdaRHg=/
Udemyで上記のコースをやっていてエラーなどで詰まった所とその解決法を記録。■AndroidStudioの最新バージョンと動画で使用しているバージョンが違って動画通りに進まなくて詰まった。
→このページから動画で使用されているバージョンをダウンロードして解決。
https://developer.android.com/studio/archive.html#android-studio-2-3-3※他に詰まった所が発生したら追記していきます。
Javaのカプセル化とゲッターとセッター
###カプセル化
何人かで開発するとき、自分がクラスを作る際には他の人がそのクラスを使えるように、使ってほしい機能は公開し、クラスの外で使ってほしくない機能は隠すことです。
具体的にはフィールドとメソッドへのアクセスを制限します。
クラスの外部からアクセスできるようにするには「public」を使い、アクセスできないようにするには「private」を使います。
【例】“`
public String name; //クラスの外部からアクセスできます
private String name; //クラスの外部からアクセスできません
“`
###ゲッター
先ほどの「private」で、フィールドにクラスの外からアクセスすることができなくしました。
しかし、「private」でも、クラス内からはアクセスすることができてしまいます。
どうするかというと、フィールドを「private」にし、クラス外からフィールドの値を取得するために、フィールドの値を返すだけのメソッドを定義します。これを**ゲッター**と呼びます。
ゲッターは「getフィールド名」のように命名するのが一般的らしいです。
【JavaServlet】千里の道も一歩から 三歩目
###現在の進行状況
+ 遷移元のjsp(login.jsp)
+ 遷移先のjsp(mypage.jsp)
+ サーブレットクラス(Login)これだけだとまだ動きません
これから遷移元のjspと起動するサーブレットの紐づけを行っていきます
[一歩目でプロジェクトを作成したとき](https://qiita.com/hatopo/items/3cd12bda5d995703c293#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%97%E3%82%87%E3%81%86)に、[web.xmlデプロイメント記述子を生成する]にチェックをつける事で、以下のよ
Ruby vs Java: What makes a perfect fit for your custom software?
Let’s pay attention to the choice between Java and Ruby performance and the long-term prospects for choosing either one.Java and Ruby performance and the long-term prospects for choosing either one.
WebSocket通信におけるJSONデータの利用方法 (Java , JavaScript)
# 背景
チャットアプリ作成を基準とし、サーバー⇔ブラウザ間でのWebSocket通信の記事を書いた。
サーバーをJava、クライアントをjavascriptで実装。[ソケット通信に関する過去記事]
・[JavaとJavaScriptでwebブラウザとのソケット通信①](https://qiita.com/take4eng/items/d0b009c48ee8c3fe420a)
・[JavaとJavaScriptでwebブラウザとのソケット通信②](https://qiita.com/take4eng/items/ca6d25ac9bdd33d6bb67)今回はチャットアプリを改造しつつ、『JSONデータの取扱方法』について学んでいく。
また、『ソケット通信でのJSONデータの送受信』についても学ぶ。## 目的
1. Java、JavaScriptでのJSONの扱い方法を学ぶ。
2. Webソケット通信においてJSONでのデータの送受信方法を学ぶ。
3. JSONを用いてWebソケット通信の複数パスを実現する。## 前提
この記事では主にJSONの扱い方を中心に記述して
○ヶ月から、○年○ヶ月に変換する
#概要
月数から、年数と残りの月数を求める方法です。(Javaで書いてます)“`
35ヶ月は2年11ヶ月です
“`このような感じ。
#変換方法
コードはこんな感じ。
“`YearMonth.java
public class YearMonth{
public static void main(String args[]){
int monthCount = 35;
System.out.println(monthCount + “ヶ月は” + monthCount/12 + “年” + monthCount%12 + “ヶ月です”);
}
}
“`変数monthCountに格納された35ヶ月が、年月に変換されています。
年とヶ月は別々で計算しました。
年の方は、35ヶ月を12ヶ月(1年)で割り、Math.floorで小数点を切り捨て。
そしてそのままだと小数点が.0と付いてしまったので、前に(int)を置いて整数に。ヶ月の方は、35ヶ月から12ヶ月(1年)を割った余りにすることで計算できました。
JavaによるWebアプリケーション構造とプレゼンテーション層における処理の流れ
##はじめに
新入社員研修において、Javaを用いたWebアプリケーションの開発を行ったので、そこで学んだことを簡単にまとめていきたいと思います。
間違い等も多くあると思いますので、ご指摘してくださると嬉しいです。Webアプリケーションのサーバーサイドにおける処理の流れを中心に取り上げていきます。想定しているサンプルとしては、簡単な1件検索のサンプルになります。
##サーバ間のやりとり
動的なWebページを実装する場合のクライアントとサーバー間における動的な情報のやりとりについて簡単に説明します。まず、クライアントからWebサーバーにリクエストを送信します。このクライアントとWebサーバー間の送受信はHTTPプロトコルによって行われております。動的なWebページを表示する場合、Webサーバー側で何らかの処理(プログラム)を行う必要があります。その処理がWebアプリケーションであり、それをJavaやPHPなどのサーバーサイド言語で実装していくことになります。
今回はJavaでの実装を想定としています。そのアプリケーションを実行するためには、Webサーバーとは別にアプリケーシ