木曜日, 1月 29, 2009

デジタル・フォトフレーム

ひさしぶりに電気店へ行くと、新製品がオンパレードでこの業界の進歩にいまさらながら驚いた。

デジタル一眼レフも機能が向上して、ソニーのαシリーズのものなど、自動焦点の機能が向上して「一瞬にしてピントが合う」。

フォトフレームがはやりだという。液晶モニタにメモリリーダーがついたもので、デジカメ写真・動画などが額縁感覚で飾れる。スライドショー機能はデジカメにもついており、テレビ画面につなげばそのまま画像が楽しめるが、そのまま画像が表示できる手軽さがある。大きさはさまざまで、携帯サイズの安いものから、インテリア感覚の高級品まで勢ぞろいしている。無線LAN機能がついたものもあり、ネットにつなげるという。しかし、見たところFlickrやYahooフォト、Youtubeやニコ動などとの連携はないらしい。

どうぜ小さな画面なら、iPod、ミニノートを置けばいいというのもある。電力を食うというきらいがあるが、ネット接続に苦労するということはない。DVDプレーヤーを置けばいいというのもある。

店頭で商品を見て惹かれてしまい、帰ってきて使わなくなったデジカメを取り出してテレビ画面につないだ。フォトフレーム代わりにスライドショーで眺めている。画面はテレビ画面のほうが大きく、それなりに迫力はある。

火曜日, 1月 27, 2009

ImageIO.write(): To save transparent PNG image files

The ImageIO class and its write method that comes with JDK1.60 does not support writing out transparent GIF images (at least in the way shown below). The write method of the class won't write out proper GIF format files with a transparent color. The method will create PNG files all right. The following shows how to save an image file. Suppose you have (BufferedImage)bufferedImage that you want to save:



FileOutputStream out=new FileOutputStream(fileName);
String descriptor="PNG";
BufferedImage image=new BufferedImage(right-left,bottom-top,BufferedImage.TYPE_INT_ARGB);
Graphics2D g=(Graphics2D)image.getGraphics();
g.drawImage(bufferedImage,0,0,right-left,bottom-top,left,top,right,bottom,this);
g.dispose();
ImageIO.write(image,descriptor,out);
out.flush();

金曜日, 1月 16, 2009

JFileChooser: Directory Selection



Java's JFileChooser is a handy UI component in file(s) or directory(directories) selection. As with all Java OOP classes, the set up of the JFileChooser class goes through four steps: 1. instantiate the class 2. set the parameters 3. show off the class 4. wait for the return value (is modal). The JFileChooser class works fine with file selections -- selecting a single/multiple files, setting file extension filters, and retrieve a new file name if the file does not exist.

The trouble is, the case with a directory/directories selection. The JFileChooser class can filter out all the file names, and that part is ok. But when the user enters a new directory name, the filtering would hinder the class to get the non-existent directory name. The user can not select non-existent directory name.

Here shows DirFilter class that can avoid the situation and let the application have the choice either to create or reject the user request.



class DirFilter extends javax.swing.filechooser.FileFilter
{
public String getDescription()
{
return "Directories";
}
public boolean accept(File file)
{
if(file.exists())
{
if(file.isDirectory())
{
return true;
}
else
{
return false;
}
}
else
{
file.mkdir();
return true;
}
}
}



The idea is, to set up a filter for the JFileChooser class, by passing the filter class to JFileChooser. Then the application can decide whether to create a directory of the specified name or to discard it. The filter class should be the one that FileFilter interface be implemented. A word of caution is that there are java.io.FileFilter and javax.swing.filechooser.FileFilter -- the latter should be specified.

The following shows the setting of the new filter class via addChoosableFileFilter() method.



JFileChooser dlg=new JFileChooser(".");
dlg.setDialogType(JFileChooser.SAVE_DIALOG);
dlg.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
dlg.addChoosableFileFilter(new DirFilter());
int retval=dlg.showDialog(this,null);
if(retval==JFileChooser.APPROVE_OPTION)
{
...

木曜日, 1月 08, 2009

DIVタグをネストすると、マージンをとった場合にIE7とFirefoxで結果が違う。

Nested DIV -- Firefox3
Nested DIV -- Firefox3
Nested DIV -- IE7
Nested DIV -- IE7

DIVタグをネストすると、マージンをとった場合にIE7とFirefoxで結果が違う。IE7は内部のブロック要素のマージンの長さだけ外部のブロックのサイズを変更する。Firefoxでは、なぜか内部のマージンに合わせて外部のブロックも移動する。しかも不可解なことに、外部ブロックにボーダーをつけると位置が移動する。要注意。

ソースはこちら→ div.html

日曜日, 1月 04, 2009

The Art of UNIX Programming

The Art of UNIX Programming という本があって面白く書いてある。記述のどこまでが反語なのか計りかねるところがまた興味深い本である。さらに、おそらくは日本などでも散見される意見がちりばめてあってより熟考を迫られる。

まず、意図的にはUNIXに檄を飛ばす内容となっている。そのための、現状の把握の過程が書かれている。数々の、名の知れた頭のよい人たちのウインクが見えるような本である。立場から、マイクロソフトにはまったく「反対」を唱え、協調あるいは融和、妥協など交渉する気配を見せていない。これは政治的闘争というものに他ならない。政治問題化しては問題は解決しない。Windowsプラットフォームの問題点として、文書形式がプロプラエタリなバイナリであること、アプリ間でデータの交換がやりにくいことなどを列挙しているが、問題の解決方法として、Windowsと対決するなどまったく現実的ではない。政治的リアリティとしては、その筋からWindows製品にも多くの注文が寄せられ、さまざまな改変が加えられている。Word文書形式のオープン化などは、強い要望によって成し遂げられた改革である。XML形式での文書データの交換形式の普及は、UNIX対Windowsの対決より、より実際的であり、効果的な解決方法である。

本書には、プログラムに関するポリシーであり助言が書かれている。簡略化すること、モジュール化すること、「美しく入り組んだ構成物」は矛盾という。データ構造が重要なこと、最適化がコードを重く長くすること、「まず動かし、正しくして、速くせよ」というKent Backの台詞を引用している。が、固陋なまでにC言語を使い、Java言語をスクリプト扱いする記述には、「Javaのほうがずっとスマートに美しく書ける」「CのライブラリよりJavaのクラス構造」といいたい。

しかし、銃保有があたかも反体制であるかのように書くのはまったくばかげている。

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...