Ftxa クラス図

目的は以下の通り。


1985 年製の RFC から FTP のモデルを抜粋

   2.3.  THE FTP MODEL

      With the above definitions in mind, the following model (shown in
      Figure 1) may be diagrammed for an FTP service.

                                            -------------
                                            |/---------\|
                                            ||   User  ||    --------
                                            ||Interface|<--->| User |
                                            |\----^----/|    --------
                  ----------                |     |     |
                  |/------\|  FTP Commands  |/----V----\|
                  ||Server|<---------------->|   User  ||
                  ||  PI  ||   FTP Replies  ||    PI   ||
                  |\--^---/|                |\----^----/|
                  |   |    |                |     |     |
      --------    |/--V---\|      Data      |/----V----\|    --------
      | File |<--->|Server|<---------------->|  User   |<--->| File |
      |System|    || DTP  ||   Connection   ||   DTP   ||    |System|
      --------    |\------/|                |\---------/|    --------
                  ----------                -------------

                  Server-FTP                   USER-FTP


それぞれの部分についてクラス化する方向でよさそう。
継承、サブクラスはあまり好きじゃないので、役割とインターフェイスを中心に考えていく。


コマンドライン入力の例とその結果

入力
(Linux bash)
ftxa --protocol=ftp --upload /path/to/file
(Windows)
ftxa /PROTOCOL ftp /UPLOAD C:\path\to\file
 ↓FTP によるアップロード処理↓
結果
(Linux 系)
/path/to/file にファイルがアップロードされる。
(Windows)
C:\path\to\file にファイルがアップロードされる。

CUI の仕様とファイルシステムのパスが違うことが分かる。
これを分解して、次のようにクラスを配置する。

class Ftxa(object):

    """プログラム上での操作インターフェイス。"""

    def __init__():
        """今のところ何もしない。"""
        pass

    def setProtocol(type):
        """使用するプロトコルを指定する。

        Keyword arguments:
            type 使用するプロトコル
                 FtxaProtocol オブジェクト、もしくは
                 FtxaProtocol オブジェクトを生成するための引数。
        """
        pass

    def setLocalFileSystem(type):
        """ローカルのファイルシステムを指定する。

        Keyword arguments:
            type 使用するプロトコル
                 FtxaFileSystem オブジェクト、もしくは
                 FtxaFileSystem オブジェクトを生成するための引数。
        """
        pass

    def setRemoteFileSystem(type):
        """リモートのファイルシステムを指定する。

        Keyword arguments:
            type 使用するプロトコル
                 FtxaFileSystem オブジェクト、もしくは
                 FtxaFileSystem オブジェクトを生成するための引数。
        """
        pass

    def setInterface(type):
        """CUI を設定する。

        Keyword arguments:
            type 使用するプロトコル
                 FtxaInterface オブジェクト、もしくは
                 FtxaInterface オブジェクトを生成するための引数。
        """
        pass


class FtxaProtocol(type):

    """プロトコルを抽象化したインターフェイス。

    FtxaFTP や FtxaWebDAV などの実装がある。
    FtxaProtocol("ftp") もしくは FtxaProtocol.factory("ftp") で生成する。
    """
    pass


時間がなくなったのでここまで。
__metaclass__ 、 __new__ のまとめが必要だな。

Python プログラムを書く前に

書くからには出来るだけちゃんとしたのを書きたいよね。
(Python の理念的にも)
というわけで書き方の作法を頭にいれておく。


みんな大好きコーディング規則
日本語 PEP - PEP 8 -- Style Guide for Python Code
インデント強制よりこっちのが特徴的な気がする docstring
日本語 PEP - PEP 257 -- Docstring Conventions
プログラマの為に assert
Python リファレンスマニュアル - 6.2 Assert 文 (assert statement)
自動ドキュメント生成 pydoc
Python ライブラリリファレンス - 5.1 pydoc -- ドキュメント生成とオンラインヘルプシステム
docstring からテストを実行する doctest
Python ライブラリリファレンス - 5.2 doctest -- 対話モードを使った使用例の内容をテストする


コメントの書き方が上達しそうな言語だよ Python


後でもうちょっとまとめる。
(追記)書いた。

続きを読む

FTP クライアントを書いてみようと思う

Python 始めたことだし、練習用に。

名前、クラス名など
FTXA - File Transfer and eXchange Agent
用途
シェルやコマンドプロンプトなど CUI 上からファイルの転送を行う
言語
Python 2.4
OS
Linux 系 (将来的な Windows への拡張も考える)
サポートするプロトコル
とりあえずは FTP 。拡張したとしても SFTP 、 WebDAV あたり。
続きを読む

変数は箱じゃない

プログラム入門書だと、『変数とは何でも入れられる箱のようなもの』的な説明がされている場合が多い。
別に間違ってはいないんだけど、何かデザイナー受けは悪い気がする。
というか実際悪かった。


ので、別視点から解説してみる。

説明範囲
変数:関数
目標
プログラムのソースを見て、実行の流れを理解できる。
必要知識
中学レベルの数学。私は半分以上忘れている。
使用言語
Javascript っぽいものを想定している。
続きを読む

さくっとつくった FCKeditor マイ設定


FCKeditor のデフォのフォントリストが貧弱だよ

追加するには一つ一つ設定していかなきゃだよ

めんどいからローカルにあるやつ全部つっこもうぜ

というわけで、FCKeditor のフォントリストに、ローカルで対応してるフォントを全て突っ込むスクリプト
参考 Kazuho@Cybozu Labs

考え方
swf オブジェクトからフォントリストを引き出せるので、それを FCKConfig.FontNames に設定してやる。
続きを読む

Python 設定

DebianPython は 2.4 。どうせなら新しいの使いたいので 2.5 をインストールする。

aptitude install python2.5
ln -s /usr/bin/python2.5 /usr/local/bin/python

/usr/bin/python を置き換えるのは怖いし、 local 以下に。


さーてやるぞという気分になったところで仕事 IN 。
FCKeditor いじります。
よくもまあここまで作るよな、これ。


追記
いじってきた。あれだ。馬鹿だなカレらは。こんなん絶対作りたくない。
でもコードが結構綺麗だったのが驚いた。
config.php がいきなり global で始まるのはどうかと思ったけど。

coLinux インストール

Linux っぽい環境で開発したい、でも Linux をメインにするのは正直辛い。
cygwin は ls が遅すぎる。*1 *2
というわけで coLinux をインストール。

coLinux 公式
参考にしたサイト

バージョンは 0.7.2 。
ダウンロードしてインストーラを起動。
コンポーネントは全て選択。
Root file system image は Gentoo Deluxe で。
→挫折。マニアックすぎた。
気持ち新たに Debian で。

*1:cd するたびに ll する癖があるんだ、私には

*2:というか cd + ll なスクリプトも多用するんだ

続きを読む