2014年9月27日土曜日

UbuntuでBashのアップデート方法

UbuntuでBashのアップグレード方法をメモ。

1. bashに問題ありかチェック。echo vulnerableがプリントされたらアウト。

env x='() { :;}; echo vulnerable' bash -c 'echo hello'

2. bashをapt-get installでアップデート

sudo apt-get update && sudo apt-get install bash

3. リリースが古いとアップデートできない場合があるので、その時は思い切ってリリースのアップグレードすると解決された。

http://askubuntu.com/questions/528101/what-is-the-cve-2014-6271-bash-vulnerability-and-how-do-i-fix-it

Ubuntuでアップデートしようとした場合、/bootの空き容量が無くて困った場合。

Ubuntuでアップデートしようとした場合、/bootの空き容量が無くて困った場合、/bootから以下の手順で対処。なぜこんなに古いカーネルが溜まっていくのかよく分からないが、、、

1. uname -r で今使用中のカーネル・リリース番号をチェック
2. /boot から使用していない古いカーネル、initrd.img-xxxxxを削除。(ちょっと怖いので削除でなく他のスペースにmv。
3. apt-get update, installができるようになるまで繰り返して/bootスペースを確保。
4. ひとまずapt-get update, installはできるようになる

参考リンク
http://askubuntu.com/questions/324029/unable-to-remove-older-images-from-boot


ただ、このやり方はイマイチしっくりなので、調べてみると以下のようなやり方もあり。違う機会に試そうと思う。




別のやり方。
http://askubuntu.com/questions/345588/what-is-the-safest-way-to-clean-up-boot-partition
http://askubuntu.com/questions/142926/cant-upgrade-due-to-low-disk-space-on-boot/142937#142937

サポートが終わったUbuntuパッケージのアップグレード方法

Ubuntuでサポートが終わった古いパッケージをアップグレードする方法。意外と簡単だったので簡単にメモ。

1. /etc/apt/sources.listをコピーしてバックアップする
2. /etc/apt/sources.listを以下で書き換える

## EOL upgrade sources.list
# Required
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-security main restricted universe multiverse

# Optional
#deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-backports main restricted universe multiverse

3. CODENAMEを適切なリリース名に変更。例えばraringとかpreciseとか。
4. do-release-updateを実行
5. 適宜コンフィグファイルを現状維持するか書き換えるか聞かれるので応答。個人的にはデフォルトの現状維持で編集したファイルを維持。

手間はかかるがバージョンを順にアップグレードしていけば、最新のパッケージにアップグレードできた。但し、12.04 --> 12.10 --> 13.04 --> ..... という順でアップグレードしておくので、最新までの距離が長いと時間はかかる。

以下リンクを参考。
https://help.ubuntu.com/community/EOLUpgrades

2014年9月16日火曜日

Hibernateで関連性のあるエンティティでフィルタをかけたい場合

Hibernateで関連性をもつエンティティ同士があり、関連先のフィールドで検索(フィルタ)をかけたい場合は以下のようにする。

この例ではCat(一)に対してkittens(多)はCatのコレクションであるような1対多の関連の場合、Catを抽出するのに関連先のkittenのフィールドでフィルタをかけた例。createCritearia.add(Restrictions.like)を併用してやる。

http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/querycriteria.html#querycriteria-associations

List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "F%") )
    .createCriteria("kittens")
        .add( Restrictions.like("name", "F%") )
    .list();

MavenでOutOfMemoryが出る場合の対処法

MavenでOutOfMemoryが出る場合、MAVEN_OPTSでVMの最大値を大きく取ってやると解決する。

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m"

https://cwiki.apache.org/confluence/display/MAVEN/OutOfMemoryError

2014年9月4日木曜日

Javaで画像ファイルをリサイズしたい場合はBufferedImageとGraphics2Dを使う

Javaで画像ファイルをリサイズしたい場合はBufferedImageとGraphics2Dを使う。

http://www.mkyong.com/java/how-to-resize-an-image-in-java/


BufferedImage originalImage = null;
BufferedImage resizedImage = null;
Graphics2D g = null;
try {
int width = 200;
int height = 200;

originalImage = ImageIO.read(originalFile);
int type = originalImage.getType() == 0 
? BufferedImage.TYPE_INT_ARGB : originalImage.getType();

resizedImage = new BufferedImage(width, height, type);
g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, width, height, null);
g.dispose();

ImageIO.write(resizedImage, "jpg", 
new File(imageFolder.getAbsolutePath()+"/"+iconName));

// post process
if( originalImage != null ) {
originalImage.flush();
originalImage = null;
}

// post process
if( resizedImage != null ) {
resizedImage.flush();
resizedImage = null;
}
 
} catch(Exception e) {
System.out.println("Can not generate " + originalFile.getName());
e.printStackTrace();
} finally {
if( originalImage != null ) {
originalImage.flush();
originalImage = null;
}
if( resizedImage != null ) {
resizedImage.flush();
resizedImage = null;
}
}

ImageIO.readeで java.lang.OutOfMemoryの例外が発生する場合に注意しておく点

ImageIO.readeで java.lang.OutOfMemoryの例外が発生する場合、以下の点に注意する。


  1. VMの-Xmxを充分な値に設定しているかどうか。
  2. BufferedImageを使用後にflushやnullを設定するなどの後処理をしているか。(特にファイルを連続で読み込んだりする場合は注意。)

画像のエンコーディングをJavaで検知するには?

ImageIO.getImageReadersを使う。
ImageInputStream imageInputStream = ImageIO.createImageInputStream(
    myInputStream);
Iterator<ImageReader> iter = ImageIO.getImageReaders(imageInputStream);
if (!iter.hasNext()) {
    // this always happens
}
ImageReader reader = (ImageReader) iter.next();
if (!reader.getFormatName().equals("jpeg")) {

}
http://stackoverflow.com/questions/4530348/detecting-image-encoding-in-java

jQueryでフォームの値をクリアするには?

// Call it on your <form>
$('form').clearForm();
http://jquery-howto.blogspot.com/2013/08/jquery-form-reset.html

jQueryでフォームのバリデートをするにはjQuery Form Validatorが便利

フォームのバリデーションをjQueryでやるにはjQuery Form Validatorが便利だ。