« 2005年09月 | メイン | 2005年11月 »

2005年10月 アーカイブ

2005年10月10日

MarkdownをHTMLに変換するエディタ

Ruby/TKの練習。

Markdownで記述したテキストをHTMLに変換するエディタ。

#!/usr/bin/env ruby
$KCODE = 'SJIS'
require 'tk'
require 'bluecloth'

class MarkdownEditor
  TITLE = 'Markdown Editor'

  def initialize

    Tk.root.title(TITLE)
    f = TkFrame.new.pack(:fill => :x)
    @button = TkButton.new(f, 
      'text'=>'Change Mode',
      'command' => proc{swich_mode()}
    ).pack('side' => 'left')
    @label = TkLabel.new(f).pack(:side => :left)

    scr_x = TkScrollbar.new.pack(:fill=>:x, :side=>:bottom)
    scr_y = TkScrollbar.new.pack(:fill=>:y, :side=>:right)
    @editor = TkText.new {
      xscrollbar(scr_x)
      yscrollbar(scr_y)
    }.pack(:fill => :both, :expand => true)

    to_text()
    Tk.mainloop
  end

  def to_html
    return if @state == :html
    begin
      Tk.root.cursor "watch"
      Tk.root.update
      @state = :html
      @label.text('HTML Mode')
      @source = @editor.value
      @editor.value = BlueCloth::new(@source).to_html
    ensure
      Tk.root.cursor ""
      Tk.root.update
    end
  end

  def to_text
    return if @state == :text
    @state = :text
    @label.text('Text Mode')
    @editor.value = @source
  end

  # モードを切り替える
  def swich_mode
    case @state
    when :text
      to_html()
    when :html
      to_text()
    end
  end
end

if __FILE__ == $0
  MarkdownEditor.new
end

追記
コメントで教えていただいた箇所を修正しました。

続く

セクシープロジェクトで差をつけろ!

ホワイトカラーの仕事は、90%以上が業務管理ソフトに取って代わる。ホワイトカラー労働者が生き残るには、すごいプロジェクトで差をつけろ!

本書は、つまらない仕事をすごいプロジェクトに変える50の方法を紹介する。

やる気を引き出すだけの本ではない。

本書が扱うのは夢物語ではなく、現実のプロジェクトと、それを企画・遂行する過程で直面する現実の問題である。

本書では、プロジェクトを「創造」「売り込み」「実行」「退場」の4つの段階に分けている。それぞれの段階ですごいプロジェクトにする50の方法を紹介する。50の方法には、数個の行動を提案している(『やってみよう』)。

組織にせよ、個人にせよ、人生とはプロジェクトであり、充実した人生を送るには、すごいプロジェクトをやるしかない。

仕事に情熱がもてるようになる一冊です。

2005年10月12日

Rubyist Magazine 0010 号

Rubyist Magazine 0010 号 が公開されました。

個人的に良かったのが、「あなたの Ruby コードを添削します」。

知らない便利なメソッドがたくさんありました。

このように、標準のメソッドをとことん使いたおしていけばコードを圧倒的に簡潔にできるのです。 String・Regexp・Array・Hash・Enumerable あたりだけで十分ですから、リファレンスマニュアルは熟読しておきましょう。

熟読します。

解説 Ruby Refactoring Browser - Emacs でリファクタリング は、噂に聞いていたRuby 用のリファクタリングブラウザ、「Ruby Refactoring Browser」の Emacs での使いかたについて解説記事です。これを読みながら試してみます。XYZZYでも使いたいな。

プログラマーのための YAML 入門 (中級編) は、YAMLの貴重な情報源です。YAMLを使うときにもう一度読みます。

シリーズ パッケージマネジメント 【第 2 回】 RubyGems (2) は、標準になりそうな勢いのRubyGemsの使い方の記事。使い方が一通りわかります。

とりあえず、ここまで読みました。

blanco Framework

blanco Framework。便利かも。

気になるプログラム達。

  • blancoDb

    Excelブックに書かれたSQL文と DBメタ情報をもとに、Java/JDBC用 R/Oマッピング・ソースコードを自動生成。

  • blancoResourceBundle

    Excel様式からプロパティファイルを自動生成。あわせてリソースバンドルアクセサJavaソースコードも自動生成。

  • blancoStruts

    Jakarta Struts用ソースコード(FormとAction)を Excel様式から自動生成。

  • BlancoSqlEditorPlugin

    SQLを整形する Eclipseプラグイン。

pdf-writer

