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

Join Engineかぁ 2009/03/31
2009/03/31

で、最近RDB(リレーショナルデータベース)がよくわからないので居心地が悪いです。
joinがとくにわからないです。あれを頭の中でイメージできるひとはすごいと思います。
いやべつに頭の中でどうイメージしようが勝手でしょうが。
僕自身の用語の理解も危ういです。



で、上記の記事で、「MySQLが実行出来るJOINの種類...」云々とあって、そうかjoinにもいろいろあるわけだと、知った次第ですが、苦手意識は対象にたいする知識不足からくる場合が多いので、この際、RDBの根っこから勉強せねばなぁと思うこの頃。



それで、話変わって、たまたま上記の記事をみて、たしかにべつにjoinをアプリケーション側で行ってもよいよなぁーと思ったわけです。

結論は、今現在、いわゆるRDB(リレーショナルデータベース)の実装も調べつつも、脱RDBの道を模索するのがかっこいいかなと。

[java]ダイアログを最前面にです。 2009/03/30

javaです。ダイアログを最前面にです。
JDialogに、setAlwaysOnTopメソッドがあるのでそれを使います。

JOptionPane pane = new JOptionPane(msg, JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog(null, "info");
dialog.setAlwaysOnTop(true);
dialog.show();
System.out.println("*** bye...");
dialog.dispose();

[自分メモ]tnsnames.oraとCSE 2009/03/24

忘れるので自分メモ
windowsでtnsnames.oraの場所は、

C:\oracle\ora92\network\admin

あたりだと思う。

エドガー・ダイクストラ - プログラマ 2009/03/21



がんばってプログラマといえるようになりたいなと。

中心点からの角度 2009/03/20


パネルの中心点とマウスをドラッグした点から角度を求めてみます。



import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class A {

public static void main(String[] args) {

JFrame frame = new JFrame() {
{
setAlwaysOnTop(true);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

getContentPane().add(new MyPanel());

}
};
frame.setVisible(true);
}

static class MyPanel extends JComponent {

{

addMouseListener(new MouseAdapter() {

{
addMouseMotionListener(this);
}

@Override
public void mousePressed(MouseEvent e) {
mousePoint(e.getX(), e.getY());
}

@Override
public void mouseDragged(MouseEvent e) {
mousePoint(e.getX(), e.getY());
repaint();
}

});
}

Point mpoint;

void mousePoint(int x, int y) {
this.mpoint = new Point(x, y);
}

@Override
protected void paintComponent(Graphics g) {

Graphics2D g2d = (Graphics2D) g;

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

g2d.setColor(new Color(128, 128, 128, 128));

int cx = (int) ((getWidth() / 2));
int cy = (int) ((getHeight() / 2));

if (this.mpoint == null)
return;
g2d.drawLine(cx, cy, this.mpoint.x, this.mpoint.y);

int mx = mpoint.x - cx;
int my = mpoint.y - cy;

double degree;

if (mx == 0 && my == 0) {
degree = 0;
} else {
degree = Math.atan2(my, mx) * (180 / Math.PI);
}
g2d.setFont(new Font("Arial", Font.BOLD, 18));
g2d
.drawString("degree:" + (int) degree, this.mpoint.x,
this.mpoint.y);

g2d.drawString("角度(0~360)"
+ (int) (degree < 0 ? (180d + degree) + 180 : degree),
this.mpoint.x, this.mpoint.y + 20);
}

}

}

[java]xxxAdapter 2009/03/18

Javaです。
JDKでは、xxxAdapterというのはインターフェイスを実装したabstractなクラスっぽいですね。

java.awt.event.MouseAdapterってよく使うのですが、java.awt.event.ComponentListenerのComponentAdapterっていうのもありますね。

ルールが透けてみえると開発の効率がちょっとあがりますね。

[java]縁のある線を描く 2009/03/17

Javaです。swingです。
グラフィックです。

図形(shape)に縁をつけて描画する方法は、BasicStrokeを使えばいいことはわかっていたのですが、
線に縁(輪郭?)をつけるのはどうしたらいいのかなぁと悩んでいました。

単純な線でしたら表示を変えたBasicStrokeを二度使えばいいのではと思ったわけです。
まず縁になる線を描画してその上に線を描画すれば、よいのではと。
幅の違うBasicStrokeをふたつ用意します。幅が大きいBasicStrokeが縁となります。



以下コード。

package basicstroke;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

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

public class TestMainb {

public static void main(String[] args) {

JFrame frame = new JFrame() {
{
setAlwaysOnTop(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setLocation(100, 100);
getContentPane().add(new Panel());
}
};
frame.setVisible(true);
}

static class Panel extends JPanel {

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
BasicStroke basicStroke = new BasicStroke(10.0f,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
BasicStroke dashStroke2 = new BasicStroke(7.0f);

// 縁
g2d.setColor(Color.GRAY);
g2d.setStroke(basicStroke);
g2d.drawLine(0, 0, 400, 400);

g2d.setColor(Color.LIGHT_GRAY);
g2d.setStroke(dashStroke2);
g2d.drawLine(0, 0, 400, 400);
}

}
}

poj 3650 2009/03/06



これぐらいならね。僕でも解けるかな。
素直に置き換えていきます。

Javaコーディングで、ラベル使ってbreakするのが結構好きかも。

package p3650;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);
a:while(true){
String line = scanner.nextLine();
char[] cs = line.toCharArray();
for(int i=0;i<cs.length;i++){

if(cs[i] == '#') break a;
switch(cs[i]){
case ' ':
System.out.print("%20");
break;
case '!':
System.out.print("%21");
break;
case '$':
System.out.print("%24");
break;
case '%':
System.out.print("%25");
break;
case '(':
System.out.print("%28");
break;
case ')':
System.out.print("%29");
break;
case '*':
System.out.print("%2a");
break;
default:
System.out.print(cs[i]);
}

}
System.out.println();
}
}

}

poj 2014 2009/03/06

ひさしぶりにです。Javaです。
自力では解いてないです。


以下、参考。

package p2014;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

while (scanner.hasNext()) {
int w = scanner.nextInt();
if (w == 0)
break;
int now_x = 0;
int x = 0, y = 0;
int now_y = 0;
int max_x = 0;
int max_y = 0;
while (true) {
x = scanner.nextInt();
y = scanner.nextInt();
if (x + y < 0)
break;
if (x + now_x > w) {
now_x = x;
now_y += max_y;
max_y = y;
continue;
}
now_x += x;
if (now_x > max_x)
max_x = now_x;
if (y > max_y)
max_y = y;

}
now_y += max_y;
System.out.println(max_x + " x " + now_y);
}

}

}

[java] 1.4 1.5のリリースノート 2009/03/04



グーグルさんで、「java リリース ノート」で検索。
リリースノートをさがすのに手間取ったので、とりあえずメモ。

あと、キーワードは「Update Release Notes」かな。