メインへ戻る

2016年12月 1日

panda01.gif WiFI付きArduinoの Wemos D1(ESP8266)を動かす

中国ではWemos D1というArduino基板にWiFiシールドをくっつけた一体型の基板が20元(大体320円)で売っておりまして、遊びに用にはもってこいの代物だったりします。(現在、後継機のWemos D1 R2が28元位で出回っております。)
Wemos D1

Arduino UNOで外部機器のコントロールをした事はあるのですが、今回はWiFi機能をどうしても使う必要があったのでWemos D1の互換機を調達しました。公式サイトで見ても、Arduino IDEからどのようにして動作させるのかが分からなかったので、ググってみると・・・Wemos D1を動作させているNyacomさんのブログが引っかかりました。そこを参考にしながら、まずはコンパイルしてプログラム転送するところまでやってみました。

基板にUSB刺したら自動的にドライバがインストールされた気もしたのですが、念のため、Wemosの公式サイトに入り、ドライバをダウンロードし、インストール。

その後、Arduino IDEを立ち上げまして、「ファイル → 環境設定」とクリックしていき、
Wemos Arduino 環境設定

環境設定の中にある「Additional Boards Managers URLs」の部分に「http://arduino.esp8266.com/stable/package_esp8266com_index.json」を書き込みます。
Wemos Arduino 環境設定

次に、「ツール → ボード → ボードマネジャ」と移動すると、esp8266の項目が追加されているので、インストールを実行します。すると、遠隔地からダウンロードが実行されるとともにWemos用パッケージがインストールされます。
Wemos Arduino ESP8266

すると「ツール → ボード 」の所に「WeMos D1(retired)」が追加されるので、それを選択します。
Wemos D1 select

これで、開発するための環境設定が終わりました。実際に書き込めるかどうかについては、「ファイル → スケッチの例 → 01.Basics → Blink」を選択し、マイコンボードに書き込みを行ってみて、基板のLEDがフラッシュすれば成功となります。

投稿者 cazper : 19:00 | コメント (0) | トラックバック | b_entry.gif
     

2012年1月 8日

panda01.gif MSアクセス 1対1リレーションシップのやり方

MSアクセス2010等においてリレーションシップは強力なツールなのですが、物の本には殆ど「1体多」のリレーションシップの事しかかかれていないので、ここでは1対1のリレーションシップのやり方について書きます。

そもそも1対1のリレーションシップってどういう時に使うのでしょうか?

例えば、八百屋さんで野菜のデータベースを作成していたとします。野菜について、他の店の価格と自社の価格を比べるための価格に関するデータベースを保有したいとします。その場合は、野菜の商品リストとは別に(数社分を含む)価格リストを持つ必要があります。野菜一つにつき、自社、A社、B社は一つづつ価格を持つため、各野菜に付き各社の価格を並べた価格リストデータベースが欲しくなるわけです。


1対1のリレーションシップを作成する方法は簡単です。主キー同士を結びつけると1対1の関係になります。
1対1リレーションシップ MS Access
1対1ですので親子関係はありません。

ただし、もちろん1対1の関係ですから、例のように商品リストのID番号(主キー番号)と価格リストのID番号(主キー番号)は一致していないといけません。
1対1リレーションシップ例 MS Access


さて、Microsoft Access上では商品リストから展開して価格リストをいじることが出来ます。しかし、1対1の状態で1商品につき価格リストを2行にしようとすると・・・以下のように
1対1リレーションシップ例失敗 MS Access
テーブル'商品リスト'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことはできません。」というエラーメッセージが表示され、にっちもさっちも行かなくなります。その際には、このデータテーブルをまず閉じるしか抜けだす道が有りません。

更に、この状態で商品リストを追加していくことは出来ますが、新規の商品リストに価格を付けようとすると...
1対1リレーションシップ例失敗続 MS Access
同様に「テーブル'商品リスト'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことはできません。」というエラーメッセージが表示されてしまいます。

これを解消するには、主キーを振り直すしかなくなります。

投稿者 cazper : 21:16 | コメント (0) | トラックバック | b_entry.gif
     

2009年4月19日

panda01.gif 【PHP】cURLでhttps://(SSL)のサイトを読み込む

レンタルサーバのロリポップ!ではSSLに非対応ですので、「https://」で始まるサイトはもてません。サイトを持てないだけならガマンは出来ますが、httpsのサイトにアクセス出来ないと困ってしまいます。

PerlではCrypt-SSLeayというモジュールが提供されております。これはLWPの下でhttpsプロトコルのサポートをするのですが、サーバそのものがOpenSSLに対応していないと動きません。したがって、ロリポップ!に対してはこの手段を利用することができません。

幸いなことにロリポップ!では、cURLライブラリの利用が可能となりました。これにより、「https://」で始まるサイトの情報の取得も容易になります。


そこで試しにPHPで「https://」で始まるサイトを読み込んで表示するサンプルプログラムをご紹介しておきます。(参考:Perl Tips。てか、そのまんま。)

<?php

// アクセスする URL
$url = 'https://card.rakuten.co.jp/member/';

// 1. 初期化
$ch = curl_init();

// 2. アクセスする URL を設定
curl_setopt($ch, CURLOPT_URL, $url);

// 3. curl_exec を実行したときに戻り値として成功(TRUE)/失敗(FALSE)ではなく、
// HTMLなどの値(文字列)を返すようにする
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 4. サイトにアクセスする
$data = curl_exec($ch);

// 5. 結果を表示する
print $data;

// 6. 接続を閉じる
curl_close($ch);

?>

実行例はこちらです。

その他参考:
Manual -- curl usage explained

投稿者 cazper : 11:54 | コメント (0) | トラックバック | b_entry.gif
     

2009年3月21日

panda01.gif 【自作でWebcronだ】RSSリーダを利用して擬似的にcronを実行する

WEB系のプログラムでは定期的に他のサイトの情報を取得したかったりします。そこで重宝するのがcronサービスです。

Unix系OSでは標準で入っているcronサービスですが、多くのレンタルサーバではcronサービスが提供されていなかったりします。

そのニーズに応えるようにWebcronというWEBでcronサービスを提供してくれる企業がありました。しかし、このサービスは今年から有料化されてしまいまして、個人レベルのWEBプログラマには手痛い状態です。

そんなわけで、Webcronに変わって定期的にURLを叩いてくれるようにするサービスを自作してみました。(WEBで提供されているRSSリーダを利用するので、自分が指定した時間に更新させる事は出来ません)

それではプログラムを見てみましょう。利用した言語はPerlです。

#!/usr/bin/perl

##################################################
## RSSをそのまま取得・表示しつつ目的のURLを叩く
## 2008.3.21 (c)Keisuke ABE http://www.cazoo.jp/blog/
## KEISUKE ABE fembem@ホットメール.com
##################################################

##################################################
# 使用するパッケージ
##################################################

use CGI::Carp 'fatalsToBrowser';
use CGI ':all';

##################################################
# 設定場所
##################################################

###適当に表示したいRSSのサイトをURL指定してください。(rdfやxmlファイル等々)
$url_rss = 'http://ranking.rakuten.co.jp/rss/100387.xml';

###実際に叩きたいURLを指定(cronで指定したいサイト)
$url_cron = 'http://www.cazoo.jp/finance/equity/ipo/cgi/ipoget.cgi';

###Agentの指定(偽装に重要)
$WgetAgent = 'compatible; MSIE 6.01; Windows Me';

##################################################
# プログラム本体
##################################################

#########################
# サブルーチン群 #
#########################
### GET送信
sub wget{
my $url = shift;
$url = 'http://' . $url unless $url =~ m!^http://|https://|ftp://!;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->agent($WgetAgent . $ua->agent);
my $req = HTTP::Request->new( GET => $url );
my $res = $ua->request($req);

if ($res->is_success) {
return $res->content;
} else {
print "Content-type: text/plain;\n\n";
print "Getに失敗しますた : " . $res->status_line . "\n";
exit;
}
}

