前のエントリでも紹介した node-archiver-zip-encryptable の開発では Prettier を適用したが、フォーマットの統一に注意を払わなくて済むのは非常に快適だった。
ルーツが何かは調べられていないが、過去の自分の経験の中で似たようなものには Golang の gofmt があった。
Java のプロジェクトでも適用できないものかと思ったが、 prettier-java は現在 Work in Progress の状態。
2018/12/31
フォーマッタの自動適用
2015/03/28
Spring Bootのアプリ内にパスワード生成タスクを追加
以前のエントリ Play Frameworkのアプリ内にパスワード生成プロジェクトを追加のようなことをSpring Bootで行う方法について。
上記エントリで書いたように、Gradleで簡単に定義できる。
暗号化方法は、Spring Bootでユーザ認証で書いたようにWebSecurityConfigurerAdapter
の継承クラスでnew StandardPasswordEncoder()
を設定している前提。
他のEncoderを使う場合はタスクの内容を適宜書き換えれば良いはず。
Spring Bootでユーザ認証
Spring Bootで(というかSpring Securityのような気もするが)
ユーザ認証を実装する方法について。
とりあえずハードコードで、という方法は見つかるのだが
- DBにユーザ情報を格納し
- ID以外のユーザ情報にもアクセスできるようにする
という場合の方法が見つからず苦労したので記録しておく。
Play Framework 2.3をJavaで使うときに困った話(凡ミス)
Play Framework 2.3.8を使ってサンプルを作っていた時、
チュートリアルを参考に進めていたつもりだったのだが
Viewなど至るところでplay.api.*
が参照されてしまい
クラスが見つからないエラーが多発した。
てっきりJavaはもうサポートされていないのかな…と
思ってしまったが、単なる凡ミスだった。
build.sbt
で以下のようにPlayJava
プラグインを使用するように設定すれば良いだけのこと。
lazy val root = (project in file(".")).enablePlugins(PlayJava)
これを、PlayScala
プラグインを適用していたせいで上手くいかなかったのであった。
恥ずかしい話だが、誰かの役に立つかもしれないのでメモ。
Play FrameworkでSQLで初期データ投入する方法
Play Frameworkでは、EBeanを使い
YAMLで初期データを書くようだが、
SpringのようにSQLファイルで初期化したい場合。
Scalaだとanormが使えるようだが、Javaだと以下のような感じに作るしかなさそう。
Play Frameworkは2.3.8。JavaはOracle JDK 7。
Play Frameworkのアプリ内にパスワード生成プロジェクトを追加
Webアプリケーションのユーザをテーブルで管理する場合
MySQLなどのDBで、SHA2()
関数などを使ってパスワードを変換しても良いのだが、プログラム側で生成するとした場合は開発中のテストユーザのパスワードを生成するのに困る。
Play Frameworkの場合はBCrypt
を使う例を見かけたので
これを使うタスクをSBTで定義できたら良いのかな、と考えた。
…が、結局(知識不足なためだろうが)うまくできずサブプロジェクトとして用意して解決できたのでそのメモ。
(Play Frameowrk 2.3.8, Java 7)
2014/05/02
[Docker] Dockerfileのサンプル
リポジトリを作成。
https://github.com/ksoichiro/dockerfiles
さらに最後には index.docker.io に登録してみた。
以下その内容。
OpenJDK7
Javaが使えるというだけですが・・。https://github.com/ksoichiro/dockerfiles/tree/master/openjdk7
こちらに登録中。
https://index.docker.io/u/ksoichiro/openjdk7/
"docker pull ksoichiro/openjdk7" でプルできます。
Android
Android SDKが使えるコンテナ。Jenkinsでのビルドに使えそう。https://github.com/ksoichiro/dockerfiles/tree/master/android
こちらに登録中。
https://index.docker.io/u/ksoichiro/android/
"docker pull ksoichiro/android" でプルできます。
Android + エミュレータ
Android SDKとエミュレータ(ARM)が使えるコンテナ。https://github.com/ksoichiro/dockerfiles/tree/master/android-emulator
エミュレータを実行するスクリプトはENTRYPOINTになっているだけなので、
docker runしてからしばらくは起動待ち。。。
こちらに登録中。
2011/06/11
SAStruts ボタンのラベル
JSPに日本語を直接書かず、プロパティファイルに集約することを考えました。
普通のラベルなどは<bean:message>を使うことで簡単にできましたが、ボタンのラベルに適用することができず少し手こずりました。
タグの属性にタグを使いたい時、EL式を定義するか新しいタグを作るかと思ってしまいますが
ちゃんと用意されていました。
結果的にはSAStruts(s:submit)の新しいやり方でなくStrutsのときから用意されていたやり方(html:submit)でした。
プロパティ(application_ja.properties):
labels.login_id=ログインID
普通のラベル表示:
<bean:message key="labels.login_id" />
ボタンに適用(NG):
<s:submit value="<bean:message key="labels.login_id" />" />
ボタンに適用(OK):
<s:submit><bean:message key="labels.login_id" /></s:submit>
ボタンに適用(OK):
<html:submit><bean:message key="labels.login_id" /></html:submit>
2011/05/03
Java リフレクションで取得するフィールドの順番
Java API仕様を見ると、確かに順序は決まっていないという記述がありました。
Class#getFields()
この
Class
オブジェクトが表すクラスまたはインタフェースのすべてのアクセス可能な public フィールドをリフレクトする、Field
オブジェクトを保持している配列を返します。返された配列内の要素は、ソートされていたり、特定の順序になっていたりすることはありません。
Javaの標準的な機能ではフィールドの定義順でフィールド情報を取得することはできなさそうです。
以下のように、フィールド名やアノテーションを使えば順序を規定することはできそうです。
Java reflection: Is the order of class fields and methods standardized? - stackoverflow
これを使って、AndroidのParcelableの実装を汎用化しようと思います。
# Parcelable#writeToParcel(Parcel, int)やコンストラクタにフィールドを列挙するのを毎回書かずに済むようにします。