読者です 読者をやめる 読者になる 読者になる

てきとうなメモ

本の感想とか技術メモとか

Struts2の脆弱性(S2-046)

S2-045の話は既に書いたけども、S2-046は書いていなかったのでちょっと書く。↓のやつ。Struts2-046: A new vector - Hewlett Packard Enterprise Communityこの脆弱性は、以下の3つの条件に合う場合、マルチパートのアイテムのファイル名に記述されたOGNL式…

ServletのWEB-INF/libのjarが読み込まれる順番

同じライブラリのjarがバージョン別でWEB-INFに置かれていた場合、どっちが読まれるのかなという話。 JSR-000315 Java Servlet 3.0 Final Release のPDFの「4.6. Resources」のところ、 The order in which the JAR files in the WEB-INF/lib directory are …

Apache Struts2の脆弱性(CVE-2016-3081)

JVNVU#91375252: Apache Struts2 に任意のコード実行の脆弱性ぐぐるとみつかるPOCで1番簡単そうなのを解説してみる http://www.example.com/sample.action?method:%23_memberAccess%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%2C%23test%3D%23context.get%…

Apache Log4j 1.2のSyslogAppender

UDPしか対応していないか。TCPやUNIXドメインソケットには対応していないか。SyslogAppenderはSyslogWriterを利用していてその中身は以下のような感じ。log4j/SyslogWriter.java at v1_2_17 · apache/log4j · GitHub package org.apache.log4j.helpers; ... …

実践JUnit

実践 JUnit ―達人プログラマーのユニットテスト技法作者: Jeff Langr,Andy Hunt,Dave Thomas,牧野聡出版社/メーカー: オライリージャパン発売日: 2015/09/02メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る基本的なJUnit4テストの作り方…

昔のcommons-configurationの依存関係多すぎ

昔(v1.4) 現在(v1.10) commons-configurationのせいだけではないけど。

Jersey1.xでPOJOMappingFeatureのテスト

Jersey1.xでJSON入出力するにはJAXBを利用する方法もあるのだが、一番シンプルなのはPOJOとJSONオブジェクトのマッピングを利用する。デフォルトだとこれが有効になっていないので、POJOMappingFeatureを有効にする。サーブレットコンテナだとweb.xmlのinit-…

Jersey1.xでモックをインジェクトしてテスト

Jersey1.x自体にDIの機能があるので、それを使ってみる。基本的には package com.sun.jersey.spi.inject; public interface InjectableProvider<A extends Annotation, C> { ComponentScope getScope(); Injectable getInjectable(ComponentContext ic, A a, C c); } を実装してプロバ</a>…

JerseyTest(v1.x)でListenerなどを扱う

最初からJerseyを使っていなくて、普通のServlet→Jerseyに変換というようなことをしたい場合、ServletContextListenerにアプリケーションの初期化コードとかを書いていてうまくテストできなかったりする。まあ、そのあたりもJersey化すれば良いのだけども、…

m2e pluginの<plugin>設定

pom.xmlに書いてからプロジェクトを選択して「Maven」→「Update Project...」してもPluginを実行してくれない。「Maven」→「Discovery」→「Open Catalog」からインストールしないとダメっぽい。

parseXXXとvalueOf

某書でJavaで文字列から数値に変換する時にXXX.valueOf(ex. Long.valueOf)よりもXXX.parseXXX(ex. Long.parseLong)を使ったほうが効率が良いよと書いてあったのだが、そもそも、前者はオブジェクト型、後者はprimitive typeを返すので目的がちょっと違うよう…

コーディング規約におけるif文の中括弧

世の中のコーディング規約的にはどうなのかなと思ったのでちょっと調べたら中括弧付ける方が多い気がする。 C or C++ Google In general, curly braces are not required for single-line statements, but they are allowed if you like them; conditional o…

if文の中括弧

コーディングスタイル論争「カッコを省略するな」が出るたびに思う事私はコーディング規約で決まっていなければ括弧は使わない派かな。中括弧を使わないと if (cond) statement; と書いていた時に、条件分岐中の処理を増やそうとして if (cond) statement; s…

ServletRequest#setCharacterEncodingする時の注意事項

setCharacterEncoding void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingExceptionこのリクエストのメッセージボディで使われている文字エンコーディング名を上書きします。 このメソッドはリクエストのパラメータを読み…

Struts1の脆弱性(CVE2014-0094)の回避策いろいろ

回避策をいろいろ見かけるようになったのでちょっとまとめる サーブレットのFilterでフィルタ Protect your Struts1 applications - HP Enterprise Business Community FilterでStrutsにリクエストが来る前にclassを含むクエリパラメタをエラーにしてしまう…