#########################
# 実行シーケンス #
#########################

##########ホムペから情報GETしたりURLを叩いたり
$html0 = wget($url_cron);
$html1 = wget($url_rss);

print "Content-type: text/html\n\n";
print $html1;

#print "END \n";
__END__

このプログラムを実行できる状況(ファイル属性755等)にして、このファイルをはてなRSS等に登録します。


具体例を書いておきます。今回は試しに「 http://www.cazoo.jp/test/crontest.cgi 」にRSSを取得・表示するファイルを置きました。(定期的に叩きたいURLは「http://www.cazoo.jp/finance/equity/ipo/cgi/ipoget.cgi」です。)

これをはてなRSSに登録します。

このCGIは楽天の売れ筋ランキングRSSを表示させますので以下のような登録画面が出てきます。

これで追加すれば...はてなRSSで楽天売れ筋ランキングを取得する度に定期実行したいWEBサービスも実行できます。

投稿者 cazper : 11:18 | コメント (0) | トラックバック | b_entry.gif
     

2009年3月12日

panda01.gif XMLEncoderとXMLDecoderを利用したXMLファイルの読み込みと書き出し

Javaはプラットフォーム依存をしないように作られているので、設定データ保存に関してWindowsでお得意のiniファイルやレジストリを利用するのではなくXMLファイルに書き出すことが普通なようです。

int、doubleなどの基本型だけでなく、オブジェクト型のデータのXMLファイルへの書き出しがサポートしているようです。

デフォルトで XML への書き出しがサポートされているクラスには Swing のコンポーネントを始め AWT や Swing 関連のクラスが多いのですが他にも Vector, ArrayList, LinkedList, HashSet, TreeSet, TreeMap, HashMap, Hashtable などは要素あるいはキーと値のペアが XML に書き出されます。 (AbstractCollection, AbstractList, AbstractMap のサブクラスや Hashtable やそのサブクラスであれば要素あるいはキーと値のペアが XML に保存されます。jdk1.5.0)(引用元)


簡単なサンプルプログラムを作成してみました。構成は以下の通り
●DataSet.java・・・データセットを定義し、データを保持します。
●XMLStream.java・・・実際のファイル書き出し・読み込みを行います。
●Main.java・・・メインの関数です。
Main.javaからXMLStream内の関数を呼び出して、DataSetで保持されたデータの書き出しやXMLファイルの読み込みを行います。

データを保持するDataSet.javaは一定の規則を守る必要がある模様。

ファイルに保存するデータを保持するクラス(今回の例ではDataSetクラス)を定義します。ただし、このクラスは次のような決まりを守る必要があります。

* 引数のないデフォルトコントラスタが定義されている
* 変数に対するアクセッサ(set変数名、get変数名という名前のメソッド)が定義されている(CodeZine)

実際のサンプル・コードを見てみましょう。
●DataSet.java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package xmlencodertest;

import java.util.ArrayList;

/**
*
* @author Cazper
*/
public class DataSet {

private int value;
private String name;
private ArrayList lists;

public DataSet() {
value = 0;
name = "Default Name";
lists = new ArrayList();
}

public DataSet(int power, String name, ArrayList lists) {
this.value = power;
this.name = name;
this.lists = lists;
}

public void setValue(int i) {
value = i;
}

public int getValue() {
return value;
}

public void setName(String s) {
name = s;
}

public String getName() {
return name;
}

public void setLists(ArrayList a){
lists = a;
}

public ArrayList getLists(){
return lists;
}

}

ArrayListはArrayList自体をコピーするようなset関数を用意します。


●XMLStream.java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package xmlencodertest;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;

/**
* ファイルの読み込み、書き出し部
* @author Cazper
*/
public class XMLStream {

/* XMLファイル */
private String strFile;

/**
*
*/
public XMLStream(String strFile){
this.strFile = strFile;
}

/**
* オブジェクトデータをXMLに出力する。
*/
public void writeXML() {

ArrayList list = new ArrayList();
list.add("のびた");
list.add("すねお");

DataSet dataSet = new DataSet(100, "ジャイアン", list);

try {
XMLEncoder encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream(strFile)));
encoder.writeObject(dataSet);
encoder.close();
} catch(Exception e) {
e.printStackTrace();
}

}

/**
* オブジェクトにXMLデータを入力する。(ファイルを読み込む)
*/
public void readXML() {

DataSet dataSet = null;
try {
XMLDecoder dec = new XMLDecoder(
new BufferedInputStream(
new FileInputStream(strFile)));
dataSet = (DataSet)dec.readObject();
dec.close();
} catch(FileNotFoundException e) {
e.printStackTrace();
return;
}

System.out.println("value=" + dataSet.getValue());
System.out.println("name=" + dataSet.getName());
System.out.println("name1=" + dataSet.getLists().get(0));
System.out.println("name2=" + dataSet.getLists().get(1));

}

}


●Main.java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package xmlencodertest;

/**
* Main部分
* @author Cazper
*/
public class Main {

/* XMLファイル */
private static String strFile = "test.xml";

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
XMLStream xmlStream = new XMLStream(strFile);

//書き出す
xmlStream.writeXML();
//読み込む
xmlStream.readXML();
}

}


実際に保存されたXMLファイル(test.xml)は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_06" class="java.beans.XMLDecoder">
<object class="xmlencodertest.DataSet">
<void property="lists">
<void method="add">
<string>のびた</string>
</void>
<void method="add">
<string>すねお</string>
</void>
</void>
<void property="name">
<string>ジャイアン</string>
</void>
<void property="value">
<int>100</int>
</void>
</object>
</java>


<参考>
・CodeZine:XMLEncoderとXMLDecoderを使用したデータの書き出しと復元
・Bean Persistence:XML に保存可能なオブジェクト(魚拓)
・プログラミング・ノウハウ集 ~ JAVA 編 (1):JavaとXMLファイルのデータ連携
Class XMLEncoder
Class XMLDecoder

投稿者 cazper : 12:30 | コメント (0) | トラックバック | b_entry.gif
     

2009年2月14日

panda01.gif 【SUDOKU:数独】自動解法プログラム【ナンバープレース:ナンプレ】

本屋を眺めていたらSUDOKU(数独)の本が目に入りまして手に取ってみたものの、あまりの面倒臭さにストレス100倍になってしまいました。そこで、自動解法プログラムを作ってみました。


プログラムはこちら(Javaアプレットです)


決まった数字を入れて、「Solve」ボタンを押すと...
SUDOKU Automatic Solver

自動的に答えを探索します。
SUDOKU Automatic Solver

JavaScriptで出来た自動解法のサイトもあるのですけれども、複雑な問題を解けなかったり、時間が掛かりすぎたりします。特にバックトラック法(深さ優先探索法)を実装しているサイトでは計算途中でブラウザがビジー状態になってしまう事があります。

というわけで、適当にアルゴリズムを考えてJava Appletで作ってみたところ、ナンプレの解法を紹介しているサイトで掲載されていた上級問題も1秒も掛からずに見つけ出しました。

ナンバープレースを解くのも面倒くさいのですけれども、プログラムを書くのも面倒くさいので、手抜きをしてあります。とはいえ、直感的にはプログラムに手抜きをしたとしても複数解答が見つけだせるものと思っております。(ただし、1つのマス目に4つ以上の解候補がある状態で解法が詰まると計算を放棄します。)