pdf-writer は、PDFを作成するpure rubyなライブラリ。

[ruby-list:39016] ja font patch for pdf-writer-TP20030916 には、日本語を出力できるようにするパッチがある。最新版でも使えるかは未確認。

Creating Printable Documents with Ruby では、pdf-writer を使ってPDFを作成するチュートリアル。

2005年10月14日

MarkdownをHTMLに変換するエディタ(2)

前回 で作成したプログラムに、ポップアップメニューから「コピー」「切り取り」「貼り付け」の機能を追加する。

ポップアップメニューの作成は、「逆引き Ruby/Tk」の「ポップアップメニューを作る」で実装方法を発見した。

「コピー」「切り取り」「貼り付け」の実装方法がわからず、ソースコードを見ることに。

tk/text.rbを見ると、「text_cut」「text_copy」「text_paste」という、まさにそのままのメソッドを発見して、無事に完成。

ちなみに環境は、Windows + [One-Click Installer 1.8.2-15][4]

#!/usr/bin/env ruby
$KCODE = 'SJIS'
require 'tk'
require 'bluecloth'

class MarkdownEditor
  TITLE = 'Markdown Editor'

  def initialize
    Tk.root.title(TITLE)
    f = TkFrame.new.pack(:fill => :x)
    @button = TkButton.new(f, 
      'text'=>'Change Mode',
      'command' => proc{swich_mode()}
    ).pack('side' => 'left')
    @label = TkLabel.new(f).pack(:side => :left)

    scr_x = TkScrollbar.new.pack(:fill=>:x, :side=>:bottom)
    scr_y = TkScrollbar.new.pack(:fill=>:y, :side=>:right)
    @editor = TkText.new {
      xscrollbar(scr_x)
      yscrollbar(scr_y)
    }.pack(:fill => :both, :expand => true)

    menu = TkMenu.new { tearoff 'off' }
    menu.add('command', :label => 'Cut', :command => proc{ @editor.text_cut })
    menu.add('command', :label => 'Copy', :command => proc{ @editor.text_copy })
    menu.add('command', :label => 'Paste', :command => proc{ @editor.text_paste })
    @editor.bind('ButtonPress-3', proc { |x, y| menu.popup(x, y) }, "%X %Y")

    to_text()
    Tk.mainloop
  end

  def to_html
    return if @state == :html
    begin
      Tk.root.cursor "watch"
      Tk.root.update
      @state = :html
      @label.text('HTML Mode')
      @source = @editor.value
      @editor.value = BlueCloth::new(@source).to_html
    ensure
      Tk.root.cursor ""
      Tk.root.update
    end
  end

  def to_text
    return if @state == :text
    @state = :text
    @label.text('Text Mode')
    @editor.value = @source
  end

  # モードを切り替える
  def swich_mode
    case @state
    when :text
      to_html()
    when :html
      to_text()
    end
  end
end

if __FILE__ == $0
  MarkdownEditor.new
end

[4]; http://rubyforge.org/frs/?groupid=167&releaseid=2049

2005年10月15日

WebUnit

WebUnit がRuby1.8に対応していることに気がつきました。

ここのページも更新しなきゃ。

2005年10月17日

ガズーバ!―奈落と絶頂のシリコンバレー創業記

本書は、シリコンバレーでの起業の奮闘記だ。読み物としてもおもしろいし、シリコンバレーで起業するための情報源としても有用だろう。

起業を考えている人やベンチャー企業への就職を考えている人は、この本からたくさんの情報とエネルギーをもらえると思います。

シリコンバレーを知りたい人にも参考になると思います。

以下、個人的なメモ。

  • プロトタイプ

    二か月ですごいインパクトのプロトタイプを作ります!

セクシープロジェクトで差をつけろ!』でも、すばやく試作品を作ることを薦めている(「試作に狂え」)。
まず作ってみること、やってみること、それが重要だと思う。

  • インキュベーター

インキュベーターとは、「スタートアップが資金面からなかなか手に入れられない優秀なオフィスマネージャ、データベース管理者、システム管理者などを四~五社でシェアさせようという仕組み」らしい。
単に安い家賃で部屋を貸し出すことじゃないんですね。

  • シリコンバレーの文化

    「タームシートを受け取ったので、弁護士が必要ですがお金がありません。」
    「お客様、ご心配なさらないでください。そんなのは出世払いでけっこうです。」

シリコンバレーは、単にベンチャー企業が集まっているだけではない。
関連するビジネスもまた、ベンチャービジネスを理解しているようだ。