リフレクションでオブジェクトのプロパティを設定するライブラリは解析対象にしない親クラスを指定すべきな気がする

今回のStruts1の脆弱性の問題は、どちらかというとcommons-beanutilsの問題な気がする。commons-beanutilsはアクセス可能なプロパティは全て設定できてしまうのだが、使う側からすると自分が想定しているプロパティにのみ設定してほしいという要望はあるだろ…

groovyshで起動するJVMを指定する

Java8のREPLが欲しかったので。JAVA_HOMEを指定すれば良いか。 $ JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home groovysh Groovy Shell (1.8.5, JVM: 1.8.0)

many-to-oneのlazy load

Hibernateはデフォルトで多対1の関連もlazy loadのはずなんだが、primary keyでの関連ではないとlazy loadしてくれないっぽい。org.hibernate.engine.TwoPhaseLoad#initializeEntityで初期化していないEntityを初期化するコードの部分で、org.hibernate.Type…

Hibernateでcreated_at/modified_at

Interceptorを使えばよいか。 public class DatetimeInterceptor extends EmptyInterceptor { @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] typ…

PropertiesConfiguration

commons-configurationのPropertiesConfigurationとjava.util.Propertiesの仕様が異なるためにはまってしまった。値が空白(\u0020)を含む場合、バックスラッシュでエスケープする必要があるのだが、PropertiesConfigurationでは行末の空白はバックスラッシュ…

JUnit実践入門

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)作者: 渡辺修司出版社/メーカー: 技術評論社発売日: 2012/11/21メディア: 単行本(ソフトカバー)購入: 14人 クリック: 273回この商品を含むブログ (65件) を見るこれは非常に面白かっ…

JUnitの文書

githubのwikiが一番よく書かれてあるような気がする。 Home · KentBeck/junit Wiki · GitHub

java.util.Hashtableとjava.util.HashMap

Togetter - 「hashtableのn * 2 + 1の意義」 なるほど。Hashtableのハッシュ関数はハッシュの再作成するときに、 protected void rehash() { ... int newCapacity = oldCapacity * 2 + 1; Entry[] newMap = new Entry[newCapacity]; ... } と、古いサイズnに…

AppleがMac OS XでJavaをサポートしなくなる件

Mac OS Xのupdateにおいて以下のような文言があって、 As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated. Java for Mac OS X 10.6 Update 3 and 10.5 Upd…

実装パターン

実装パターン作者: ケント・ベック,Kent Beck,永田渉,長瀬嘉秀,株式会社テクノロジックアート出版社/メーカー: ピアソンエデュケーション発売日: 2008/12/22メディア: 単行本(ソフトカバー)購入: 30人 クリック: 502回この商品を含むブログ (91件) を見るJ…

Arrays#sort

JavaにはArrays#sortというメソッドがあって配列をソートすることができる.ソートする対象がプリミティブ型だとquick sortで実装され,オブジェクトだとmerge sortで実装している.オブジェクトのソートはstableであるという仕様のためだと思われる.さらに…

Calendar#set

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd"); Calendar c = Calendar.getInstance(); c.set(2000, 0, 1, 0, 0, 0); assertEquals(df.parse("2000/01/01"), c.getTime()); こんな間違いをしてしまった.しかも,エラー見ただけではすぐに気付…

JudeとJar Bundler

UMLを書く必要があったのでJude Communityをインストールした。サポートはWindowsだけなのだがJavaなのでMacでも実行できる。unix系用のシェルスクリプトを付属されているし。でも検索してみるとバンドルにしてインストールしている人がいたので自分もやって…

Java needs an overhaul

This is the sort of overhaul I'm talking about. Adding closures or not in the next version of Java is just a new coat of paint on a burning barn. Clean out the damn libs and make the language cleaner and leaner again is what's needed. I'd …

java.sql.Types.VARCHAR