<プログラミング備考>
所要コーディング時間は2日間ぐらいかな。殆どの時間はGUIのレイアウトに使われています(涙。再帰関数を利用していて2分木、3分木での探索をしております。

<プログラミング参考サイト>
Javaでオブジェクト(ArrayListなど)のディープコピーを行う
Javaアプリケーションからブラウザを開く
Web Sudoku

(注)
「数独(スウドク)」はニコリの登録商標(第3327502号など)です。そのためナンバープレース(ナンプレ)とも呼ばれるみたいですね。


PS1
数独はかなり昔に流行ってたから解法ソフトなんてのはザラにあるわけですけどね。

PS2
英語版サイトも作ってみたり。さらに中国語版サイトも作ってみたり。

投稿者 cazper : 00:01 | コメント (2) | トラックバック | b_entry.gif
     

2009年2月 7日

panda01.gif 【ピンイン変換】中国語(漢字)のpinyin表記をするサービス【四声】

中国語(漢字[汉字])からピンイン変換(四声付き)をするWEBサービスを作ってみました。

漢字→ピンイン変換

対応言語は、簡体字、繁体字、新字体等々。

画面はシンプルにして、翻訳サイトと簡体字や繁体字等々の変換サイトへのリンクをつけたので普段使う分においては十分だと思います。

中国の方々と音声でチャットをしていると漢字の読み方が必ず必要になります。そして、文字でチャットをする際にも漢字変換では四声を覚えなくてもピンインだけは覚えておく必要が出てきますからピンイン変換のサイトって何気に需要があると思うんですよね。


利用したプログラム言語はPHPです。
対応表はPinyin table for Unicodeを利用しました。


<参考にしたサイト>
Unihan Database
配列の操作
PHPファイルはUTF-8Nで保存しろ
PHPにおけるUnicode文字列の正規化
PHP 基礎編9 - 正規表現、マッチ、置き換え、ereg、eregi、eregi_replace
ファイルを1行づつ処理する
PHP HTMLの改行タグとソースの改行の違いについて
PHPの正規表現のpreg_match()関数
Unicode一覧表
hex2bin
PHPで文字列を整数に変換する


PS
それにしても、プログラムは好きじゃないな。

投稿者 cazper : 23:47 | コメント (1) | トラックバック | b_entry.gif
     

2009年1月28日

panda01.gif 【JFreeChart】グラフをコピー【クリップボード】

JFreeChartのグラフをクリップボードへコピーする方法をご紹介します。

JFreeChartでは、作成したグラフをPNGやらJPG等で保存する関数は予め用意されています。しかし、グラフをクリップボードへコピーする関数は用意されておりません。

そこで、自前で画像をクリップボードへコピーする関数を用意しなければなりません。この関数自体はJFreeChart専用というわけではないので、画像をクリップボードへコピーしたい方にも参考になると思います。


実際にソースを見てみましょう。以下のファイルはJFrameを用意してグラフを描画し、クリップボードへコピーする関数を呼び出しております。
Main.javaファイル

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package jfreechartclipboardtest;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import javax.swing.JFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.Plot;
import org.jfree.data.general.DefaultPieDataset;

/**
* 参考:http://www.javadrive.jp/jfreechart/ini/index3.html
* @author Cazper
*/
public class Main extends JFrame{

static JFreeChart chart;

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Main frame = new Main();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 400, 400);
frame.setTitle("グラフサンプル");

//クリップボードに描画する(ここではサイズを小さく指定)
CopyToClipboard(200,200);

//フレームを見えるようにします
//注意:この関数をCopyToClipboardの前に持ってくると変に表示されます
frame.setVisible(true);

}

/**
* コンストラクタ(パイチャートを作成してます)
*/
Main(){

DefaultPieDataset data = new DefaultPieDataset();
data.setValue("ジャイアン", 47);
data.setValue("スネオ", 31);
data.setValue("ノビタ", 22);

chart = new JFreeChart(new PiePlot(data));

Plot plot = chart.getPlot();
plot.setBackgroundPaint(new Color(192, 192, 192));

ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);

}

//クリップボードに描画する(外部クラスを使わないのでstatic関数)
static public void CopyToClipboard(int width, int height) {
Toolkit kit = Toolkit.getDefaultToolkit();
Clipboard clip = kit.getSystemClipboard();
ImageSelection is = new ImageSelection(chart.createBufferedImage(width, height));
clip.setContents(is, null);
}

}


以下のファイルはクリップボードに画像をコピーするクラスが書かれております。
ImageSelection.javaファイル

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package jfreechartclipboardtest;

import java.awt.Image;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

/**
* 画像のコピーを行う
* http://www.ne.jp/asahi/hishidama/home/tech/java/clipboard.html
* @author Cazper
*/
public class ImageSelection implements Transferable, ClipboardOwner{

protected Image data;

/** コンストラクター */
public ImageSelection(Image image) {
this.data = image;
}

/** 対応しているフレーバーを返す */
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.imageFlavor };
//throw new UnsupportedOperationException("Not supported yet.");
}

/** フレーバーが対応しているかどうか */
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.imageFlavor.equals(flavor);
//throw new UnsupportedOperationException("Not supported yet.");
}

/** 保持している画像を返す */
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (DataFlavor.imageFlavor.equals(flavor)) {
return data;
}
throw new UnsupportedFlavorException(flavor);
//throw new UnsupportedOperationException("Not supported yet.");
}

/** クリップボードのデータとして不要になった時に呼ばれる */
public void lostOwnership(Clipboard clipboard, Transferable contents) {
this.data = null;
//throw new UnsupportedOperationException("Not supported yet.");
}

}

実行するとフレームは以下のように表示されます。

クリップボードに画像として書き込まれたグラフは以下のようになります。


諸々参考にしたサイト
StringSelectionクラスの作成
クリップボードへの転送
クラス java.awt.datatransfer.DataFlavor の使用
JFreeChartのグラフ処理

P.S.
ベクター画像(ベクトル画像)でクリップボードへコピーする

投稿者 cazper : 21:13 | コメント (0) | トラックバック | b_entry.gif
     

2008年12月 8日

panda01.gif 【NetBeans】jTableのセルのエディタでコンボボックスを使えるようにする【java】

NetBeansに限った話ではないのですけれども、JTableのセルエディタでコンボボックスを使うための簡単な例を紹介しておきます。

適当に作成したJFrame上に、jTableとjButtonを配置します。
001

jButtonのアクションを設定します。(今回はbuttonClicked関数を設定)
002

buttonClicked関数の中身を実装していきます。JComboBoxのインスタンスをDefaultCellEditorの引数に用いて、DefaultCellEditorのインスタンスをsetCellEditorの引数として用います。
003

ボタンを押すと、「Title 1」の列のセル全てがコンボボックスとして使えるようになります。
004


次に設置したコンボボックスから値を取得する方法を紹介します。一例として、値を取得するためのボタンを設置します。
005

設置したボタンをクリックした際のイベント関数を実装します。
006
System.out.println((JComboBox)((DefaultCellEditor)(jTable1.getCellEditor(3, 0))).getComponent()).getSelectedIndex());

実際にボタンを押してみると標準出力にComboBoxで選択したIndexが表示されます。
007


<参考サイト>
● javadrive...コンボボックスをセルエディタとして設定する
● プログラマメモ2...JTableのセルのエディターにコンボボックスを使う


P.S.1
個々のセルごとに個別のComboBoxを設置するには、DefaultCellEditor の派生クラスを作る必要があります


P.S.2
今更思い出したのですがJavaの開発環境Forteって今どういう扱いなんだろう。いつの間にか名前を聞かなくなったなぁ。(ここにちょっと書いてあった)

投稿者 cazper : 23:50 | コメント (0) | トラックバック | b_entry.gif
     

2008年10月 7日

panda01.gif 【java】OutOfMemoryError【メモリーエラー】

Javaで大量の画像やデータを取得・保持するようなプログラムを実行すると、動的に確保可能なメモリの領域(ヒープ領域)が足りなくなる事があります。

足りなくなると以下のようなエラーメッセージが表示されます。
java.lang.OutOfMemoryError: Java heap space