* シリコンバレーのスピード

シリコンバレーにおける会社の成長段階は、相場的には、

  1. 六~八か月ぐらいで十人ぐらいの体制で商品が実用できであることを証明する。
  2. つぎの六か月ぐらいでビジネスが大きくなることを証明する。
  3. つぎの八か月ぐらいで百人規模の会社にする。

わずか二年で十人規模の会社が百人規模の会社に成長する。

  • プロパテンション指数

    PI = A × N
    A: メッセージを受け取った人が興奮して友人にすすめる割合
    N: 興奮した人がすすめる友人の数
    PI指数を一以上にできるかが成功の分かれ目なのだ。

成功するために必要な条件として、

  1. ユーザが熱狂するような商品、サービスを提供すること
  2. 友人にすすめやすいこと

最初の項目は当然のことだが、2番目の「友人にすすめやすいこと」も検討する必要がある。商品のホームページのURLがメールで送れないサイト(フレームを使っていたり、JavaScript等でページ遷移を管理しているサイト)がダメなのは言うまでもない。できれば、友人にすすめやすい仕掛けを用意したい。

  • 「This is it!(これだ!)」と思わせる会社

一流のプロに対して、「そんな物は捨てて、僕らの会社に入ってくれ!」といって「イエス」と言わせる会社にならなければならない。会社にビジネスモデルやポテンシャルだけでなく、カルチャーやにおいも重要だ。

カルチャー作りの予算はVC(ベンチャーキャピタル)も大いに使うことをすすめている。オフィスの中がおもしろい雰囲気でないと彼らは逆に心配するのだ。

それぐらいカルチャーが重要視されているのだ。

2005年10月20日

xyzzy用 javascript-mode

xyzzy用 javascript-modeを発見。

xyzzy用 javascript-mode

xyzzy用 javascript-modeを発見。

2005年10月22日

Javaで帳票出力

Javaで帳票出力するには、iReportJasperReports を使うのが簡単そうだ。

簡単なメモ。

iReport

  • 概要
    iReportは帳票のデザインテンプレートを作成するソフト。
    作成したデザインテンプレートはJasperReportsで帳票に変換する。

  • チュートリアル

  • 注意点

    • フォントの設定
      日本語を使う場合、間違ったフォントを選択すると日本語が表示されない
    • ゴシック体
    • PDF font name = HeiseiKakuGo-W5
    • PDF Encoding = UniJIS-UCS2-H
    • 明朝体
    • PDF font name = HeiseiMin-W3
    • PDF Encoding = UniJIS-UCS2-HW-H

JasperReports

2005年10月23日

