- 1. Mr.Nam 先生の講義要約 Chapter2(進行中)
- 2. とーふのアウトプットブログ (1)
- 3. Java Genericsの型推論とオーバーロード
- 4. Android Studioでplay-services-adsをv21にしたら「Duplicate class com.google.android.gms.internal.measurement.zz〇〇」で競合エラーになった
- 5. ConcurrentModificationExceptionが起こる仕組み
- 6. [2022年]オライリーおすすめ書籍1(参考書)
- 7. JavaGoldSE8に受かったので(中編)
- 8. 【SpringBoot】開発環境作成(BitBucketプッシュ)
- 9. メモ帳コーディング環境構築
- 10. JavaGoldSE8に受かったので(前編)
- 11. 【SpringBoot】開発環境作成(プロジェクト作成)
- 12. OSのロケールが日本語だと、PlayFrameworkのテストが失敗する人たちへ捧ぐ
- 13. PowerShell「私はAtCoder参加できないの…?」
- 14. ABC255A~Dの解答[Java]
- 15. プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(4)
- 16. プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(3)
- 17. プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(2)
- 18. プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(1)
- 19. Seleniumで利用するDriverの自動更新方法(Java)
- 20. SpringSecurity5.7にアップデートしたらUserDetailsServiceを用いた認可ができなくなった
Mr.Nam 先生の講義要約 Chapter2(進行中)
Chapter 02. Spring MVC
∙ 遠隔プログラムの実行
∙ AWSに配布する
——————————————————————————
∙ HTTPリクエストと回答-実習http://52.78.79.190:8080/ch2/requestinfo?year=2021&month=10&day=1
http:// -> getScheme
52.78.79.190 -> getServerName
8080 -> getServerport
ch2 -> getContextpath
requestinfo -> getservletPath
ch2/requestinfo -> getRequestURI
http://52.78.79.190:8080/ch2/requestinfo -> getRequestURL
?year=2021&month=10&day=1 -> getQueryStringyear=2021
yearは名前
とーふのアウトプットブログ (1)
# とーふ、技術ブログ始めるってよ
初めまして、とーふという物です。
プログラミングスクールを卒業して就職したのはいいものの焦って就職を決めてしまい
家電量販・コールセンターSESに入り、ヒイヒイ言ってます。
「流石にこのままではまずい、色々と持たない。心が壊れる」と察して転職活動を開始。
無事に転職が決まって、やっと開発ができるSESに入社が決まった者です。スクールの頃からRubyをメインに触っていたのですが、就職に伴ってこの度Javaを勉強することになったので
どうせならと思い、このように記事を残そうと思った次第でございます。不慣れな記事となりますが、よろしくお願いします。
Java Genericsの型推論とオーバーロード
比較的厳格な型付け言語として有名なJavaにおいて、実行時に型の取り扱いが曖昧になりシステムエラーが発生する事象がありました。
WEB上にそれほどナレッジがなく、事象としても興味深かったので、整理してみました。なお、当記事の前提は以下となります。
– JavaのGenericsやオーバーロードなど、基本的な言語仕様の解説はいたしません。
– 当記事に掲載している実験用ソースコード(コードブロックにファイル名を明記しているコード)は、全てそのブロック単体でコンパイルと実行ができるようになっているので、興味のある方はぜひご自身のローカルで試してみてください。# 環境
Oracle jdk1.8系
“`
% java -version
java version “1.8.0_281”
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
“`# 事象
下記の様な実装にて、ClassCas
Android Studioでplay-services-adsをv21にしたら「Duplicate class com.google.android.gms.internal.measurement.zz〇〇」で競合エラーになった
# 概要
Android Studioで使用しているライブラリを最新にしていったら、「Duplicate class com.google.android.gms.internal.measurement.zz〇〇」の競合エラーが大量に出てきてビルドが通らない。
そこで、原因を調べて、解消してみた忘備録。# 競合が起きるまで
下記のように、Android Studioでbuild.gradle(アプリ、モジュール)を開くと、ライブラリに更新があるものは、色が変わり、ライブラリにカーソルを持っていくと簡単に最新版へ変更することができます。
とりあえず、「更新できるよ」と言われたものは全て更新した状態にしました。
(play-services-locationとplay-services-mapsが重複してますが、これを書きながら気づきました。
ConcurrentModificationExceptionが起こる仕組み
すごく渋い記事なんですが、どうしてConcurrentModificationExceptionがどのように起こるのか簡単にメモしておきます。
ArrayListなどが継承しているAbstractListクラスには`protected transient int modCount = 0;` というフィールドがあります。
ArrayListのremove()などにはこのフィールドをインクリメントする処理が書いてあります。
“`java
public E remove(int index) {
…
modCount++;
// 削除の処理
…
}
“`またArrayListのforEach()などのメソッドを見ると以下のように最初にmodCountをローカルの変数に保存して、それがループごとに変わっていないかをチェックし、変わっていたらConcurrentModificationExceptionを投げるだけです。
“`java
@Override
public void forEach(Consumer s
[2022年]オライリーおすすめ書籍1(参考書)
オライリーのおすすめ書籍を紹介します。
プログラミングやIT系の勉強するときはKindleや電子書籍で勉強するのがおすすめです。
***
[動かして学ぶAI・機械学習の基礎[Amazon]](https://amzn.to/3aFGgQf)

– 第Ⅰ部 モデルの構築
– 1章 TensorFlowの概要
– 2章 コンピュータビジョン入門
– 3章 基礎からの発展: 画像の特徴量検出
– 4章 TensorFlow Datasetsを使った公開データセットの利用
– 5章 自然言語処理入門
– 6章 埋め込みによる感情のプログラム化
– 7章 自然言語処理のための回帰型ニューラルネットワーク
– 8章 TensorFlowによるテキストの生成
– 9章 シーケンスと時系列データの理解
– 10章 シーケンスを予
JavaGoldSE8に受かったので(中編)
# まず初めに
3部構成で読んでいただきたい。
理由としては、ただ単にスクロールが面倒なのと記事ごとで書いている内容を差別化させたいからだ。**ソースコードは自分の環境にてコンパイルをかけていますが、万が一、誤りなどある場合はご指摘ください。**
[前編(本や受験に際しての注意事項)へ](https://qiita.com/Zombie_PG/items/7f1aec26d32dd154762b)
[後編(おそらく筆者の間違えた問題)へ]()
※後編は20200612時点では完成していません。これから記載する予定です。本章では以下を主要トピックとして扱う
・試験に際して、覚えといたほうがいいこと# 【試験に際して、覚えといたほうがいいこと】
## ①ポリモフィズム系
### instanceof演算子について
instanceof演算子は、インスタンス化された変数の参照範囲がどこまでかを見ているという認識。
参照範囲として見れている場合は、`true`が返る。逆に参照範囲ではないが、オブジェクトのサブタイプ(サブクラス)に当たる場合はfalseを返す。
要はダウンキ
【SpringBoot】開発環境作成(BitBucketプッシュ)
SpringBootの開発環境作成2回目です。
今回はプロジェクトのデータをSourceTree(Git管理ツール)を使ってBitBucketにプッシュするまでやっていきます。## 作成内容
[①Springプロジェクト作成](https://qiita.com/nmaolks/items/ac3860d78822d52bb81c)
**②BitBucketプッシュ**
③VPSにデプロイ
④Jenkins自動デプロイ## SourceTree
SourceTreeはGitの操作をGUIで分かりやすく操作できます。
インストールについては割愛します。Createで新規タブを作成。
前回作成したプロジェクトを「参照」で指定します。
一度コミットします。現状ではBitBucketに連携できていません。
でコンパイル、実行でき、メモ帳は初期の文字コード
JavaGoldSE8に受かったので(前編)
# まず初めに
3部構成で読んでいただきたい。
理由としては、ただ単にスクロールが面倒なのと記事ごとで書いている内容を差別化させたいからだ。[中編(試験に際して、覚えといたほうがいいこと)へ](https://qiita.com/Zombie_PG/items/6d0ee864157fa7ab23ed)
[後編(おそらく筆者の間違えた問題)へ]()本章では以下を主要トピックとして扱う
・当日に必要なもの
・受験前について
・結果
・筆者の実力
・本について# 【当日必要なもの】
・身分証2点
→筆者は運転免許証と保険証にした。マイナンバーとかでもいいのかな??・夏場なら上着が必要
→前もって調べた結果、上着が必要とのことでZARAの上着を着ていったが、回収された。(型番調べ方わかりませんでしたすいません。)
明確な定義はないらしいが、**ジャンパー、コート**はだめらしい。
仕方なく、半そでで受けるようになったがクーラーガンガン効いていて寒かった。凍えてた。でも係員の人に言ったら調節してくれた、嬉しい。
→試験後に言ったら、ポケットの中身さえチェックすれば持ち込んでもよ
【SpringBoot】開発環境作成(プロジェクト作成)
SpringBootの開発環境作成をしていきます。
## 作成内容
**①Springプロジェクト作成**
[②BitBucketプッシュ](https://qiita.com/nmaolks/items/43dc670b6184d643c0b1)
③VPSにデプロイ
④Jenkins自動デプロイ## プロジェクト作成
Web(Spring Initializr)もしくはSTS(SpringToolSuite)を使ってプロジェクトを作成します。
今回はWebで作成しました。
依存関係は以下の3つです。
・「DevTools」は開発時、ソースコードに変更があれば自動で再起動
・「Spring Web」はWeb開発ツール
・「Thymeleaf」テンプレートエンジン
 にて、OSのロケールが日本語だとテストが失敗するようです。
“`
% sbt -error test
…(省略)
[error] x when it is located in a subform (and sub-subform) and returns an error it should automatically prefix the error key with the parent form field (45 ms)
[error] ‘0 から 1 の間のサイズにしてください’ != ‘size must be between 0 and 1’ (FormSpec.scala:1507)
[error] Actual: 0 から 1 の間のサイズにしてください
[error] Expected: size must be between 0 and 1
[error] x when it is located in a subform (and sub-subform) and retu
PowerShell「私はAtCoder参加できないの…?」
## はじめに
PowerShellではAtCoderで提出することができないので、PowerShellユーザは他言語で提出する必要がある。だが、PowerShellでもやってみたい・・・。
と、いうことでPowerShellで書いたコードを手元でランダム生成したケースでテストして擬似的にバーチャル参加しちゃおう!という試みをした。今回は簡単な問題で試験をするために[この問題](https://atcoder.jp/contests/math-and-algorithm/tasks/math_and_algorithm_a)を利用した。なお、模範解答生成用のコードはJavaで記述した。## ジャッジシステムの構築
まずはじめにジャッジ用のディレクトリを作成しておくと便利かなと思って作業ディレクトリJudgeを生成し、その中に模範解答用のJavaのclassファイル、判定するコード(今回はMain.ps1としている)を突っ込む。
“`Judge.ps1
“準備中・・・”
New-Item Judge -ItemType Directory | Out-Null #Judgeの生
ABC255A~Dの解答[Java]
## はじめに
このコンテストは企業コンということもあり、若干難しく感じました。急いで書いたコードなので少々汚いです。ご了承ください。では、解説していきます。
## A – You should output ARC, though this is ABC.
問題文は[こちら](https://atcoder.jp/contests/abc255/tasks/abc255_a)普通に配列として受け取って処理しちゃいましょう。
“`A.java
import java.io.*;
class Main{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw = new PrintWriter(System.out);public static void main(String[] args)throws IOException{
//RCの受け取り(String型のまま)
String[] RC
プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(4)
本稿は、[プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(3)](https://qiita.com/tail-island/items/e30c9616bef65e2c36b5)の続きです。
# メソッドを作成して、重複を減らす
でさぁ、ここまでなんとなく書いてきたけど、`System.out.println()`って何なの? 未だに説明がないんだけど。……と、疑問をお持ちの皆様、ついにここで説明します。これはメソッドと呼ばれるもので、それを呼び出しているんです。
## 同じ処理を何回も書くのは苦痛……
こんな計算になんの意味があるのかは分かりませんが、「2と3と5と7と11と13の、それぞれを二乗した結果の合計を求めなさい」というお題のプログラムを考えてみてください。数字の増え方が一定ではないので(あと、配列をまだ勉強していないので)、`for`ループは使用できません。だから、こんなプログラムになります。
~~~java
class SumOfPrimeSquare {
public static void main(String[] arg
プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(3)
本稿は、[プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(2)](https://qiita.com/tail-island/items/5f1b5771533c9d2a7918)の続きです。
# 条件分岐して処理内容を分ける
いろいろ計算できるのは分かったけどさぁ、もう少しエンタメ性がないと勉強していて面白くないよ。このように皆様はお考えだと思いますので、FizzBuzzという、英語圏のゲームで、なおかつ、プログラミングができるかどうかの判定に使われることが多いお題をやってみましょう。
## FizzBuzzとは?
プレイヤーが輪になって数字を1から順に数えていくゲームで、ただし、3の倍数のときはFizz、5の倍数のときはBuzz、そして3と5の倍数のときはFizzBuzzと言わなければならないというゲームです。1、2、Fizz、4、Buzz、6……のように順に言わなければならないわけで、これがやってみると結構難しい。でも、プログラムを組めば、絶対に正解できます。
……プログラムに間違いがなければ、だけどな。
## とりあえず、1〜100まで数えてみ
プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(2)
本稿は、[プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(1)](https://qiita.com/tail-island/items/d9dba4637ed80c586bbd)の続きです。
# 変数とループがあると、ちょっと楽になる
1 + 1なんか、わざわざプログラムを組まなくたって計算できるよ! これが、[前の章](https://qiita.com/tail-island/items/d9dba4637ed80c586bbd)を読んで皆様が感じたことだと思います。でも、もう少し計算が複雑になったらどうでしょうか?
## 複利計算をやってみる
会社に入って一番嬉しいことは給料がもらえることでしょう。世の中やっぱり金だよカネ。この金を増やす方法として貯金とか投資とかがあると噂に聞きました。毎月1万円を、月の利回り1%で運用したらどうなるか、プログラムを作って考えてみましょう。
利回りが1%ということは1.01倍すれば良くて、最初は0円スタートなので、最初の月は`0 * 1.01 + 1`で表現できそう。翌月はその1.01倍に1を足せばよいので、`(
プログラミング未経験で新人研修でプログラミングをやらされている皆様へ(1)
新人研修の季節ですね。いろいろな会社で、今までプログラミングをやったことがない新人に無理やりプログラミングを学ばせるという蛮行がまかり通ってしまう季節です。
でね、中学高校大学と英語を勉強してきた私が英語を喋れないことから明らかだと思うのですけど、わずか数ヶ月の新人研修でプログラミング「言語」をマスターするのは無茶だと思うんですよ。しかも新人の中にはプログラミング経験者という帰国子女がいて、それと同列に評価されるという無茶な状況です。
しかも、教える側は教育のプロフェッショナルではありません。文学部日本文学科卒業で、役に立たない学科なんだから取っておけと言われた教員免許を単位不足で取れなかったこの私ごときが、新人研修の講師をやっています。教材とかも、素人が作っているくさいしね。
というわけで、できなくて当然……なのですけど、将来に関わるかもしれませんから、どうにかして研修をクリアしなければなりません。このような状態に陥ってしまった皆様、お時間があるときに本稿を読んでみてはいかがでしょうか?
## 本稿の前提
* プログラミング言語は、Java SE 8を使用します。私が所属す
Seleniumで利用するDriverの自動更新方法(Java)
個人開発でseleniumを利用しているのだが、Chromeが頻繁に更新されるので、手動更新がめんどくさくなった。
自動更新の仕方を調べ、実際にコーディングし、意図する結果になっているので、整理しておく。**※多少雑だが個人的備忘なのでご了承ください。**
なおPythonの記事は以下で記載しているので参考まで。
# 環境情報
– Java8
– Gradle6.7.1
– Windows 10
– eclipes photon※なお対象のdriverはchromedriver
# 実装
– build.gradleに以下の記述を追加“`
dependencies {
implementation ‘org.seleniumhq.selenium:selenium-java:3.12.0’
compile group: ‘org.seleniumhq.selenium’, name: ‘selenium-chrome-driver’, version: ‘3.12.0’//これ無くても動くかも
compile group: ‘io.github.bon
SpringSecurity5.7にアップデートしたらUserDetailsServiceを用いた認可ができなくなった
## 前提
SpringSecurity5.7から書き方が大きく変わります!
詳細は以下の公式ブログにて解説がありますが、
`WebSecurityConfigurerAdapter`が`@deprecated`になります。https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
以下の記事もお世話になりました。
https://qiita.com/suke_masa/items/908805dd45df08ba28d8
## 困ったこと
もともと`UserDetailsService`を用いてDBに登録されているユーザーを認可していたのがSpringSecurity5.7以降でできなくなりました。
### before
“`SecurityConfig.java
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigure