プログラマメモ2 - programmer no memo2

[windows]空のファイルを作成します。 2009/04/27

touchコマンドがあれば、touchで空のファイルをつくるところですが、windowsにはないわけです。
うーんとなやみました。

echo とリダイレクトを使ったりしたわけですが、うまくいかず。

どうも下記のようにするとよいようです。

type nul > empty.txt


参考

[雑記]えくせるはえくせる 2009/04/19
2009/04/19

エクセル、ワードはないと困るアプリケーションナンバーワンな感じがします。
とくにエクセル。エクセルは苦手です。たいがいエクセルを操作しないといけない場合って仕方がなくです。とにかくセルを埋める埋める埋める。

で、最近のお気に入りは20〜30のエクセルファイルを、WSHで操作することです。エクセル+マクロではなく、エクセルを外部アプリケーション(WSH)で処理するわけです。

一括処理のためには、どこのセルに何が入ってるとか曖昧ではいけません。であるので、セル以外のところに付箋のようなオブジェクトを配置してデータは入れとくのはもってのほかです。あと、記述に《ぶれ》があってはいけない。

仕様をもっと的確(自然言語ではなく)に表現する方法があればよいのに、でも、学習コストが高かそう。

さわればさわるほど、エクセルってよくできてるなぁと思います。
もう全てはエクセルでいいんじゃないかと思えるぐらいです(笑)。

なんだか3週間ほとんどコーディングできてないのが悲しい。
>_<!

LightFilterのSpotLightを使ってみた。 2009/04/04



SpotLightというのがあって使い方がよくわからなくて、試行錯誤中です。
LightFilterってすごくよくできてるなぁと思うのですが、使う勘所が思い浮かばず。

光ものってweb2.0っぽいのかな。もしかして、web2.0って言い方はもう死語!?



スクリーンキャスト


使っているライブラリは、Jerry's Java Image Processing Pagesにあります。
あとユーティリティ、GUI周りは、quicklunch - Google Codeとかにパーツとして置いていこうかなと思います。

以下コード
package ifif;

import static quicklunch.e2.goodies.utils.ObjectUtils.eq;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JPanel;

import quicklunch.e2.goodies.swingy.MyFrame;
import quicklunch.e2.goodies.swingy.SlidersPanel;

import com.jhlabs.image.FillFilter;
import com.jhlabs.image.LightFilter;

public class TestMain {

public static void main(String[] args) {
MyFrame myFrame = new MyFrame();

final MyPanel panel = new MyPanel();

myFrame.getContentPane().setLayout(new BorderLayout());
myFrame.getContentPane().add(new SlidersPanel() {
{
addSlider("centerX", "cenx");
addSlider("centerY", "ceny");
addSlider("cornAngle", "cornang");
addSlider("distance", "distance");

addSlidersPanelEventListener(new ISlidersPanelEventListener() {

@Override
public void slidersPanelEvent(SildersPanelEvent event) {
System.out.println(event);
String name = event.getName();
if (eq(name, "cenx")) {
panel.cenx = event.getFloat();
panel.gen();
panel.repaint();
return;
}

if (eq(name, "ceny")) {
panel.ceny = event.getFloat();
panel.gen();
panel.repaint();
return;
}

if (eq(name, "cornang")) {
panel.cornAng = event.getFloat();
panel.gen();
panel.repaint();
return;
}

if (eq(name, "distance")) {
panel.distance = 1000 * event.getFloat();
panel.gen();
panel.repaint();
return;
}

}
});
}
}, BorderLayout.NORTH);
myFrame.getContentPane().add(panel, BorderLayout.CENTER);
myFrame.setVisible(true);
}

static class MyPanel extends JPanel {
BufferedImage image;

public float cenx;
public float ceny;
public float cornAng;
public float distance;
{
gen();
}

public void gen() {
FillFilter fillFilter = new FillFilter();
fillFilter.setFillColor(new Color(100, 190, 28)
.getRGB());

fillFilter.setDimensions(400, 400);

BufferedImage image2 = fillFilter.filter(new BufferedImage(400,
400, BufferedImage.TYPE_INT_ARGB), null);

LightFilter lightFilter = new LightFilter() {
{
Vector<Light> vector = this.getLights();
Iterator<Light> iterator = vector.iterator();
removeLight(vector.firstElement());

SpotLight spotLight = new SpotLight();

spotLight.setCentreX(cenx);
spotLight.setCentreY(ceny);
spotLight.setConeAngle(cornAng);
spotLight.setDistance(distance);
addLight(spotLight);
}
};

try {
this.image = lightFilter.filter(image2, image2);
} catch (Exception e) {
e.printStackTrace();
}

}

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(this.image, 0, 0, null);

}

}
}

[java]パン屑もどき 2009/04/01



Javaです。パンくずです。
パンくずってすごくすぐれたナビゲーションだと思います。

既存の部品でそれっぽいの作成してみます。



JLabelを使ってます。HTMLコードをsetTextして見え方を変えてます。
配置するパネルのレイアウトをFlowLayoutにしています。

以下、コード
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Breadcrumbs {

public static void main(String[] args) {
final JFrame frame = new JFrame() {
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
}
};
frame.getContentPane().add(new _Breadcrumbs() {
{
addBread("aaaa");
addBread(">");
addBread("bbbb");
addBread(">");
addBread("cccc");
addBread(">");
addBread("dddd");
}
});

frame.setVisible(true);
}

static class _Breadcrumbs extends JPanel {

public _Breadcrumbs() {
super();
setLayout(new FlowLayout());
}

public void addBread(String s) {
add(new MyLabel(s));
}

}

static class MyLabel extends JLabel {
{
final String _HTML_ = "<html><body><u>%s</u></body>";
final String SEPA = ">";

setForeground(Color.BLUE);
addMouseMotionListener(new MouseAdapter() {
{
addMouseListener(this);
}
String tmp;

@Override
public void mouseEntered(MouseEvent e) {
tmp = getText();
// 区切りなら入れ替えない
if (SEPA.equals(tmp))
return;

setText(String.format(_HTML_, getText()));
}

@Override
public void mouseExited(MouseEvent e) {
setText(tmp);
}

});
}

public MyLabel(String s) {
super(s);
}
}
}

/dev/nullを読む 2009/04/01

UNIXの部屋 コマンド検索:/dev/null (*BSD/Linux)
/dev/null - Wikipedia
スペシャルファイル - Wikipedia


/dev/null はビットバケツ (bit bucket)、ブラックホール (black hole)と呼ばれる何かです。
スペシャルファイルの一種だそうです。

ビットバケツという言い方をするとは知りませんでした。

それで、これを開いてreadしてみます。
以下、コード。


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Open_DEV_NULL {

public static void main(String[] args) throws IOException {
File file = new File("/dev/null");
System.out.println("/dev/null exists " + file.exists());
System.out.println("/dev/null length " + file.length());
FileInputStream fis = new FileInputStream(file);
byte[] bs = new byte[4096];
int size = fis.read(bs);
System.out.println("read size:[" + size + "]");
fis.close();
}

}


ちなみにreadは、
バッファーに読み込まれたバイトの合計数。または、ファイルの終わりに達したためにそれ以上データが存在しない場合は -1 javadoc


実行はmac osxです。

結果
/dev/null exists true
/dev/null exists 0
read size:[-1]



javaで開いて読めることがわかりました。中身はEOFというわけでした。