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

2005年08月 アーカイブ

2005年08月01日

Movable Type3.17でHTMLAreaを使う(3)

Movable Type3.17でHTMLAreaを使う(2) のコメントで、IE6.0で相変わらずレイアウトが崩れるという報告をいただきました。

実は、私自身使っていないんです。(゜;)\(--;)

Markdownの方が便利で…。

それはさておき、修正が難しくなければ今週末を目標に対応しようと思います。

※サーバーが故障したため、コメントは失われてしまいました。

2005年08月03日

CODE COMPLETE 第2版(上)

CODE COMPLETE 第2版(上)を読了しました。

一言で言うと、本書はプログラミングの総合ガイドです。
章の終わりにはたくさんの参考資料が紹介されているので、より知識を深めたいときには役に立ちそうです。

第1部「基礎を固める」は、ソフトウェアコンストラクションの概念から上流工程までを解説します。
気になった箇所では、

言語の「中で」プログラミングしているプログラマは、自分の考えを、言語が直接サポートしている構造だけに限定してしまう。 したがって、使用している言語ツールが初歩的なものであれば、プログラムの考えも初歩的なものになる。

とありました。文化の違う複数の言語を習得するのも、表現力に幅ができて良いと思います。

第2部「高品質なコードの作成」は興味深く読みました。後述します。

第3部「変数」、第4部「ステートメント」はコーディングのテクニックを解説します。
経験の浅いプログラマには大変参考になると思います。
また、経験豊富なプログラマにとっても、経験則で知っていることを理論的に理解することは、後輩に教えるときなどに役立つでしょう。

さて、第2部「高品質なコードの作成」です。

複雑さへの対処は、ソフトウェア開発における技術面での最も重要なテーマである。

そして、

すべてのソフトウェア設計手法の目標は、複雑な問題を単純な問題に分割することである。

と言い切ります。

オブジェクト指向プログラミングは、複雑さに対処するためのさまざまなテクニックを提供する。

オブジェクト指向プログラミングを「複雑さへの対処」という視点から見ると理解しやすいかもしれません。
複雑な問題を分割し単純な問題にしたのが「クラス」。クラスは一つのことに集中できるようにします。
「カプセル化」はクラス内の複雑さを隠蔽します。
「抽象化」は、サブクラスの詳細を無視することによって、複雑なものを単純に見せます。
「デザインパターン」も複雑な設計をパターン化することにより、複雑さを緩和します。
ちなみにRubyではデザインパターンをモジュールで提供しています。たとえばSingletonパターンでは

class SomeSingletonClass include Singleton end

SingletonモジュールをincludeするだけでSingletonパターンを実現しています。
複雑な実装はモジュール内に隠蔽されています。

逆に、複雑さを増大させる使い方はオブジェクト指向プログラミングの誤用です。
典型的な例が、深すぎる継承階層です。

「複雑さへの対処」という視点からオブジェクト指向プログラミングを見ると、理解しやすいと思いました。

あと、おもしろかったのは、

  • ドキュメントだけではクラスの使い方がわからない場合、ソースコードを見て実装を調べないこと。作者に質問すること。
  • 作者は質問に答えないこと。ドキュメントを更新し、新しいドキュメントを見てもらうこと。

というところ。個人同士のやりとりは、他人のコードの助けにならない、ということ。

2005年08月06日

Movable Type3.17でHTMLAreaを使う(4)

Movable Type3.17用HTMLAreaを変更しました。

IE6.0でレイアウトが崩れるという問題に対処したつもりです。

さて、どうでしょうか。

2005年08月11日

ActiveRecord

インストールしなくても(インストールする権限が無くても)、ActiveRecordActiveSupportのファイルをコピーすればActiveRecordが使えるみたい。

2005年08月12日

CGIKitでTODOリストを作成する。(3)

前回の続き

Ruby on Rails のTODOリストプログラムを参考にして、TODOリストプログラムを作成します。

項目の表示 2

ActiveRecordを使用して、データベースのtodoテーブルのデータを取得します。

lib/todo.rbファイルを作成します。

require 'active_record'

ActiveRecord::Base.establish_connection(
  :adapter => 'mysql',
  :host => 'localhost',
  :username => 'root',
  :password => '',
  :database => 'todo'
)

class Todo < ActiveRecord::Base
end

MainPage.rbを編集します。

require 'lib/todo'
module TodoList
  class MainPage < CGIKit::Component
    def items
      Todo.find_all
    end
  end
end

MainPage.ckdを編集します。

{
  :items => {
    :element => Repetition,
    :list => :items,
    :item => :item
  },
  :item => {
    :element => String,
    :value => :"item.description",
  }
}

:item の :value を :todo から :"todo.description" に変更します。

