Ftxa クラス図
目的は以下の通り。
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 。
後でもうちょっとまとめる。
(追記)書いた。
変数は箱じゃない
プログラム入門書だと、『変数とは何でも入れられる箱のようなもの』的な説明がされている場合が多い。
別に間違ってはいないんだけど、何かデザイナー受けは悪い気がする。
というか実際悪かった。
ので、別視点から解説してみる。
- 説明範囲
- 変数:関数
- 目標
- プログラムのソースを見て、実行の流れを理解できる。
- 必要知識
- 中学レベルの数学。私は半分以上忘れている。
- 使用言語
- Javascript っぽいものを想定している。
さくっとつくった FCKeditor マイ設定
FCKeditor のデフォのフォントリストが貧弱だよ
↓
追加するには一つ一つ設定していかなきゃだよ
↓
めんどいからローカルにあるやつ全部つっこもうぜ
↓
というわけで、FCKeditor のフォントリストに、ローカルで対応してるフォントを全て突っ込むスクリプト。
参考 Kazuho@Cybozu Labs
- 考え方
- swf オブジェクトからフォントリストを引き出せるので、それを FCKConfig.FontNames に設定してやる。
Python 設定
Debian の Python は 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 で始まるのはどうかと思ったけど。