- 1. 【Java】気付きにくいけど恐ろしく遅くなるコード
- 2. 項目57 ローカル変数のスコープを最小限にする
- 3. ゼロから始めるScala (環境構築 mac)
- 4. ChromeDriver 通知バー消す方法 (Java)
- 5. [Java]メソッド
- 6. R50のリープフロッグ ~ 西暦2020年の今、偏差値50のプログラマを目指すお前が学ぶべきこと
- 7. JConsoleでJMXに接続してもすぐ切断される(泣)
- 8. 【Android9.0 Pie Java】チャットアプリで横スワイプ→ダイアログ表示→削除を実装する
- 9. Rubyを学習後にJavaを勉強した人が感じた主な二つの言語の違い Part1
- 10. 日本語を表示する Servlet の簡単な例
- 11. Javafxで簡単なゲームを作ってみた① ”幸せを探そうゲーム”(未完成版②)
- 12. Java(Spring)でMapperを使う
- 13. MyBatisで動的SQL文を作る【複数のワードで検索できるようにする】
- 14. aws-sdk-java-v2に追加されたS3Presigner
- 15. IM-Juggling とは
- 16. Javafxで簡単なゲームを作ってみた① ”幸せを探そうゲーム”(未完成)
- 17. Java 標準ライブラリの com.sun.net.httpserver で簡易的な Web サーバを作る
- 18. 書くときにも発生する MalformedInputException
- 19. 制御フローを読みやすく
- 20. Dagger2 – Android Dependency Injection
【Java】気付きにくいけど恐ろしく遅くなるコード
## 目的
レビューをしていてIntegerだったりintだったりが混ざったコードに出会いました。
オートボクシングで変換掛かるから問題ないかなと一瞬思ったけど、性能面はどうなんだろうと気になってしまったので検証してみたいと思います。## 検証環境
– Eclipse Oxygen.3a Release (4.7.3a)
– Java8## 検証用ソースコード
**1.参照型とプリミティブ型が混ざったパターン**“`java:qiita.java
long begin = 0L;
long end = 0L;begin = System.currentTimeMillis();
Integer sum = 0;
for(int i = 0; i < 1000000; i++) { sum += i; } end = System.currentTimeMillis(); System.out.println(end - begin + "ミリ秒"); ``` **2.プリミティブ型のみのパターン** ```java:qiita.java long be
項目57 ローカル変数のスコープを最小限にする
### 前提
java開発歴1ヶ月程度の新人が、Effective Javaを読んで学習した内容をアウトプットするために書いています。自分の解釈を噛み砕いて解説し、初心者が読んでもできるだけ理解しやすい記事を目指しています。###【ざっくり】
ローカル変数のスコープを最小限にすることで、コードの可読性と保守性が向上し、ミスが生まれる可能性を減らすことができる。####【悪い例1】
“`java:badPractice1
String hoge = “hoge”;
int fuga;
double piyo = 0.1;doSomething(hoge);
… //何らかの処理
doSomething(fuga); // fugaの型なんだっけ? 初期値なんだっけ?
… //何らかの処理
{
doSomething(piyo) // piyoの型なんだっけ? 初期値なんだっけ?
}“`
– 読み手の注意を逸らしてしまう。
-> どのような処理を行っているかを理解しようとしているのに、変数の記憶に脳のリソースを使ってしまう。
– 読
ゼロから始めるScala (環境構築 mac)
# Scala をはじめよう
## Scala とは?
プログラミング言語の1つ。
「オブジェクト指向」と「関数型プログラミング」の両方の性質を併せ持つ (両方できる二刀流)。
## Scala の「良さ」
* オブジェクト指向と関数型プログラミングの両方を表現できる。
* オブジェクトの「不変性」が意識された設計
* 高いモジュール性
* Java と互換性がある (Java のライブラリを使うことができる)
* 非同期の計算ができる `Future` ライブラリを標準装備
* 並列・分散プログラミングのためのライブラリ `Akka` がある## インストール on Mac
`Homebrew` を使うのが簡単だと思う。
環境構築は全部こいつでなんとかなる(気がする)。
### 探す
“`console
# scala (本体, しかし前提として Java が動く環境が必要 – 後述)
$ brew search scala
==> Formulae
scala scala@2.11 scala@2.12 scalaenv sca
ChromeDriver 通知バー消す方法 (Java)
# Selenium (ChromeDriver) での「自動テストソフトウェアによって制御されています]という通知バーを削除する方法
|![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/0f385dee-a0d5-dd2b-7480-ca7250710894.png)|
|:–|
この表示邪魔ですよねー。通知バーを消すと、デベロッパーモードを無効にしますか?とポップアップが出てしまい、
なかなか方法が見つかりませんでしたが、合わせ技で通知バーを消すことができたので記事に起こしておきます。“`
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;ChromeOptions options = new ChromeOptions();
options.setExperimentalOption(“excludeSwitches”
[Java]メソッド
#メソッド定義
`public static void メソッド名(){処理;}`“`java
public static void hello() {
System.out.println(“hello world”);
}
“`#オーバーロード
`引数の型、個数を変えることで可能`
同じメソッド名で引数が違う“`java
public static void hello() {
System.out.println(“hello world”);
}public static void hello(String name) {
System.out.println(“こんにちは” + name + “さん”);
}
“`
R50のリープフロッグ ~ 西暦2020年の今、偏差値50のプログラマを目指すお前が学ぶべきこと
#タイムスタンプ
初回投稿日:2020年6月26日
最終更新日:2020年6月27日#対象読者
この投稿は、ちょうど20年ほど前にソフトウェアエンジニアとしてのピークを迎えていた当時30歳くらいの自分自身に宛てて書いた手紙です。
したがって、この内容は個人的なものであり、くたびれた老兵の戯言であり、ピントがずれ時代を捉えきれておらず、網羅的でもなければ他者には通じないアナロジーに溢れていて、多くの方にとって役に立たないばかりか、酷い勘違いや致命的な間違いを含んでいるかもしれません。
とは言うものの、現在の私のように、今もなお 20 年前の知見や思考パターンが生活のベースになっている方、新しい知識や用語は押さえているもののそれが今一つ自身の血肉になっていないと感じている方、最近の技術トレンドを押さえたいけれど情報の洪水に溺れそうになり何から手を付ければいいかわからないという方にとっては、あるいはこの記事が役に立つようなことがあるかもしれません。
[](////////////////////////////////////////////////////////////
JConsoleでJMXに接続してもすぐ切断される(泣)
JMXにjconsoleを使って接続しても一瞬繋がるけどすぐ切れる現象に遭遇
openjdk14.0.1 のjconsoleから接続していたけれど
openjdk12.0.2 にしたら切れなくなりました。ちなみに環境は
サーバー(JMX) CentOS7 + JDK1.8.0_211
クライアント(jconsole) ubuntu20.04
【Android9.0 Pie Java】チャットアプリで横スワイプ→ダイアログ表示→削除を実装する
## 環境
Android9.0 Pie Java## はじめに
最近Android Javaでチャットアプリを作成していまして、LINE風のチャット一覧削除を実装しました。
RecyclerViewのリスト表示と削除機能の記事は結構ありますが、`横スワイプ→ダイアログ表示→削除
MainActivity + 複数のFragment構成`の実装例は日本語の記事では見つからなかったので共有させて頂きます。
(ベストプラクティスかは怪しいので参考程度にお願いします。。ご指摘大歓迎です!)こんな実装ができます
![243e5a5ccb079ad0d385004d69a930ba.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285286/3f39bf3a-7993-5e79-1c9c-6af03bf1d8f4.gif)## 完成品URL
非常にコンテンツが長いので、完成品を取り合えず手に入れたい方はこちらからどうぞ。
https://github.com/yuta-matsumoto/
Rubyを学習後にJavaを勉強した人が感じた主な二つの言語の違い Part1
Javaの文法を勉強し始めRubyと比べてややこしいルールが多いのでメモしておく。
###出力
“`
System.out.println “Java”; //これでRubyのPutsと同じ役割 コードの終わりに;を打つ
“`###変数とデータ型
Javaで変数を定義するためには、
①変数にいれる値のデータ型を指定する、②変数の名前を決める、
という2つが必要。“`
int number = 7;String name = “佐藤”; //String(文字列)型はのsは大文字
double syosu = 3.14;
“`###キャスト(強制的に型変換)
“`
int number1 = 7;
int number2 = 2;System.out.println(number1 / number2); //結果は3
System.out.println((double)number1 / number2); //結果は3.5
“`###真偽値 boolean型
“`
System.out.print
日本語を表示する Servlet の簡単な例
次の表示を出すサーブレットです。
![servelet_jun25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/d7f4fab1-e73f-2e94-72da-015fa1dae0f3.png)フォルダー構造
/var/lib/tomcat9/webapps 以下に次のフォルダーを置きます。“`text
$ tree /var/lib/tomcat9/webapps/hello
/var/lib/tomcat9/webapps/hello
└── WEB-INF
├── classes
│ ├── HelloWorld.class
│ ├── HelloWorld.java
│ └── Makefile
├── lib
└── web.xml“`
“`jave:HelloWorld.java
import java.io.*;
import javax.servlet.*;
import javax.serv
Javafxで簡単なゲームを作ってみた① ”幸せを探そうゲーム”(未完成版②)
#Javafxで簡単なゲームを作ってみた①
##”幸せを探そうゲーム”(未完成)②
![happy_unhappy_game2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527593/ece74ea6-1523-e130-043f-2d04d5765320.gif)“`
import javafx.ui.*;
import javafx.ui.canvas.*;
import java.util.Date;
import java.lang.Math;
import java.lang.System;
import timer.Sound;public class Timer {
private attribute elapsed: Number;
public attribute seconds: Number;
public attribute minutes: Integer;
public attribute hours: Integer;
public attribute cou
Java(Spring)でMapperを使う
#やったこと
Java(Spring)でMapperを使ってデータベースを扱ってみました。
#準備
jarファイルをダウンロードするなりしてMapperが使えるようにする。
Spring Tool Suiteを使っている場合、プロジェクト作成時にMyBatisを選択しましょう!#フォルダ階層
![スクリーンショット 2020-06-25 18.59.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577071/e21ab019-92be-bb3a-d68e-648438dc63a7.png)
なんだか恥ずかしいのでプロジェクト名は隠しております。
#コード
##mapperクラスにはこんな感じで書きます。“`java
@Mapper
public interface UserMapper {
@Insert(“INSERT INTO users (userId, username, password) VALUES (#{userId}, #{username}, #{pa
MyBatisで動的SQL文を作る【複数のワードで検索できるようにする】
#やりたいこと
キーワードを+ 全角スペース→半角スペースに変換(編集①)
+ 2個以上の半角スペース→1個の半角スペースに変換(編集②)
+ 先頭と末尾のスペースを削除(編集③)したうえで、カテゴリーと併せてキーワードをOR検索(スペースで区切った**いずれかのキーワードが含まれているものを検索**)したい。
#環境
使用OS-Windows10
使用ツール-Spring Tool Suite 4 4.6.2
テンプレートエンジン-Thymeleaf
フレームワーク-mybatis#結果(xmlファイルの記述)
“`xml
SELECT * FROM item_table
WHERE cate_id = #{category}
AND
aws-sdk-java-v2に追加されたS3Presigner
## TL;DR
– AWS SDK for Java 2.0に、S3Presignerが追加された
– virtual-hosted styleにデフォルトで対応
– httpsにデフォルトで対応
– 有効期限の設定方法が変更
– 署名付URLの生成には、S3Presignerを使用しましょう## はじめに
この記事は、JavaやScalaでAWSを利用するバックエンド、およびSRE業務に従事する人を対象にしています。## S3の署名付URLとは
S3には、オブジェクトのダウンロードとアップロードのために発行するURLに署名をつけることによって、そのオブジェクトへのアクセスを制限する仕組みがあります。
## AWS SDK for Java 2.10.12以前
AWS SDK for Java 2.10.12以前では、AwsS3V4Signerを使用して、Presigned URLを生成していました。
以下、サンプルコードは、scalaで記述しています。“`scala:before.scala
import software.amazon.awssdk.auth.
IM-Juggling とは
# 序文
IM-Jugglingとはなんぞやって質問が後輩から飛んできた。
IM-Jugglingについて言及して居る記述は[intra-martの公式サイト](https://www.intra-mart.jp/document/library/iap/public/setup/iap_quick_setup_guide/texts/create_war/create_project.html)では以下の記載となっております。> IM-Juggling はモジュールの管理、WARファイルのリモートデプロイを実行できる環境構築ツールです。
> このツールを使用し、新しい機能の導入や不具合修正の適用をします。質問してきた後輩は物理ネットワークの出身でWebアプリケーションに明るくない。
ましてや「“イントラマート“」って言われても何のことかわからない。
後輩なりに色々調べてWebアプリケーションっぽいってことは理解した様なのですが、
具体的には理解できていない様だった。幸いな事に私の所属している組織ではintra-martを利用しており、
[イントラマート社](htt
Javafxで簡単なゲームを作ってみた① ”幸せを探そうゲーム”(未完成)
#Javafxで簡単なゲームを作ってみた①
##”幸せを探そうゲーム”(未完成)
“`sample.java
package happy_unhappy_game;import java.util.Random;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;public class Sample extends Application {
public static void main(String[]args) {
launch();
}public
Java 標準ライブラリの com.sun.net.httpserver で簡易的な Web サーバを作る
## 概要
– Java 標準ライブラリの com.sun.net.httpserver パッケージを使用して簡易的な Web サーバのサンプルを作る
## com.sun.net.httpserver とは
com.sun.net.httpserver は HTTP サーバを構築可能な Java パッケージ。
[com\.sun\.net\.httpserver \(Java SE 14 & JDK 14\)](https://docs.oracle.com/javase/jp/14/docs/api/jdk.httpserver/com/sun/net/httpserver/package-summary.html)
> 組込みのHTTPサーバーの構築に使用できる、単純で高度なHTTPサーバーAPIを提供します。 「HTTP」と「HTTPS」の両方がサポートされています。 APIは、RFC 2616 (HTTP 1.1)およびRFC 2818 (HTTP over TLS)の実装の一部を提供します。 このAPIで提供されないHTTP機能は、APIを使用してアプリケーション
書くときにも発生する MalformedInputException
自分が書いた Java プログラムが以下のエラーを出力した。
“`java
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:306)
at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:281)
at java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
at java.base/java.io.OutputStreamWriter.write(OutputStreamWriter.java:211)
at java.base/java
制御フローを読みやすく
#制御フローを読みやすく
Readableコードを読んだので
制御フローを読みやすくする方法を書いてみる##条件式の引数の並び
“`java
if(length >= 10)
if(10 <= length) ``` どちらも同じ意味を持っているけど最初の方が読みやすい ###変化する値は左辺へ、変化しない値は右辺へ 先ほどの例だと10という定数を右辺へ、 lengthという変数を左辺へ持ってくると読みやすくなった。 日本語でも 「もし私が20才以上なら」 「20才が私の年齢以下なら」 を考えた時、前者の方がわかりやすい。 私の年齢は変化をしていくが20才は定数だ。 変化する値は左辺へ、変化しない値は右辺へは自然言語と同じ順にすることで 理解を容易にできることがわかる。 ##三項演算子 三項演算子はとても便利。 以下のように使うと助長なif-else文を短くできる ```java if(hour >= 12) {
time_str += “pm”;
} else {
time_str += “am”;
}//三項演算子を使う
time_str
Dagger2 – Android Dependency Injection
#DIとは
Dipendency Injection(DI)、「オブジェクトの注入」のこと。要するに、依存性を自由に差し替えれるようにすることで、テストを実行しやすくしたり(モックを差し込む)、オブジェクトをそれぞれ管理できるようになる。
#AndroidにおけるDIの必要性
例えば、SharedPreferencesにデータを保存したい場合、DIなしで実行すると、SharedPreferencesからデータをインスタンス化、保存、取得することになり、すべてアクティビティに似たような記述をしなければならない。
この方法でアプリが大きくなると、最悪の場合改修不可能になる可能性がある。
なのでSharedPreferencesを毎回アクティビ