どうやらJavaヒープサイズの初期値(J2SDK1.3以降では、初期サイズ:2M バイト、最大サイズ:64M バイト)は予め決まっているようです。従いまして、-Xmx256 とかの拡張を行う必要があります。


んじゃ、NetBeansはどこで設定するのかと言うと、プロジェクトのプロパティーを開いて選択肢の「実行」をクリックして、「VM オプション」に -Xmx256といった拡張オプションを指定します。


■その他の参考サイト
急がず休まず...Java heap space
FUJITSU...Javaヒープ領域について

投稿者 cazper : 12:56 | コメント (0) | トラックバック | b_entry.gif
     

2008年10月 1日

panda01.gif 【java】NetBeansでjlapackを使えるようにする

LAPACKと言えば、Fortran 77 で書かれた数値計算用のライブラリであり、高速で代数計算が出来るという特長があります

高速計算させたいのにJavaか?という感じもしなくはないですが、Javaだからこそ出来るだけ高速に数値計算をさせたいわけでして...LabackのJava版であるjlapackをNetBeansで利用する方法を書いておきます。


①ダウンロード
netlibのホームページに飛んで適切なファイルをダウンロードします。(例えば、jlapack-0.8.zipです。)


②インストール
ダウンロードしたファイルを解凍し、ライブラリとして保存しておきたいディレクトリに置きます。

(例)
C:\JavaProgram\jlapackに「blas.jar」「blas_simple.jar」「f2jutil.jar」「lapack.jar」「lapack_simple_jar」「xerbla.jar」ファイルをコピー


③CLASSPATHの設定
NetBeansを立ち上げて、メニューからツール(T)>ライブラリ(L)を選択します。
jlapack01
新規ライブラリボタンをクリックして、「ライブラリ名」を自分で分かりやすい名前を設定して(例:jlapack )、「ライブラリの種類」はデフォルトのままの"クラスライブラリ"を選択して、了解ボタンを押します。

今作成した、ライブラリを選択し、ライブラリのクラスパスを設定します。
(例) C:\JavaProgram\jlapack\blas.jar
他にもコピーしたファイルを指定してください。
jlapack02


④開発中のプロジェクトにライブラリとして加える
開発中のプロジェクトウィンドウ内に「ライブラリ」というノードがあるので、そこを右クリックします。ポップアップ画面からライブラリの追加を選択し、jlapackライブラリを追加します。
jlapack03

jlapack04

あとは、コードを書くのみです。


その他参考:
Java Advanced ImagingをインストールしてNetBeans(6.1)で使う
JFreeChartをインストールしてNetBeans(6.1)で使う

投稿者 cazper : 21:15 | コメント (0) | トラックバック | b_entry.gif
     

2008年9月 8日

panda01.gif 【Java】ArrayListに配列を格納して扱う方法

JavaのArrayListに配列を格納して、格納された配列をArrayListから呼び出して使う方法をご紹介します。

「可変長配列×可変長配列」を作成したい場合にはArrayListを使って多次元配列を作成すれば良いのかもしれませんが、「可変長配列×固定長配列」でこの手の手法を用いるのは冗長すぎる気もするわけです。

「可変長配列×固定長配列」の場合には、可変長配列部にArrayListを使い、固定長配列には従来型の1次元配列を使えば良いわけです。というわけで、以下に ArrayListに配列を格納して扱う方法を簡単に示したサンプルプログラムを紹介しておきます。

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package arraylisttest;

import java.util.ArrayList;

/**
*
* @author kabe
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

ArrayList array = new ArrayList();

String[] string2Array = { "Sunday", "Monday", "Tuesday" };

//array.add(string2Array)ではなく、クローンを渡すこと。
//そうしないと、string2Arrayが参照渡しになり、
//後にstring2Array[0] = "Cat"としてしまうと、
//SundayがCatに上書きされてしまう。
array.add(string2Array.clone());

string2Array[0] = "Cat";
string2Array[1] = "Dog";
string2Array[2] = "Pig";

array.add(string2Array.clone());

//ArrayListの0番要素に格納した配列の1番要素を抜きます。
String kotoba = array.get(0)[1]; //"Monday"が抜かれます。
System.out.println(kotoba); //Dogが表示されます。

//ArrayListの1番要素に格納した配列の0番要素を抜きます。
kotoba = array.get(1)[0]; //"Cat"が抜かれます。
System.out.println(kotoba); //Dogが表示されます。

//ArrayListの1番要素を抜き出し、その2番要素を抜き出します。
String words[] = array.get(1); //"Cat,Dog,Pig"が抜かれます。
System.out.println(words[2]); //Pigが表示されます。

}

}

P.S.
VBの方はこちら

投稿者 cazper : 18:59 | コメント (0) | トラックバック | b_entry.gif
     

2008年9月 4日

panda01.gif JFreeChartでクリックしたチャート(グラフ)のみハイライトさせる

●和題:JFreeChartでクリックしたチャート(グラフ)のみハイライトさせる
●英題:How to highlight each clicked piece on an pie chart using JFreeChart

JFreeChartを利用して作成したチャート(グラフ)において、各チャートをクリックしたらその部分のみ色を変更させたりハイライトさせたりする方法を紹介します。

グラフの種類は何でも良かったのですけれども、今回はPieChartを利用します。

マウスイベントを拾うには、ChartPanelオブジェクトに対してChartMouseListenerを設置します。PieChartにおいてどのチャートがクリックされたのかを取得するには、getEntity().toString()を利用するしかなさそうです。これを利用すると、チャートをクリックした際に次のようなメッセージを取得する事が出来ます。

PieSection: 0, 1(Category 2)

赤字で表示された部分が、クリックされたチャートの番号(0から順番)になります。String型で取得されるため、substring(15,16)でチャート番号を抜き出します。


クリックされたチャート部の色を変更する際には、setSectionPaintメソッドを利用します。

setSectionPaint(data.getKey(i), java.awt.Color.ORANGE);

1番目の引数は、データセットのキーになっておりますので、クリック時に取得されたチャート番号(0から順番)を渡します。2番目の引数は色です。


実際のサンプルプログラムを以下に書いておきます。

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/* 参考サイト: http://www.thinkit.co.jp/cert/tech/4/5/2.htm */
/* : http://www.javaworld.com.tw/jute/post/view?bid=5&id=126553&sty=3 */

package jfreecharttest;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;

/**
* 円グラフのサンプル
*/
public class PieChartSample {

DefaultPieDataset data;
PiePlot plot;
boolean[] colorflag = new boolean[3];

public static void main(String[] args) {

//引用:static mainの呪い(http://funini.com/kei/java/static_main.shtml)
PieChartSample mj = new PieChartSample();
mj.main();

}

public void main() {
/* ここに書きたかった内容を書く*/
// (1)データセットの作成
data = new DefaultPieDataset();
data.setValue("Category 1", 50);
data.setValue("Category 2", 20);
data.setValue("Category 3", 30);

// (2)JFreeChartオブジェクトの生成
JFreeChart chart = ChartFactory.createPieChart(
"Simple Pie Chart",
data,
true,
true,
false
);

// (3)描画領域のオブジェクトを確保
plot = (PiePlot)chart.getPlot();

// (4)グラフの出力
ChartFrame frame = new ChartFrame("Simple Pie Chart", chart);
// (4.1) ChartPanelオブジェクトを確保しておく
ChartPanel p = frame.getChartPanel();
// (4.2) MouseListenerを設置(マウスイベントが発生するようにする)
p.addChartMouseListener(new MyMouseListener());

frame.pack();
frame.setVisible(true);
}


//MouseListner(マウスイベントが発生するようにする)
private class MyMouseListener implements ChartMouseListener
{

//描画用の配列を確保
java.awt.Paint tempPaint[]= new java.awt.Paint[3];

public void chartMouseClicked(ChartMouseEvent arg0)
{

int i;

//必要ではないけど、確認のために標準出力を設定
System.out.println(arg0.getEntity().toString());
System.out.println(arg0.getEntity().toString().substring(15,16));

//チャート(グラフ)の何番目がクリックされたかを取得
i=Integer.valueOf(arg0.getEntity().toString().substring(15, 16)); //数字

//1度クリックされたらオレンジへ、もう一度クリックされたら元の色に戻す
if (colorflag[i]==false) {
tempPaint[i]= plot.getSectionPaint(data.getKey(i));
//直接何番目のチャートかを指定して色を変更している。
plot.setSectionPaint(data.getKey(i), java.awt.Color.ORANGE);
colorflag[i]=true;
}else{
plot.setSectionPaint(data.getKey(i),tempPaint[i]);
colorflag[i]=false;
}

}

//マウス移動のイベントを書きたい場合は以下へ(例えばマウスオーバーとか...mouseover)
public void chartMouseMoved(ChartMouseEvent arg0)
{
//System.out.println("Move:"+arg0.getTrigger().getX()+","+arg0.getTrigger().getY());
}
}
}