commons-dbutilsのソースコードを読んでいたのだが,変なコードを見つけた. protected void fillStatement(PreparedStatement stmt, Object[] params) throws SQLException { if (params == null) { return; } for (int i = 0; i < params.length; i++) { i…

Java7にpropertyが

Google DriveC#-likeなpropertyがjavaに導入されるかもしれない.たしかに無駄にgetter/setterが多くて読みにくい.IDEが自動生成してくれるというのが逆に無意味にgetter/setterを増やしている気がする.

リファクタリング入門 第14章

メソッドの委譲先のクラスをクライアントが使っているとクラスの関係が複雑になってコードを変更しにくくなるのでサーバクラスだけ使うのが委譲の隠蔽. Hide Delegate逆に委譲の隠蔽をしすぎるとメソッドが増えて,何ができてどのメソッドを使えばいいのか…

リファクタリング入門 第15章

継承の分割.refactoring.comのカタログにはのっていなかった.継承でガチガチにつながっている部分を委譲によってゆるやかな結合にする.やっと読み終わった.本の内容は,ステップバイステップでリファクタリングをおこなうというポリシーの下で,とても分…

リファクタリング入門 第13章

Replace Inheritance with Delegation 継承を委譲に.本の例とは関係ないけどState/Strategyパターンは継承と委譲をバランスよく使っている気がする.あと,refactoring.comの例がちょっと難しい.StackはVectorかと言われるとそうとは限らないので委譲の方…

リファクタリング入門 第11章

Replace Constructor with Factory Method コンストラクタをFactory Methodに置き換える.最初のFactory Method Patternを見たときはなぜわざわざFactory Methodを使うのかよくわからなかったのだが,こういう例だとわかりやすい.

リファクタリング入門 第12章

Duplicate Observed Data モデルとビューがごっちゃになっているのを分離する.当たり前と言えば当たり前な話.

リファクタリング入門 第10章

Replace Error Code with Exception 10章はエラーコードを例外にしようというもの.どこで例外を使うべきでどこでエラーコード(nullとかfalseとか)を使うべきかというのはやっぱり難しい.あと,何を例外にするかも重要.例外を細かく作ると原因が分かりやす…

リファクタリング第8,9章

Replace Type Code with Subclasses Replace Type Code with State/Strategy 7章と同じくタイプコードの置き換えについて.タイプコードをクラスにするよりかこちらの方がしっくりくる.サブクラスにするかState/Strategyパターンにするかはタイプコードが変…

リファクタリング入門 第7章

Replace Type Code with Class7章はタイプコードをクラスに置き換えるというリファクタリング.基本型を使ったタイプコードは 異常な値になるかもしれない 他のタイプコードと混同するかもしれない ので使うべきではないとしている.でも,あんまり異常な値…

GNUのパッケージはなぜorg.gnu.xxxでないのか

Why just the gnu package name?リファクタリング入門でちょっと話が出ていたのでリンク先を読んでみた.確かにjavaのパッケージ名は長い.jp.coとかでもそこはどうせ衝突してしまうので,組織名.カテゴリ名.xxxぐらいがちょうどいいんではないかと.

リファクタリング入門 第5,6章

第5章はメソッドの抽出.当たり前すぎるといえばそうなんだが.Extract Method第6章はクラスの抽出.これもまあ当たり前なんだがちょっと難しい.抽出するクラスがgetterやsetterしかもっていないと,その部分がまとまったという以上の利点がない.そのため…

リファクタリング入門 第3,4章

第3章はコメントに書くぐらいならassertionを使えというもの.assertion使ったことないなあ. Introduce Assertion 第4章はnullチェックが多くて読みにくかったり,抜け漏れがありそうだったらNullオブジェクトを使おうという物. http://www.refactoring.co…

リファクタリング入門 第2章

第2章はフラグの削除. 単にフラグを使わないのではなく,breakやcontinueやreturnでいけそうなところはそれを使おうということみたい. フラグ変数を使うのならflagなんてそのまんまでわかりにくい変数名をつけてはいけない. returnについてだけども,最後…

リファクタリング入門 第1章

第1章はマジックナンバーを定数に置き換えるというもの.定数を使ってコードを読みやすく変更しやすくする.あと,enumとかタイプコードとか.Javaのenumは型チェックをしっかりしてくれるので便利.Cだとint型が入ってしまう.タイプコードはマジックナンバ…

結城先生のリファクタリング本を買った

Java言語で学ぶリファクタリング入門作者: 結城浩出版社/メーカー: ソフトバンク クリエイティブ発売日: 2007/01/27メディア: 大型本購入: 12人 クリック: 189回この商品を含むブログ (109件) を見るちょっとずつ読んで行こうと思う.とりあえず,第0章は「…

最も長いJavaのメソッド名

IterativeDeepeningAlphaBetaSearchUsingKillerMoveOrderingAndTranpositionTableSimpleMaterialAndPositionalEvaluationChooseRandomlyBetweenBestMovesStrategy長っ.さすがJavaである.チェスのソフトのStrategyクラスのコンストラクタらしい.

Java と Closure

http://gafter.blogspot.com/2006/08/closures-for-java.htmlJDK 7 (Dolphin)からClosureを言語として実装するように提案しているようだ.いままでJavaでClosureを使いたい場合は無名のクラスを用いていたが,コードが冗長になるという点と外部の変数はfinal…