rake(Ruby版のmake)[

rake(Ruby版のmake) について調べてみる。

ビルド言語 では、Martin Fowler 氏がrakeの魅力について語っている。

活動日誌(2005-02-14) は、Rakefile Format を翻訳した記事だ。
Rakefileのフォーマットを日本語で読むことができる。

インストールは RubyGems を使って、簡単にできる。次のコマンドを入力するだけだ。

gem install rake

ちなみに、RubyGems については Rubyist Magazine の次の記事が詳しい。

rake に挑戦

About "Rake Tutorial"Introducing Rake を試してみる。

環境は、Windows2000、One-Click Installer 1.8.2-15Borland C++ Compiler 5.5

Borland C++ Compilerを使うのは初めてなので、まず、Borland C++ Compiler 5.5 の動作確認から。

hello.cpp を作成。

/* hello.cpp */
#include <iostream.h>
main()
{
  cout << "Hello, World!" << endl;
  return 0;
}

コンパイルして、

> bcc32 hello.cpp

実行する。

> hello.exe
Hello, World!

OK。

チュートリアル にしたがって、main.c、greet.h、greet.c、build.bat(チュートリアルではbuild.sh)を作成する。

main.c

#include "greet.h"
int main() {
  greet ("World");
  return 0;
}

greet.h

extern void greet(const char * who);

greet.c

#include <stdio.h>
void greet (const char * who) {
  printf ("Hello, %s\n", who);
}

build.bat

bcc32 -c -o main.obj main.c
bcc32 -c -o greet.obj greet.c
bcc32 -ehello main.obj greet.obj

build.batを実行する。

> build.bat
> hello.exe
Hello, World

コンパイルに成功して、hello.exeが作られる。
hello.exeを実行すると、Hello, World の文字が表示される。

main.c から main.obj が、greet.c から greet.obj が作られて、main.obj と greet.obj から hello.exe が作られる。

greet.c を変更したら greet.obj を更新しないと、hello.exe には、greet.c の変更は反映されないよ。 つまり、ファイル間に依存関係があるということ。

Rakefile では、依存関係は次のように記述する

file "main.obj" => ["main.c", "greet.h"]

Rakefileを作る。

Rakefile

file 'main.obj' => ["main.c", "greet.h"] do
  sh "bcc32 -c -o main.obj main.c"
end

file 'greet.obj' => ['greet.c'] do
  sh "bcc32 -c -o greet.obj greet.c"
end

file "hello" => ["main.obj", "greet.obj"] do
  sh "bcc32 -ehello main.obj greet.obj"
end

rake hello を実行する。

> rake hello
bcc32 -ehello main.obj greet.obj
> hello.exe
Hello, World

成功だ。

greet.c の Hello を Hi に変更する。

#include <stdio.h>
void greet (const char * who) {
  printf ("Hi, %s\n", who);
}

もう一度、rake hello。

> rake hello
bcc32 -c -o greet.obj greet.c
bcc32 -ehello main.obj greet.obj
> hello.exe
Hi, World

変更された greet.c はコンパイルした。
変更されていない main.c はコンパイルしない。

次回に続く。(たぶん)

2005年10月25日

JUnitで DataSource を使う

JavaでJUnitを使って、DataSourceを使用するクラスをテストしたい。

どうやら、JUnit JNDI DataSource helper package を使えば、DataSourceが使えるらしい。

  1. JUnit JNDI DataSource helper package をダウンロードし、展開する。
  2. jrunittesthelper.jar を WEB-INF/lib にコピーする。
  3. jndiunittest_helper.properties を適当なフォルダ(ここでは WEB-INF)にコピーする
  4. jndiunittest_helper.properties を編集する。

こんな感じで使える。

public static void main(String[] args) throws NamingException, IOException, SQLException {
    JNDIUnitTestHelper.init("WEB-INF/jndi_unit_test_helper.properties");
    InitialContext ctx = new InitialContext();
    DataSource ds = (DataSource)ctx.lookup(JNDIUnitTestHelper.getJndiName());
    Connection conn = ds.getConnection();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select DEPTNO, DNAME from DEPT");
    while (rs.next()) {
        System.out.println(rs.getInt("DEPTNO"));
        System.out.println(rs.getString("DNAME"));
    }
    rs.close();
    stmt.close();
}

参考

2005年10月27日

iReportとJasperReportsを使い、画像をJavaプログラム側で差し替える

画像データをInputStreamで受け渡すことによって、Javaプログラム側で画像を指定できる

iReportで、画像のプロパティを設定する

  • Image Expression => $P{imgsrc}
  • Image Expression Class => java.io.InputStream

パラメータの設定をする

  • Parameter name => imgsrc
  • Parameter class type => java.io.InputStream

Javaプログラムでは、パラメータとして imgsrc に 画像のInputStreamを指定する

String imgPath = "images/xx.gif"; //画像ファイルの場所を指定
InputStream imgsrc = new FileInputStream(imgPath);
Map paramMap = new HashMap();
paramMap.put("imgsrc", imgsrc);

//テンプレートXMLのコンパイル
JasperReport jasperReport = JasperCompileManager.compileReport(templatePath);

//データの動的バインド
JasperPrint print = JasperFillManager.fillReport(jasperReport, paramMap, new JREmptyDataSource());

//PDFへ出力
JasperExportManager.exportReportToPdfFile(print, destPath);

2005年10月31日

PyInstaller: Python のスクリプトを Windows 用の実行ファイル (exe形式) に変換する

いやな日記 を参考に py2exe を使ってみると、hello.py を exe にしただけで distディレクトリのサイズは 2.04MB になった。 いやな日記 では 1.2MB と書かれている。なんでだろ?

Python スクリプトを Windows 用の実行ファイルに変換するソフトには py2exe の他に PyInstaller というのがあるらしい。 早速試してみた。

PyInstaller のページから PyInstaller 1.0 をダウンロードしてを展開する。

cd pyinstaller_1.0
python Configure.py

hello.py を作成する

print "hello, world"

実行ファイルを作成する

python Makespec.py hello.py
python Build.py ./hello/hello.spec

disthelloディレクトリのサイズは 1.41MB。

About 2005年10月

2005年10月にブログ「山本隆の開発日誌」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2005年09月です。

次のアーカイブは2005年11月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35