実際に表示される画面は以下です。
●立ち上がった直後の画面
jfreechartmouse01

●クリック時(2番目のチャートをクリックしております)
jfreechartmouse02
もう一度クリックすると元の色が再表示されます。


P.S.1
棒グラフに関しては、こちらを参照された方が早いかと

P.S.2
プログラム好きじゃないや(笑 ビジョナリー向きだなぁ(笑

投稿者 cazper : 18:16 | コメント (0) | トラックバック | b_entry.gif
     

2008年8月29日

panda01.gif JFreeChartをインストールしてNetBeans(6.1)で使う

GUIに向いているJavaの開発環境であるNetBeansで、グラフ表示に強いJFreeChartを利用する方法を紹介します。

①ダウンロード
JFreeChartのホームページに飛んで適切なファイル(JFreeChartとJCommon)をダウンロードします。同時にインストールのやり方が書いてあるドキュメントもダウンロードできます。

ダウンロードしたら、圧縮されたファイルを解凍して、ライブラリとして保管しておきたいディレクトリにコピーしておきます。

(例)
私の場合は、C:\JavaProgramというディレクトリを作成し、「C:\JavaProgram\jcommon-1.0.13」・「C:\JavaProgram\jfreechart-1.0.10」という感じで解凍したファイルを保存しております。


②AntでJavadocの作成
Antをインストールしていない方はこちらこちらを参考にしてインストール&パスの設定をしてください。

Antを用いてリファレンスマニュアルであるJavadocを作成します。コマンドプロンプトを立ち上げて、先ほど展開したJFreeChartやJCommonディレクトリ内のAntディレクトリに入り、「ant javadoc」というコマンドを実行します。
Ant JavaDoc
これで、JFreeChartとJCommonのJavadocが完成します。


③CLASSPATHの設定
NetBeansを立ち上げて、メニューからツール(T)>ライブラリ(L)を選択します。
JFreeChart NetBeans
新規ライブラリボタンをクリックして、「ライブラリ名」を自分で分かりやすい名前を設定して(例:jcommon-1_0_13 )、「ライブラリの種類」はデフォルトのままの"クラスライブラリ"を選択して、了解ボタンを押します。

今作成した、ライブラリを選択し、ライブラリのクラスパスを設定します。
(例) C:\JavaProgram\jcommon-1.0.13\jcommon-1.0.13.jar
JFreeChart NetBeans

続いて、ソースディレクトリを指定します。
(例) C:\JavaProgram\jcommon-1.0.13\source
JFreeChart NetBeans

さらに、Javadocのあるディレクトリを指定します。
(例) C:\JavaProgram\jcommon-1.0.13\javadoc
JFreeChart NetBeans
これで、JCommonに関しての設定は終了です。


JFreeChartに関する設定も先程と同様に行います。新規ライブラリボタンをクリックして、「ライブラリ名」を自分で分かりやすい名前を設定して(例:jfreechart-1_0_10 )、「ライブラリの種類」はデフォルトのままの"クラスライブラリ"を選択して、了解ボタンを押します。
JFreeChart NetBeans
今作成した、ライブラリを選択し、ライブラリのクラスパスを設定します。
(例) C:\JavaProgram\jfreechart-1.0.10\lib\jfreechart-1.0.10.jar
続いて、ソースディレクトリを指定します。
(例) C:\JavaProgram\jfreechart-1.0.10\source
さらに、Javadocのあるディレクトリを指定します。
(例) C:\JavaProgram\jfreechart-1.0.10\javadoc

これで、JFreeChartに関しての設定も終了です。


④開発中のプロジェクトにライブラリとして加える
開発中のプロジェクトウィンドウ内に「ライブラリ」というノードがあるので、そこを右クリックします。ポップアップ画面からライブラリの追加を選択し、JFreeChartライブラリとJCommonライブラリを追加します。
JFreeChart NetBeans

あとは、コードを書くのみです。


P.S.1
後日、グラフにクリック(or マウスオーバー)したら、そのグラフ部のみをハイライトするプログラムを公開する予定です。

P.S.2
JAI(Java Advanced Imaging)のインストール&NetBeansでの設定法はこちら

投稿者 cazper : 21:04 | コメント (0) | トラックバック | b_entry.gif
     

2008年8月28日

panda01.gif Java Advanced ImagingをインストールしてNetBeans(6.1)で使う

NetBeansはGUIプログラミングをする際に楽だったりします。

一方、ちょっとした画像処理をするのにJAI(Java Advanced Imaging)を利用すると便利だったりもします。

というわけで、ここではJAIをインストールしてNetBeansで利用する方法を書いておきます。

①ダウンロード
jai projectのホームページに飛んで適切なファイルをダウンロードします。

(例)
jdkのディレクトリ(例えば、C:\Program Files\Java\jdk1.6.0_06 )にインストールしたいのならば、jai-1_1_3-lib-windows-i586-jdk.exeのようにjdk用のファイルをダウンロードします。


②インストール
EXEファイルを実行して、素直にインストールします。(例えば、インストール先は C:\Program Files\Java\jdk1.6.0_06\ のようになります。)


③CLASSPATHの設定
NetBeansを立ち上げて、メニューからツール(T)>ライブラリ(L)を選択します。

新規ライブラリボタンをクリックして、「ライブラリ名」を自分で分かりやすい名前を設定して(例:jai-1_3_3 )、「ライブラリの種類」はデフォルトのままの"クラスライブラリ"を選択して、了解ボタンを押します

今作成した、ライブラリを選択し、ライブラリのクラスパスを設定します。
・C:\Program Files\Java\jdk1.6.0_06\jre\lib\ext\jai_core.jar
・C:\Program Files\Java\jdk1.6.0_06\jre\lib\ext\jai_codec.jar
・C:\Program Files\Java\jdk1.6.0_06\jre\lib\ext\mlibwrapper_jai.jar

設定はこれで完了です。


④開発中のプロジェクトにライブラリとして加える
開発中のプロジェクトウィンドウ内に「ライブラリ」というノードがあるので、そこを右クリックします。ポップアップ画面からライブラリの追加を選択し、JAIライブラリを追加します。

あとは、コードを書くのみです。


参考:
●REDHATの男…Java Advanced Imaging(jai_linux-i586.jar)のインストール
●SUN(本家)…http://java.sun.com/products/java-media/jai/INSTALL-1_1_3.html:Java(TM) Advanced Imaging API Installation 1.1.3
(↑バージョンが変わったら、リンク先アドレスの1.1.3の部分を該当のバージョンに変えるば良いかと。)

投稿者 cazper : 22:22 | コメント (0) | トラックバック | b_entry.gif
     

2007年3月31日

panda01.gif XMLデータをXSLTとCSSのスタイルシートで表示する

XMLで記述されたデータをブラウザに表示するには、HTML形式に変換する必要があるのですが、その方法の一つとしてXMLをXSLTでHTML形式にまず変換し、その後CSS(カスケーディング・スタイル・シート)で表現する方法があります。

その表現法の1例を紹介しておきます。下記はXML→XHTML1.1に変換するXSLTファイルです。変換したXHTMLがCSSファイル(default.css)を読み込んでいます。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output
  method="html"
  encoding="UTF-8"
  doctype-public="-//W3C//DTD XHTML 1.1//EN"
  media-type="text/html"
  doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />

 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
  <head>
   <title>Sample</title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <link rel="prev" href="about.html" />
   <link rel="next" href="struct.html" />
   <link rel="stylesheet" type="text/css" href="default.css"/>
   <style type="text/css">
   </style>
  </head>
  <body>
   <div id="container">
    テストです
   </div>
  </body>
 </html>
</xsl:template>

■参考図書
詳解HTML & XHTML & CSS辞典第3版

■参考URL
XSLT:http://www.atmarkit.co.jp/fxml/rensai/rexml01/rexml01.html
   :http://www.techscore.com/tech/XML/XSLT/xslt07.html
   :http://www6.airnet.ne.jp/manyo/xml/xslt/step22.html
   :http://www.res-system.com/weblog/item/319/catid/53
   :http://www.utj.co.jp/xml/book/info/1vol_p216.html
XHTML:http://www.kanzaki.com/docs/html/xhtml1.html

投稿者 cazper : 18:31 | コメント (0) | トラックバック | b_entry.gif
     

2007年3月 2日

panda01.gif トグルボタンを配置する方法(VB.NET, Visual C#, Visual Studio 2005)

世の中は、知っていれば簡単と思うような事でも、知らない人にとってはどうして良いのか分からなかったり、調べるにしても意外と時間が掛かってしまう事って結構あったりします。

その典型例がVisual BasicやVisual C#でトルグボタン(toggle button)の作成です。(笑

単なるボタン配置ならば、ツールボックスから選択して配置するだけなんですが…トルグボタンとなると無いじゃん!って事になるわけです。

例えば、グーグルで「トグルボタン VB」で調べると、「VB 標準でないコントロール - DriveListBox, ToggleButton, Shapeなど」が上位に表示されます。ここで説明されているのは、COMコンポーネント(Forms2.0 Object Library)でトグルボタンを配置する方法です。

ん、でも、環境によっては動かないプログラムとなってしまう可能性があり、問題が残ります。(ToggleButtonに関して言えば、Clickイベント(ClickEvent)内でThrow new ApplicationException("文字列")を書いてもエラーダイアログが表示されなかったりします。)


それじゃどうするのかというと、CheckBoxを利用するんです♪

CheckBoxのAppearanceプロパティをButtonに変更すれば、チェックボックスがトグルボタンに早変わりします。(押された時のデザインを変更する時は、FlatStyleプロパティをSystemに変更します)

投稿者 cazper : 06:34 | コメント (2) | トラックバック | b_entry.gif
     

panda01.gif ComboBoxのテキストを編集させない方法(VB.NET, Visual C#, 2005)

世の中は、知っていれば簡単と思うような事でも、知らない人にとってはどうして良いのか分からなかったり、調べるにしても意外と時間が掛かってしまう事って結構あります。

その典型例が、Visual StudioのComboBoxです。(笑

ComboBoxと言えば下のようなものを指します。ユーザーはマウスだけでComboBoxの中のリストから目的の項目を選択できます。



しかし、VB.NETやVisual C# または2005以降を利用して画面にComboBoxを配置すると、ユーザーがComboBoxのテキストを編集できるようになってしまいます。ドロップダウンされるリストが表示されるだけでは無くなるのです。

ユーザーにテキストの編集を出来なくさせて、リストの選択だけをさせるようにするには、ComboBoxのDropDownStyleプロパティをComboBoxStyle.DropDownListに変更します。(参考元:.NET Tips (VB.NET, C#, Visual Studio...))

投稿者 cazper : 06:05 | コメント (0) | トラックバック | b_entry.gif
     

2007年2月10日

panda01.gif ウェブサイトのサムネイル画像を作るには( How to make the Web site thumbnails ?)

最近、はてなスクリーンショット百式トラックバックのようにウェブサイト(Web site)のスナップショットをサムネイル化している風景を見るようになりました。

技術的にどうやっているのかをちょっと調べてみました。 作り方は意外と簡単で、IEなりFirefoxのエンジンを利用して画面表示した物をキャプチャしたり、エンジンを利用したソフトやライブラリが提供するAPIを利用して画像を作成する方法がとられているようです。(参考:Z手帖)

もちろん、WindowsでもLinuxでもどちらでもサムネイル画像(thumbnail images)を作る事は可能なようです。ただし、フラッシュ画像を多様しているウェブサイトもあるのでWindowsの方が良いのではないかとWeb Artisan Blogでは言っております。Weboo! Returnsによれば、はてなやSimpleAPIではWindowsサーバを利用してサムネイル画像を作成しているようです。


Windowsを利用する場合には次のようなツールをコマンドラインで利用しているようです。
url2bmpを使う。ちなみに、url2jpegというソフトも作成されているらしい。
CrenaHtml2jpgを使う。
このソフトをCGIから利用すればサムネイル画像が簡単に作成できます。(参考:Ceekz Logs)


Linux系で画像を取得する場合には、
●Firefoxを立ち上げて、コマンドラインでブラウザに目的のサイトを取得させて、それをimportコマンドでキャプチャする(参考:ほそいりょすけのXOOPS) ちなみに、この方法を試してみましたがFedoraCore4の環境で、「unable to read X window」と表示されて出来ませんでした…
●Xvfb(仮想フレームバッファ)を用意し、その上でFirefoxを立ち上げて、import(rootオプション付けて画面全体を取得)コマンドを実行してキャプチャする(参考:Web Artisan Blog…PHPで実現)
●Mozilla/FirefoxのレンダリングエンジンであるGeckoを使うためのAPIを利用して、ブラウザを通さずにサムネイル画像を作成する(参考:Weboo! Returns.…Pythonで作成。 hackdiary…Pythonで作成。 MozShot…Rubyで作成。 Z手帖…Rubyソースを解析。)

一番最後の方法だとサーバーモジュールとして提供できそうなので便利かもしれません。


ちなみに、サムネイル画像を作る過程を推測・解析しているサイトは次のサイト
dark7.jp
技術情報メモphp-usersメーリングリストを紹介しています。


サムネイル作成・提供の無料・有料サービスが立ち上がってきています。(参考:Knowledge Base Weblogs 例:HeartRails) しかし、グーグルが無料でこのサービスに手を出したら一発で広がるし他の有料サイトを駆逐できると思います。


とはいえ、このサムネイルを利用した新たなサービスを作る事が出来そうですね。

投稿者 cazper : 19:08 | コメント (0) | トラックバック | b_entry.gif
     

2007年2月 7日

panda01.gif ロリポップでRSS用Perlモジュールは使える模様

ロリポップ!上で動作させるPerlプログラムを作ろうとしています。作ろうと思っているPerlプログラムはモジュールが必要となります。

最近では、Perlインタプリタのインストール時にメジャーなモジュールも一緒にインストールされます。しかし、メジャーなモジュール以外は後から追加してインストールしなければなりません。個人所有のサーバならばCPANシェルを利用して自動でインストール出来るのですが、レンタルサーバだとそうはいきません。

そこで、ロリポップ!のようなレンタルサーバに今回必要としているモジュールが組み込まれているのかをちょっと調べてみました。

そしたら、以下の二つのモジュールは既に組み込まれている事が判明しました。
Jcode
XML::RSS

しかし、パターンマッチング用の次のライブラリは組み込まれていないようです。
Template::Extract

これは「テキストからテンプレートでマッチした部分の文字列を取り出すことができるという機能」が備わっておりWeb情報の抜き出しに便利なモジュールです。(参考:cles::blog)


そこで、ローカルのディレクトリにモジュールファイルを次のように手動で置き、
.(ローカルのホームディレクトリ)/lib/Template/Extract.pm
.(ローカルのホームディレクトリ)/lib/Template/Extract/Compile.pm
.(ローカルのホームディレクトリ)/lib/Template/Extract/Parser.pm
.(ローカルのホームディレクトリ)/lib/Template/Extract/Run.pm

CGIのインクルードPATHに次のような記述を書く事で動作させました。(参照:ここ)
use lib qw(./lib);
use Template::Extract;

インクルードPATHは、Perlのソースをどこに置くかで随時変えてください。上記の例は、ソースプログラムをローカルのホームディレクトリに置いた際の例です。

投稿者 cazper : 02:07 | コメント (0) | トラックバック | b_entry.gif
     

2005年7月10日

panda01.gif EclipseとCVSとの格闘

[曇りのち晴れ間 午後から暑!]
うが、雨が降ると思ってたら曇りを維持。うーむ、インラインスケートしに行けば良かった…。

-------------- 以下Eclipse関連 ----------------
でも、やることはたくさんあって午前中からEclipseと格闘。最近こればっか…。

プロジェクト推進のためにEclipseでの開発を行うことになってるのだけど、ドキュメント等の共有でCVSを利用しなきゃならんのだ。しかし、CVSへの接続・共有化が中々上手く行かなかった。
ということで、午前中から格闘。V氏とメッセンジャーで対話しながらようやく接続が完了。

メモを残しておこう。
参考になるサイトは、@ITの「第3回CVSのクライアントとしてEclipseを使おう
そんでもって、ディレクトリに手動で放りこんだファイルをEclipseに認識してもらうには、「F5」ボタンを押してRefreshする。
そして、CVSに空ディレクトリはUPできないので、UPするときには何か適当なファイルを放りこんでUPする。共有化は「commit」という選択肢をクリック。
てか、日本語のマニュアル見ながら英語のソフト扱うの面倒くさ過ぎ…。

XML Beansの入門サイトはここ
----------------------------------------------

昼過ぎ位からめちゃ暑くなって来る。暑いのも寒いのも苦手…。

渋谷に出向いて、まずはビックカメラでWebカメラ(WebCam)を購入。[BWC-35H01]
バッファロー 『BWC-35H01/BK』(ブラック)情報通のアナタに最適。CMOS 35万画素WEBカメラヘ...

その後、丸井に寄ってみる。てか、行く途中で大盛堂本店が閉店してるのにビックリ!!!。Book1stが出来る前は大盛堂はしょっちゅう行ってたけどBook1stより床面積少なくて品揃えで劣ってたからなぁ。いずれは、閉店になるとは思ってたけども…。

本屋営業というのは価格で勝負できないから、立地と品揃え位しか勝負できないんだよね〜。劣勢な状況になったら、ナポレオンの各個撃破法を真似るしか無いんだろうねぇ。具体的には、売れ筋の本とか漫画とかの専門店にしてしまって、1分野での品揃えだけは他に負けないようにするしか無いんだろうなぁ〜。

その後、タワーレコード(タワレコ)に寄る。いやぁ、タワレコで何を感心するのかっていうと、2002年に上場廃止になったナカミチ(旧6813)が頑張ってるのを見れるからだ〜。
邦楽の階をふらふらしていたら、竹井詩織里さんのパネルが目に止まる。WEBで聞いてみたら、力強い声で歌ってるんだねぇ。そういや、メトロトリップも売ってたなぁ。

あわわ、アマゾンで日本企画計画学会の「ブレイクスルー思考」を注文してみた。

給与明細で「リバースドアスコープ」という商品を紹介していたな。基本的には魚眼レンズのレンズ特性を計算してレンズを設計すれば良いので善悪は抜きにしてメーカーにとってはボロイよなぁ。そういう意味では、こういう事を防ぐためにドアのスコープもCCDに変更していくのが良いんだろうなぁ。ドアホンは既にCCDだし。
RD-0009 リバースドアスコープ セキュリティアイ

夜、スターウォーズ帝国の逆襲をやってたけど、ヨーダの言葉は真なんだろうなぁ。
「やるか、やらぬかだ。」「大きさは問題ではない。」
"信じられません"というスカイウォーカーに対し「だから、失敗するのだ…」

心に染み入るヨーダの声

投稿者 cazper : 23:59 | コメント (0) | トラックバック | b_entry.gif
     

2005年2月20日

panda01.gif Google Adsense (グーグルアドセンス)広告の表示内容チェック

アフィリエイトで快進撃のGoogle Adsenseですけども。

Google Adsenseを自分のサイトに貼り付けた場合、どのような内容の広告が表示されるのかをチェックするサイトを作りました。(テスト的に作製しましたが、他サイトでも提供されているのでサービスの提供を終了致しました)

以下のサイトからご利用下さい。(私のサイトでの提供は終了させて頂きました)
http://takawo.net/adsense/

(初めて表示するサイトの場合は、広告が表示されない可能性があります。その場合は、時間を於いてから再度入力すると表示されるようになります。 ただし、場合によっては、48時間以上経たないと広告が表示されないかもしれません。)

自分のサイトだけじゃなくても、色んなサイトのURLを入力してみると、意外な広告が表示されたりして楽しむ事も出来ますよ♪

投稿者 cazper : 08:40 | コメント (0) | トラックバック | b_entry.gif
     

2005年2月 9日

panda01.gif RSS生成プログラム1本目完成

[曇]
あ、ごめんなさい。平日だけどヒッキーしてました。(←ヒッキーしてても怠けてるわけじゃないっすよ)

ということで、1日掛けて、RSSを生成するプログラムを完成させました。近々テストを重ねた上で公開します。

ただ不思議なのが、ローカルで確実に動くプログラムなのに、プロバイダーで動かすと、RSSファイルを生成するのに、動作チェック画面が表示されずエラーになっちゃう。と、日記を書いたけど、その後原因が判明しました。もう一つプログラム書いて完成ですな。

このプログラム、基礎的な部分を別々に作成しているので、プログラムの部品を交換すれば、別の目的に簡単に転用できます。 と、いうことで、この手を使って早めに展開したいところ。

そういや、サッカー勝ちましたね。日本ヽ(^o^)丿。いやぁ、危なかったよ。

いやぁ、それにしても、ライブドアの戦略的な株式買収劇はお見事としか言いようが無いね。この結果が良いか悪いかは別として、これからの日本企業も株主の利益を本気で考えていかないといけないようになっていくだろうね。

■のがした魚はでかい■
先日、日本テクシードのIPO株を買おうとして抽選落ちたわけですが…私の予想を上回り、初値は公募価格の3倍位になった模様・・・。抽選で落ちたからしょうがないけどね・・・。悲しいねぇ~。

■ダレント?の話■
そーいや、パイロットのCMとかミスドのCMに出てる相武紗季さんも、いいねぇ。

投稿者 cazper : 23:02 | コメント (0) | トラックバック | b_entry.gif
     

2005年2月 5日

panda01.gif HTML内でMathMLを表示する。

MathMLを書いていて思ったのですが、XML内でJavaScriptを動かそうとしても動作しないんです!

これじゃ、XML文章内ではGoogle Adsenseが動かないじゃないですか。広告が動かないのは大したことありませんが、MathMLで記述した文章内にJavaScriptとかのスクリプト言語が動かせないのは納得いきませんよね。

それで、ググってみてたんですが、HTML文章内にJavaScriptでMathMLを呼び出すプログラムを発見しました。

HTML文章内からJavaScriptを利用してMathML記述できるようにしているため、現状でMathMLを記述するならば非常に有用な方法だと思います。

本家のサイト - ASCIIMathML (Translating ASCII math notation to Presentation MathML)
SourceForgeの方はこっち
Mozilla組ヘルプ - 掲示板のレス
例題 - どこぞの企業サイトなのでそのうち消えるんじゃないかな。
Wiki使ったサイト - 簡単な導入法を記述してある。
記述例 - 私のサイトの一部。FireFOXかMozillaかで見てください。IEはMathPlayerをインストールしてから見てください。

投稿者 cazper : 04:57 | コメント (0) | トラックバック | b_entry.gif
     

2005年2月 2日

panda01.gif Google Adsenseの代替広告について (アフィリエイトAdchange)

アフィリエイトでGoogleのAdsense(アドセンス)を使っているサイトが色んな所で見られるようになりました。そのGoogleの広告なんですが、幾つか問題があるようです。

①JavaScriptで記述されているため、ブラウザでJavaScriptがOffにされると、表示されない。
②キーワードが合わないと、透明になったり、チャリティー広告になったりする。

そこで、ここでは以上2点を解決する方法を提供。

----------------------------------------------------------
■①に対する対処法は、

以下がgoogleのAdsenseのスクリプトの例を表示しているんだけど、
スクリプトの最後に少々付け足す。

<script type="text/javascript"><!--
google_ad_client = "pub-1865669335966283";
google_alternate_color = "FFFFFF";
google_ad_width = 160;
google_ad_height = 600;
google_ad_format = "160x600_as";
google_ad_channel ="";
google_ad_type = "text_image";
google_color_border = "FFCCCC";
google_color_bg = "FFF5F6";
google_color_link = "0000CC";
google_color_url = "008000";
google_color_text = "6F6F6F";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<noscript>
ここの部分に他で生成したアフィリエイトプログラムのリンクを貼る
</noscript>

ここでのポイントは、<noscript>タグを利用してJavascriptに対応していないブラウザでも広告が見えるようにしてしまうこと。

<noscript>タグ内に、普通にバナー広告のリンクを張っても良いけど、これじゃ面白くない??。そこで、GoogleAdsenseが表示されないときに指定する代替広告を貼った方がいいんじゃないかなぁ。これについては、次の項目を参照のこと。

----------------------------------------------------------
■②に対する対処法は
後で書きます

お勧めは、XMLの利用ですね。
----------------------------------------------------------
参考URL:
ブログ☆GoogleAdSenseでアフィリエイト
スピリッツオブゼロ - ビッダーズで代替広告
アフィリエイト研究室 - CGIで代替広告
EnglishNavi - XML利用でアマゾンによる代替広告
Hail2u.net - EnglishNavi関連
Lilbox - PHPで代替広告
シンプルな広告代替 - 性的な広告
アフィリエイト関連 - アマゾン広告のフォーマット関連
以下代替広告用テンプレート(私的)
スタイルシート③
アフィリエイト未来日記
あまなつ - 1/6ツール
Bidagaly - ビッダーズ関連
X*ole.net - Amazon関連記事

↑メモです。後で、新たなもの作る予定!
GoogleのAdsenseの代替広告って結構つくられてますね。何か新しいの作ってみようっと。

投稿者 cazper : 14:29 | コメント (1) | トラックバック | b_entry.gif
     

2005年1月29日

panda01.gif ランダムで広告を表示させる方法[PHP編]

アフィリエイト(affiliate)で広告を表示させているページが多いのだが、皆どうやって広告を貼っているのだろうか?一々、各ページに広告を貼っているのか?? それに、広告を自動的に切替えてくれるようにしたくないのかなぁ?? 面倒くさがりでリラックマな私には、各ページに広告を貼っていくと言ったチマチマした作業は無理!!!

ということで、PHPを利用して自動的に広告を切り替えるプログラムを作成してみました。以下がソースと設置方法。

■必要なファイル
ads.php - これは、PHPでできたプログラム本体です。(右クリックで保存)。圧縮ファイルになっております。解凍後のファイル名が「ads.php.txt」になっていますので、.txtをはずしてお使いください。
list.txt - 広告の画像やリンク先を記述するファイル。一例として、ファイルには私の広告リンク(A8.net)が記述されてます。(右クリックで保存)
test.html - (一例)HTMLファイル。iframeタグを利用して表示しています。バナーの大きさは、iframeタグ内のwidthとheightで指定してください。

この例における広告が切り替わる仕組みは、以下の通りです。
まず、test.htmlファイル内のiframeタグによって、ads.phpが実行されます。 その後、ads.phpがlist.txt内に記述されている広告画像とリンク先を読み込んで表示します。

切替えて表示したい広告をlist.txt内で一元管理できるので、大変便利です。

<設定法>
とりあえず、PHPが実行できるサーバ環境が必要です。
それがあるならば、上記ファイルを同一ディレクトリに入れて、test.htmlファイルを実行してください。PHPが動く環境ならばみれるはずです。IFRAMEタグに対応したブラウザも必要です。

<広告の管理>
広告の管理は、list.txtファイルの編集で行います。ここに、A8などの広告会社から指定されている、広告のHTMLタグを記入してください。

<注意>
list.txtファイルの書き方が重要です。list.txtタグにあるようにads_startタグとads_endタグで表示したい広告を囲ってください。

あと、IFRAMEタグで画像の大きさを決めてしまっているので、違う大きさの画像の広告との切り替えは出来ません。(実際にはできますが、画像がちょん切れたり、領域を大きくとらなかったりと・・・何かと融通が利かない)

<備考>
画像の自動切換えにも使えると思います。また、PHPのプログラムファイルを指定すれば、GoogleのAdsenseの代替広告として利用する事もできます。

↓の本にプログラムが収録されました。
本当に使えるPHP厳選Webアプリケーション集

<余談>
ちなみにー、PHPとJavaScriptを利用して表示する方法もあるかなぁと思ったんだけど、研究室の前に座っている「つっちー」のブラウザがデフォルトJavascriptを表示しないので、IFRAME使って表示するようにしました。

<余談2>
IFRAMEタグをサポートしていないブラウザでJavascriptが動くならば見れるようにする方法があるみたいです。
ちなみに参考サイト:http://www.shtml.jp/htaccess/ssi.htmlはこれです。
気が向いたら作ります。Javascriptを吐くプログラムをPHPで書けばいいので、5分位で記述できます。(が面倒なので、気が向いたら載せます。)

投稿者 cazper : 17:27 | コメント (13) | トラックバック | b_entry.gif
     

2005年1月28日

panda01.gif スタイルシートってバグバグじゃん

[晴れ]
ライブドア ホームページ・クリエイター6 ホ-ムペ-ジクリエイタ-6-W [ホムペジクリエイタ6W]←今非常にこれがほしい。誰か買ってちょ。(T_T)

何気にヒキー決め込む。一点集中やっとります。やれるときにやらんとね。

ええと、夜のテレビで、粉々になる風船の仕組みが話されてた。今度作ろうっと。作り方は、普通のシャボン玉溶液に砂糖を大量に入れるらしい。そうすると、シャボン玉作った後で、水分が飛んで殻が固くなるらしい。ただ、乾くまでに時間が掛かるので、静電気とかで空中に浮かせていないといけないらしい。
直ぐに乾くように細工するならば、シャボン溶液にエタノール入れて、砂糖大量にいれればいいのかな。そうすれば、エタノールの蒸発と共に水分も飛んで、直ぐに硬くなるかな。これ、シャボン溶液メーカが作ったら儲かるんじゃない?

今の時代はスタイルシートで作るのが良いのかと思ってたけど、バグ多すぎ。

今作ってるのは、左枠の幅が可変で 右枠の幅が固定した 2段組で 左の枠の中に枠幅一杯のTableがあるわけさ。IE専用ならば作れるんだけど、NN7やMozilla君で読み込むと、2段組にならないよ。ショボーン。

結局、スタイルシート使わないでTableだけで作る羽目に・・・

投稿者 cazper : 04:25 | コメント (0) | トラックバック | b_entry.gif