- 0.0.1. 10進数→2進数変換は難しすぎて筆算じゃないとできないよ!!
- 0.0.2. 【Kotlin/Android】Listenerのかきかえ
- 0.0.3. javacとjavaのバージョンを何度試しても合わせられない原因は、謎のJavaにあった
- 0.0.4. Androidアプリを初めてPlay Storeへリリースした話。
- 0.0.5. Long型配列の降順ソート(Java)
- 0.0.6. Spring Boot エラーページの最低限のカスタマイズ (ErrorController インターフェースの実装)
- 0.0.7. Spring Boot の Whitelabel Error Page と JSON レスポンス
- 1. Whitelabel Error Page
- 1.0.1. Javaプログラミング (変数とデータ)
- 1.0.2. db の接続のメモ
- 1.0.3. [ java ] 抽象クラス
- 1.0.4. スレッドセーフなリスト
- 1.0.5. 25歳専門新卒がSESに就職して半年が経ち、転職を決意。
- 1.0.6. Streamの生成処理
- 1.0.7. vue.config.jsの活用例
- 1.0.8. 自作家計簿
- 1.0.9. SWTアプリでダークモードしたい
- 1.0.10. 動的Webプロジェクトの国際化
- 1.0.11. Rails と Java Servlet + JSP によるWEBアプリ開発の比較
- 1.0.12. Javaの入門テキスト
- 1.0.13. java 回転コマンドの作成
10進数→2進数変換は難しすぎて筆算じゃないとできないよ!!
#2進数変換は高校数学で習った
某国立大学情報学部に通う僕は、最近情報科学系の実験で2進数をよく使うようになってきました。
実験では、FPGAと呼ばれる集積回路を積んだ基板のようなボードのようなものに、設計した論理回路を送り込んで「1たす1ができたぞおおお」みたいな小学生のような大学生のようなことをしています。
意味わからないですよね、符号つき2進数は正の数と正の数を足して負の数になったりするのですから面白い。
しかしながら20年間慣れ親しんできたのは10進数ですし、物事は基本的に10進数で考えます。僕の脳ミソは仮面ライダーゼロワンではありません。(実際の仮面ライダーは見ていないので知りません)
流石に、5〜6桁くらいまでは暗算でも10進数⇔2進数の変換はできますが、それ以上の桁数になると、計算機を使うか手計算をします。
今回の記事では、最近古いパソコンを漁っていたら昔作った10進数→2進数変換プログラムが発掘されたので、ご紹介しようと思います。#まずはプログラムを
今回はjavaで書きました。
大学1年生の頃はjavaしか触れなかったので、この世には日本語と英語とjavaしか言語
【Kotlin/Android】Listenerのかきかえ
“`main.java
// idがswitchButtonのSwitchを取得
Switch switchButton = (Switch) findViewById(R.id.switchButton);
// switchButtonのオンオフが切り替わった時の処理を設定
switchButton.setOnCheckedChangeListener(
new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton comButton, boolean isChecked){
// オンなら
if(isChecked){
}
// オフなら
javacとjavaのバージョンを何度試しても合わせられない原因は、謎のJavaにあった
# 環境
購入元: 株式会社マウスコンピューター
ノート/デスクトップ: デスクトップPC
OS: Windows 10 Home 64ビット
CPU: インテル(R) Core(TM) i5-7400 プロセッサー ( 4コア / 4スレッド / 3.00GHz / TB時最大3.50GHz / 6MBキャッシュ )
メモリ: 16 GB (購入時点では8 GB)
HDD: 1TB HDD ( 7200rpm / 6Gbps 対応 )
SSD: 無し
グラフィックス: インテル HD グラフィックス 630
下記内容の実施日:2019年11月12日# Hello worldで実行エラー
Javaを始めようと思い、環境構築のためEclipseとJDKをインストールし、Eclipseを日本語化した。
早速「Hello world」を出力しようと思い、ほぼコピペのコードをHello.javaに保存し、
`> javac Hello.java`
でコンパイル成功。
`> java Hello`
で実行したが、エラーが発生。“`
Error: A JNI error has occ
Androidアプリを初めてPlay Storeへリリースした話。
#概要
## 自己紹介
どうも、関東圏のWeb業界で活動しているフリーランスエンジニア(26歳)です。
正直に申しますと、Androidアプリ自体を今回初めて作ったので、Android業界における常識的な営みはまったくわかりません。##何の記事?
先に言っておきますが、開発時に感じたことや技術ノウハウ等は当記事では触れません。
あくまでも、こういうアプリを作ってリリースする時にこういうことをしたよ、というようなことを簡単に書いていきます。#なんのアプリを作ったの?
Duolingoに登録されているユーザのアカウントと同期化し、Duolingoで学習した全ての単語から探したい単語を簡単に検索することができるAndroidアプリです。さらに、単語リストから参照したい単語をタップすると、翻訳や品詞といったその単語の詳細情報も確認することができます。https://play.google.com/store/apps/details?id=dev.app.ks.thinkit.duovoc
要点をまとめると以下のような感じです。
– Duolingoで学習した単語を管理できる。
Long型配列の降順ソート(Java)
# Long型配列のソートはTLEする
以下問題で、Long型の降順ソートが必要になり、**TLE**してしまいました。
https://atcoder.jp/contests/abc123/tasks/abc123_dlong型配列のソートの計算量は、$O(NlogN)$なのに、
**Long型配列のソートの計算量は、$O(N^2)$になる**ようです。| long[]のソート | Long[]のソート |
|—————–|—————–|
| $O(NlogN)$ | $O(N^2)$ |じゃあlong型配列だけ使えばいいかと思いきや、
**long型は降順ソートできない**という問題がありました。
(compareToメソッドがLong型配列でないと使えない)“`java:昇順ソートはlong型で実行可能。
long a[] = {略};
Arrays.sort(a); //long型なのでO(NlogN)
“`“`java:降順ソートはLong型でないと出来ず、
Spring Boot エラーページの最低限のカスタマイズ (ErrorController インターフェースの実装)
## 概要
– Spring Boot のデフォルト設定では 404 Not Found や 500 Internal Server Error が発生した際に Whitelabel Error Page や JSON が返される
– Web ブラウザからのアクセスには HTML を返すようになっている
– curl などのマシンクライアントからのアクセスには JSON を返すようになっている
– 独自に設置した error.html や error/404.html では JSON が返されるのを止めることができない
– ErrorController インターフェースを実装したクラスを用意してエラー時に返す HTML や JSON をカスタマイズしたほうが良い
– 今回の動作確認環境: Java 11 + Spring Boot 2.2.1## 最低限のエラーページ実装例
エラー発生時はすべて 404 Not Found として表示する。
### ErrorController インターフェースの最低限の実装クラス
“`java
import org.sprin
Spring Boot の Whitelabel Error Page と JSON レスポンス
Spring Boot のデフォルトの状態では、404 Not Found 等が発生した際に Whitelabel Error Page というエラーページが表示される。
“`
Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Nov 18 22:16:56 JST 2019
There was an unexpected error (type=Not Found, status=404).
No message available
“`curl で同等の動きを確認するには -H オプションでリクエストヘッダに accept: text/html を指定する。
“`
$ curl -H “accept: text/html” http://localhost:8080/
Whitelabel Error Page
This applicat
Javaプログラミング (変数とデータ)
#プログラミングと変数
この記事では変数について紹介します。変数はプログラミングで避けては通れないものです。結局、プログラミングは変数を操作してどうなっていくかとか、情報をやり取りさせるわけですから。
##変数の型
Javaでは変数に型というものが定義されています。
「これは文字列の型」とか「整数の型」、「実数の型」とかいろいろあります。
一覧にすると|型|中身|
|—|—|
|String|文字列|
|int|整数|
|double|実数|
|boolean|真 or 偽|
他にもありますがこれくらい知っていればいいでしょう。
##変数の使用
Javaでは変数は勝手に使っていいものではないです。
使う前に、この文字をこの型の変数で使いますと宣言しないといけません。“`java
double a;
int b;
String c;
boolean d;
“`
こうすることで例えば変数に“`java
a = 0.5;
a = a + 1.2;
“`
この時点で変数aは1.7となります。
ちなみに、変数に何も入っていない状態ではnullという状態になっています
db の接続のメモ
#DB接続メモ(大雑把に書きました)
“`java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;Connection con;
preparedStatment pstmt;
ResultSet ts;//1.DBと接続
con = DriverManager.getConnection(
“jdbc:mysql://(DBのアドレス)”,
“(sqlid)”,
“(sqlpassword)”
);//2.dbとやり取りする
pstmt = don.prepareStatement(sql文);//3.selectb分の実行と結果を代入
rs.pstmt.executeQuery();//4.結果を表示
while(r
[ java ] 抽象クラス
前回の記事ではインターフェースについて述べた。
https://qiita.com/QiitaD/items/835ed6ee4e52cb6b214a
今回は、インターフェースとしばしば比較される「抽象クラス」について記す。##抽象クラスとは
抽象メソッドを一つ以上持つクラスのことである。抽象メソッドはサブクラスで必ず実装しなければならないので、開発者にオーバーライドを強制することができる。##扱い方
抽象クラスを扱ううえで以下のようなルールがある。
1. インスタンス化できない
2. 抽象メソッドをオーバーライドしなければならない
3. サブクラスでコンストラクタの記述が必要である。##インターフェースとの相違点
以下が相違点を表にしたものである。| | 抽象クラス | インターフェース |
|:———–|:————:|:————:|
| 実装を持つメソッド | 実装可 | 実装不可 |
| メンバ変数 | クラスのメンバ変数 | 定数 |
| 多重継
スレッドセーフなリスト
##並列処理怖いよって話
リストについて基本的に注意すべきですが、こと並列処理に関しては
マルチスレッドに要注意ですたとえば
“`だめ.java
private static Listlist = new ArrayList<>(); private static Consumer
qwe = v -> list.add(String.format(“%s: %s”, Instant.now(), v)); public static void main(String[] args) {
IntStream.range(0, 9).boxed().collect(Collectors.toList()).parallelStream().forEach(qwe);
list.forEach(System.out::println);
}
“`これの結果は
“`結果
null
null
null
2019-11-08T17:37:22.279Z: 7
2019-11-08T17:37:22.313Z: 3
20
25歳専門新卒がSESに就職して半年が経ち、転職を決意。
【専門学校時代の経歴】
システム開発コースを専攻。
・1年次
4月~10月 基本情報技術者試験の勉強。『不合格』
11月~2月 Javaオラクルブロンズの勉強。『合格』
3月~ 基本情報技術者試験の勉強。『合格』・2年次
4月~7月 Javaオラクルシルバーの勉強。『合格』
7月~10月 応用情報技術者試験の勉強。『不合格』
11月~3月 卒業研究※C言語、C#、Javaでプログラミングもやってました。
【入社してからの経歴】
4月~6月 入社式当日運用部署に配属決定。
3か月間の意味のない研修のスタート。素直に「は?」って思いました。システム開発希望で入社してたので意味が分からなかったですね。
研修はほぼ自習勉強でしたね。時間の無駄です。7月~11月 常駐先決定。
金融システムのサーバ保守業務。
とりあえず、やりがいがありません。
配属ガチャ、案件ガチャ共にハズレを引きました。人によっては良いかもしれませんが、5年後10年後のキャリアアップを見据えてやりたい事があったので個人的にはハズレです。
いかんせん、サーバの保守に興味が持てません
Streamの生成処理
Java8から導入されたStreamAPI
Collectionの操作に便利な処理がたくさんある
(いまさらになるが)メモ的な感じで列挙していこうと思う。StreamAPIとは
Stream自体はListやMapなどのCollection要素ではなく、配列やリストなどの要素に対して生成処理、中間処理、終端処理を加えて新しい要素に置き換えるためのパイプラインのようなものという認識## Stream#of
“`java
Streamstream = Stream.of(“a”,”b”,”c”);
“`## Collection#stream
Listからの生成
“`java
Listlist = Arrays.asList(“a”,”b”,”c”);
Streamstream = list.stream();
“`Mapからの生成
“`java
Mapmap = new HashMap<>();
Stream> stream =
vue.config.jsの活用例
## 前提
フロントエンド側をSPAフレームワークを活用して、ウェブサービス・ウェブアプリケーションを開発する際、昨今はRuby on RailsやLaravelなど流行りのバックエンド言語・バックエンドフレームワークと掛け合わせて制作すると思います。
初期開発時にプラグインとしてバックエンド環境に予めVueやReactを実装し、導入しやすくなってきている為です。今回のプロジェクトでは、Javaを使用しまたディレクトリも分けた状態で開発をした為そういったプロジェクト向けの記事として呼んでいただけますと幸いです。
## ログイン機能
おおよそのウェブサービスにあるように今回開発したプロジェクトでもログイン機能がありました。
ログイン画面とログイン処理の責務はJava側で持たせています。
ViewはJavaのテンプレートエンジンのThymeleafを使用しています。ログイン後、所定のtokenやcookieをブラウザ側に保持させダッシュボードへと繊維します。
ダッシュボードから先の画面および処理はSPA側の責務です。## 開発環境での課題
今回のプロジェクトでは前述した通り、
自作家計簿
むかし,記帳風月という家計簿ソフトを使用していました.
今は公開されていません.
Windowsを捨てるにあたり,データを移行しつつクローンを自作しました.
どんだけ需要があるんだか,って感じですが.
セットアップにはそれなりに手間がかかります.
https://github.com/gucchy55/beauties
## 追加した機能
– 特殊な費目の定義
– 特別収支: 定常的な収支と別に管理したい費目用
– 立替収支: 通常の収支・特別収支と別に管理したい費目
SWTアプリでダークモードしたい
どれだけ需要があるかわからないけど.
自作したSWTアプリでMacのダークモードしたい.
Eclipse IDE 2019-06 (4.12) から可能になっていたので.
参考: https://www.eclipse.org/eclipse/news/4.12/platform_isv.php#dark-theme-mac
VM引数に以下を指定して実行
`-Dorg.eclipse.swt.display.useSystemTheme=true`
## ダークモードかどうかの判定
“`Java
“Dark”.equals(execCommand(“defaults read -g AppleInterfaceStyle”));
“`
動的Webプロジェクトの国際化
#はじめに
実装しようとしたときに調べた範囲では、動的webプロジェクトの国際化についてまとめてる記事はなかったのでまとめてみました。ここでの国際化は、クライアントのwebブラウザが使用している`Locale(言語と国/地域)`クラスを取得し、表示する言語をクライアントに合わせて動的に対応する事です。
今回紹介する手法は、サーバーサイドの`java`ではメッセージを全て`ID`でやりとりし、クライアント側の`jsp`と`javascript`で、あらかじめ用意しておいた言語ごとの`properties`ファイルを参照し`ID`と対応する文字列を表示するというものです。
この手法では、サーバーサイドはメッセージをIDに変換するのみ、クライアントサイドはメッセージを言語ファイルから参照する一文に変換するのみなので、将来的な拡張にも影響も少なく、簡単に国際化することが可能だと思います。
考え方としては、サーバーサイドはクライアント側の`Locale`が何であれ動きは変わらず、クライアントサイドに最初から対応する言語ファイルを送っておき、webページに表示する際に翻訳を行
Rails と Java Servlet + JSP によるWEBアプリ開発の比較
### Rails と Java Servlet + JSP によるWEBアプリ開発の比較
||Rails|Java Servlet + JSP|
|—|—|—|
|Model|XXX.rb|XXX.java|
|View|XXX.erb|XXX.jsp|
|Controller|XXXController.rb|XXXServlet.java|
|ルーティング|routes.rbで指定|XXXServlet.javaのアノテーションで指定|### ルーティングの指定方法
#### Rails
routes.rbで指定“`ruby:routes.rb
Rails.application.routes.draw do
get ‘/sample’ => ‘コントローラ名#アクション名’
post ‘/sample’ => ‘コントローラ名#アクション名’
end
“`#### Java Servlet + JSP
XXXServlet.javaのアノテーションに指定“`java:XXXSerblet.java
package src;imp
Javaの入門テキスト
[●テキスト本体(PDF形式225ページ:1.72MB)](http://www.k-techlabo.org/www_java_new/JavaText.pdf) 2019/11/18更新
[(→ミラーサイトからDL)](https://ktechlabo.xsrv.jp/www_java_new/JavaText.pdf)
[→テキスト中のサンプルプログラム](http://www.k-techlabo.org/blog2/?page_id=1384)
---------------------
(2019/11/16)
学校でプログラミング教えています.初心者に教えるためのJavaの入門テキストを作りました.
とりあえず「Javaで一応プログラミングできる」ようになるまでの内容にしています.(Java SE 8の文法までの内容にしています)
冒頭の50ページ弱で基本的な文法と基本的なI/Oについて解説しています.あとはよく使うライブラリについての解説です.
GUIはSwingとSWTについて解説しています.
このテキストはまだ試作品の段階ですが,教育現場で使いな
java 回転コマンドの作成
# まえがき
javaコマンドで回転コマンド作成した。
# 参考文献
https://blog.no42.org/code/docker-java-signals-pid1/
https://qiita.com/munieru_jp/items/02533ebe5c822e6e29bb
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Scanner.html
https://stackoverflow.com/questions/1216172/how-can-i-intercept-ctrlc-in-a-cli-application
# 環境
“`bash
$java –version
openjdk 13 2019-09-17
OpenJDK Runtime Environment (build 13+33)
OpenJDK 64-Bit Server VM (build 13+33, mixed mode, sharing)
$bash –version
GNU bash, バージョン 5.0.