WEBRickサーバを再起動し、ブラウザをリロードします。
todoテーブルには、まだデータがないので、何も表示されません。

データベースにデータを登録します。

INSERT INTO `todos` (description) VALUES ('Do my bed');

ブラウザをリロードすると、「Do my bed」が表示されます。

2005年08月16日

REXMLでノードの階層構造を出力する

REXMLでノードの階層構造を出力する

出力例

html[xmlns="http://www.w3.org/1999/xhtml"]
 head[]
  meta[content="text/html; charset=UTF-8",http-equiv="Content-Type"]
  title[]
 body[]
  h1[]
  h2[]
  div[]
   form[name="form1",id="form1"]
    p[]
     br[]
     input[name="textfield",type="text"]

ソースコード。

require 'rexml/document'

# 要素を階層表示する
# element 要素
# level 階層レベル
def show_element(element, level)
  # 空白
  sp = ' ' * level
  # 属性
  attr = []
  element.attributes.each do |name, value|
    attr << "#{name}=\"#{value}\""
  end
  # 出力
  puts "#{sp}#{element.name}[#{attr.join(',')}]"

  # 子要素
  element.each_element do |e|
    show_element(e, level + 1)
  end
end

if $0 == __FILE__
  if ARGV.size < 1
    puts "USAGE: ruby #{__FILE__} xmlfilepath"
    exit
  end
  doc = REXML::Document.new(File.new(ARGV[0]))
  show_element(doc.root, 0)
end

2005年08月17日

ckgeneratecode

一通り動作するようになりましたのでckgeneratecodeを公開します。

ckgeneratecodeは、CGIKit 2.x用テンプレートからバインディングファイルとコードを生成するプログラムです。

私のように、先にデザイナーさんからHTMLファイルをもらい、それを元にプログラムを作っていくスタイルだと、このようなスクリプトがあると楽になると思います。

2005年08月18日

goodic

goodicをRubyで作ってみました。ほとんど同じなのですが…。

Windowsで作ったので、入出力はShift_JISを前提にしました。

ruby goodic.rb ej python

py・thon

━━ n. 【動】ニシキヘビ; 大蛇.

ruby goodic.rb je 公園

こうえん 公園

a (public) park; 《小規模で四角形》a square.
国立[国定]公園 a national [quasi-national] park.
日比谷公園 Hibiya Park.

ruby goodic.rb jn おもむろに

おもむろに 0 【▽徐に】

(副)
落ち着いて、ゆっくりと事を始めるさま。ゆったりしたさま。
「―口を開く」

2005年08月19日

CGIKit2用日付選択コンポーネント

CGIKit2のサブコンポーネントの練習もかねて、日付選択コンポーネントを作成しました。

「日付」「日時」「時分」を選択する3種類を作成しました。

CGIKit2になって、簡単に作れるようになりましたね。

2005年08月20日

ckgeneratecode

ckgeneratecodeをPopupとBrowserの項目を配列で持つように変更しました。

CGIKit2のバインディングファイルは、解析はeval()でおこなっているので、Rubyの文法に従っていれば良いようです。 って、よく見たら書いてあった

書式はRubyスクリプトですが、ファイルをeval(load)した結果は Hashでなければなりません。

2005年08月22日

CGIKit2のコンポーネントとエレメント

CGIKit2のコンポーネントはHTMLに表示するためのもので、エレメントは値の表示と同期を行います。

だから、値の同期が必要ならサブコンポーネントを作るのではなくて、エレメントを作らないといけないことに気がつきました。

サブコンポーネントについてはTutorial5.5Tutorial6に詳しい解説がありますが、エレメントの作り方のドキュメントはないようです。ソースコードを探索しましょうか。

あと、CGIKitメーリングリスト - 760 で報告されている問題にはまってしまいました。

2.0.0-preview-1が公開されてから、たくさんの変更が行われているようですので、preview-2 を公開が待ち遠しいです。

2005年08月23日

Apacheをサービスから削除する方法

Windows 2000にインストールしたApache1.3をアンインストールしたら、サービスにApacheが残ったままになりました。

検索してみると同じ現象の人を発見。

解決方法を残しておきます。

  1. もう一度、Apache1.3をインストールします。

  2. コマンドプロンプトで、Apacheをインストールしたフォルダに移動します。

    cd C:\Program Files\Apache Group\Apache

  3. サービスを停止します。

    Apache.exe -k stop -n Apache

    The Apache service is stopping.
    The Apache service has stopped.

  4. サービスを削除します。

    Apache.exe -k uninstall -n Apache

    Removing the Apache service
    The Apache service has been removed successfully.

    これで、Apacheがサービスから削除されました。

  5. アプリケーションの追加と削除からApacheを削除します。

About 2005年08月

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

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

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

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

Powered by
Movable Type 3.35