I ♥ WordPress

[Python勉強日記:003] Pythonにおける数値の扱い
2007/11/03 02:15 posted by kunkichi

昨日は朝から体調が悪く、仕事から帰るなりそのまま布団に直行、というわけで、「毎日やります!」というのも、三日でいきなり挫折していますが(爆)

いや、しんどいながらも通勤時間は読み進めていたのですよ。ただねー、しんどいときってほんと頭に全然入んない(爆)

ということで今日は昨日読んだ4章を再度読み直しました。ここからしばらくはPythonのビルトインオブジェクトに関する章が続くみたい。ビルトインオブジェクトというとわかりにくい印象なんだけど、なんてことはない、数値とか文字列とか配列とかの扱いのお話です。今日は『数値』。

(more…)

[Python勉強日記:002] いよいよPythonを起動してみる
2007/10/31 22:59 posted by kunkichi

前回の続き。『初めてのPython 第2版』の3章と4章の半分ぐらいを読みました。いよいよ実際に動かしてみます。まずは3章。(※目次はここ

(more…)

[Python勉強日記:001] まずはPythonを知る
2007/10/31 01:15 posted by kunkichi

前回から始まった勉強日記ですが、早速『初めてのPython 第2版』を読み進めています。2章まで読み終わりました。(※目次はここ

とりあえずここまでのまとめ。

  1. オブジェクト指向言語である。
  2. インタープリタ方式のスクリプト言語である。
  3. ソースコードはバイトコードにコンパイルされ、そのバイトコードがインタープリタで実行される。

仕事では PHP とか Perl を使ってたので、比較的インタープリタ系な言語がどういうものかっていうイメージは持ってるつもり。だから Python も大きく変わることはないかなということで、同じようなところは省略。で微妙に違ってるところだけあげると 3. のところ。

python.jpg

Python のスクリプトは、拡張子.pyが一般的なようなのだけど、これを実行すると拡張子.pycの中間コードが生成されれて、インタプリタの一部であるPython仮想マシンがそれを読み込んで実行するらしい。で次回以降の実行の際はこの中間コードを読み込むだけなので処理が高速化される。

Perl や PHP も基本的にはバイトコードにコンパイルしてると思うのだけど、たぶんそれはメモリ上で行われていて、こういった中間ファイルを作成することはないんだよね。PHPの場合なんかはこれを実現する為にアクセラレータがあるくらいだし。この辺は Java に近いのかも、というかJava知らないし嫌いだけど(爆)。

で、こういう仕組みなので極端な話、.py がなくても .pyc があればプログラムは動作すると。これはちょっと今までとは大きく違うところなので新鮮でした。また、これは標準のCPythonの実装の場合で他にもいろいろな実装があるらしく、より高速な実装もあるということなので、大規模での運用にも耐えれるというのはあながち大げさな表現でもないのかなと。なかなか興味深いところでした。

さて、次回はいよいよ実際にプログラムを実行していきます。

[Python勉強日記:000] Python ことはじめ
2007/10/30 23:23 posted by kunkichi

最近は、

とかみたいに、プログラミングを学ぶ過程をブログで公開してるのをちらちらと見かけるのにインスパイアされて、こちらも勉強日記を始めてみようかと思います。

で選んだのが Python

理由はLightweight Language AHP一番向いていると言われたから(笑)。

というのは冗談として(いや、実は↑にかなり影響されてその気になってる、爆)、

まじめな理由としては、個人的に翻訳とかしている cobbler が Python で書かれていて、もちょっと内部処理を読めるようになりたいなと。結構いろいろいじったりしてバグとかおかしな挙動を見つけては ML で報告とかしてるんだけどね、やっぱりパッチとか投げれるようになりたい、ちょっとかっこいいし(笑)。まあ、少しぐらいはオープンソースコミュニティに貢献していきたいということです。

とりあえず、IDEA*IDEAをパクっ(ry、以下のポリシーで進めます。

  • オライリーの『初めてのPython 第2版』に沿って進めます。
  • 少しだけでも毎日読みたいと思います。読んだページの履歴や内容についてはブログで報告します。
  • コードはもちろん公開します。
  • 最終的にはなんかアプリ作ります。アプリの仕様はまた別途考えます。
  • アプリが完成したらPython本家に$50寄付します。(寄付のデフォルトが$50だから)

では早速勉強開始〜。この本、700ページ(!)近くあるんだけど、がんばって進めていきたいと思います。


僕に一番向いてるプログラミング言語
2007/10/18 00:17 posted by kunkichi

Lightweight Language AHP

今更Pyth(ry

いや、ほんとまじめに勉強しようと思っています。

タダだ!急げ!
2007/10/09 15:45 posted by kunkichi

とりあえず急げ!(笑)

Ruby on Rails本が今だけ無料らしいので | Weboo! Returns.

Ruby on Railsの本が60日間だけ無料らしいので、とりあえずダウンロードしました。でも、447ページもあるのでまだ読んでません。11月いっぱいまでだそう。

ちなみにamazonでも売ってました。


今のところ、RoRというかRuby自体にあまり興味はなく、むしろ Python に惹かれつつあるのだけど、タダならもらっておこうという、爆

これ職場向けに翻訳のニーズありそうだなぁ。でもページ数大杉&僕が興味なしなので、多分無理。

さくらで CakePHP
2007/09/17 03:21 posted by kunkichi

ちょっと作りたいアプリケーションを思いついたので、最近流行の CakePHP をさくらインターネットで使ってみようと。その時のメモ。

ちなみにうちのディレクトリ構成はこんな感じ。+/home/example ・・・ ホームディレクトリ
  |
  +cake ・・・ cake ディレクトリ
  |
  +apps ・・・ CakePHPで作成するアプリケーション用ディレクトリ
  | |
  | +app1 ・・・ CakePHPで作成するアプリ1のappディレクトリ
  | | |
  | | +config, docs, libs, scriptsディレクトリとファイル
  | |
  | +app2 ・・・ CakePHPで作成するアプリ2のappディレクトリ
  |   |
  |   +config, docs, libs, scriptsディレクトリとファイル
  |
  +www ・・・ ウェブで公開されるディレクトリ(DocumentRoot)
    |
    +app1 ・・・  CakePHPで作成するアプリ1 の webroot
    |
    +app2 ・・・  CakePHPで作成するアプリ2 の webroot
    |
    +other ・・・  CakePHP以外のアプリを使う場合のディレクトリ
ちなみに以下のサイトを参考にさせてもらいました。

ディレクトリ構成的には、

  • 複数のアプリを同じcakeライブラリで使い回せるよう、cakeディレクトリを/home/UserName 配下に置く。

辺りのところは、I Love PHP さんとこで紹介されているのと同じポリシーなんだけど、

  • セキュリティ的な観点から、appディレクトリはDocumentRoot(さくらの標準では、/home/UserName/www)からは見えないところに置く。DocumentRootに配置するのは、webrootディレクトリのみ。
  • CakePHPで複数のアプリを作成するので、appディレクトリはアプリごとにコピーして配置。
  • 同様に、webrootディレクトリもアプリごとにコピーして配置。各アプリへのアクセスは、http://www.○○○.com/app1/ みたいな感じでアクセス。
    CakePHP以外のアプリをインストールする場合も同様のポリシー。

というところを追加してみました。

最近はホスティングもドメインも安くなってきたけど、それでもやっぱり余計な出費は抑えたい、一つの契約でいろいろやりたい、というお金がない人向けの設定(笑)。でも結構ニーズあるかと。

手順は以下。

ソースのダウンロードと展開
# cd ~/tmp
# wget http://cakeforge.org/frs/download.php/502/cake_1.1.17.5612.tar.gz
# tar zxvf cake_1.1.17.5612.tar.gz
# cd cake_1.1.17.5612

CakePHPライブラリの配置
# cp -r cake /home/example/.

アプリ用ディレクトリにappディレクトリを配置
# mkdir /home/example/apps
# cp -r app /home/example/apps/app1

公開ディレクトリにwebrootディレクトリを配置
# mv /home/example/apps/blog/webroot /home/example/www/app1

設定ファイルの編集
# vi /home/example/www/app1/index.php変更箇所は以下。CakePHPのマニュアルによると、ディレクトリのパスは’/abc/def’と指定するより、DS.’abc’.DS.’def’が推奨と書いてあるので、それに併せてます。
・・・
define('ROOT', DS.'home'.DS.'UserName'.DS.'apps');
・・・
define('APP_DIR', 'app1');
・・・
define('CAKE_CORE_INCLUDE_PATH', DS.'home'.DS.'UserName');
・・・

mod_rewriteの設定
# vi /home/example/app1/.htaccess
    RewriteBase   /app1

データベースの設定
# cd /home/example/apps/app1/config
# cp -pi database.php.default database.php
# vi database.php
変更箇所は以下。
・・・
class DATABASE_CONFIG
{
    var $default = array( 'driver'   => 'mysql',
                          'connect'  => 'mysql_connect',
                          'host'     => 'mysqlXX.db.sakura.ne.jp',
                          'login'    => 'UserName',
                          'password' => 'password',
                          'database' => 'UserName',
                          'prefix'   => 'app1_');
 
    var $test = array('driver' => 'mysql',
・・・
}

prefixをつけているのは、複数のアプリを作る場合にややこしくなりそうなので。

あ、そうそう、うちではビルドしたphp5で確認してます。さくら標準のphp4でも同様に動くかどうかは不明。

ではぼちぼち作っていきます。

CentOS5 で Subversion+Trac
2007/08/27 21:24 posted by kunkichi

またもや前回のエントリから時間が経ってしまったのだけど、いろいろ検証しているうちにキックスタート設定ファイルやら構築手順やらのファイル管理が必要な気がしてきた。

のちのちはアプリ開発環境も構築していきたいということもあって、ちょっと脱線して、前からやってみたかった Subversion+Trac を CentOS5 に導入してみました。

ちなみに、前提条件はこんな感じ。

  • Subversion のレポジトリは /home/develop/svn 配下にプロジェクト毎にディレクトリを分けて作成。

    例)
        /home/develop/svn/project1
        /home/develop/svn/project2
        /home/develop/svn/project3

  • Trac のプロジェクト用ディレクトリは /home/develop/trac 配下にプロジェクト毎にディレクトリを分けて作成。

    例)
        /home/develop/trac/project1
        /home/develop/trac/project2
        /home/develop/trac/project3

  • Subversion へのアクセスは HTTP経由のみ。svn はセキュリティ的にありえないし、svn+ssh は複数で使う場合にパーミッションの問題が面倒な気がしたので。HTTP なら apache ユーザの権限つけとけば済むのでシンプル。
  • Subversion へのアクセス制限はBASIC認証。またコミット時はこれがコミットしたユーザとして登録される。HTTPS はある程度環境ができてから。
  • Trac へのアクセス制限は Subversion のアクセス制限設定と同じファイルを使う。
  • OS は CentOS5 を最小構成で入れた状態。
  • 【追記】2007/9/7:SELinuxとFirewallはOFF。

では手順。

・Subversion のインストール

CentOS5 では subversion を HTTP 経由 で使うのに必要なパッケージが全部揃っているので、yumで subversion、httpd、mod_dav_svn をインストールすればオーケー。コマンド的には↓で全部必要なものが入ります。
# yum install mod_dav_svn
subversion のレポジトリを作成。プロジェクト名は”test”とします。
# mkdir -p /home/develop/svn
# svnadmin create /home/develop/svn/test

トランク、タグ、ブランチ用のディレクトリを作成。
# svn mkdir file:///home/develop/svn/test/trunk file:///home/develop/svn/test/tags file:///home/develop/svn/test/branches -m "init repository layout (trunk,tags,branches)"
apacheからファイルの読み書きが出来るようにパーミッションを変更。
# chown -R apache.apache /home/develop/svn/test
BASIC認証の設定。
# htpasswd -c /home/develop/.htpasswd kunkichi
apache の設定変更。/etc/httpd/conf.d 以下に subversion.conf が出来ているのだけど、全てコメントアウトされているので、必要な箇所のコメントアウトを外して、リポジトリ、BASIC認証用パスワードファイルのパスを変更。
# vi /etc/httpd/conf.d/subversion.conf
最終的にはこんな感じ。
<Location /svn>
   DAV svn
   SVNParentPath /home/develop/svn
 
   # Limit write permission to list of valid users.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL
 
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /home/develop/.htpasswd
      Require valid-user
   </LimitExcept>
</Location>

最後にapacheを再起動+自動起動設定。
# service httpd start
# chkconfig httpd on

ブラウザで確認。トランク、タグ、ブランチ用のディレクトリを作成した時にリビジョンが上がっているので”Revision 1: /”と表示されればOK。

・Tracのインストール

続いて Trac のインストール。

こちらも yum でササッと行きたいところだけど、CentOS5 の標準リポジトリに Trac は含まれていない。あとTrac が依存しているライブラリも同様。でもサードパーティーのレポジトリである DAGレポジトリ(rpmforge) でちゃんとパッケージ化されているのでこれを使えばオーケー!

、、、なんだけど、DAG の Trac パッケージは日本語化がされていない。個人的には英語でもなんら困らないし、むしろサーバのパッケージ管理を考えるとこっちの方がベターなんだけど、初のTrac ということもあるので、今回は依存ライブラリを DAG から、Trac 本体はインタアクト株式会社のウェブサイトで提供されている日本語化されているものを使う。

DAGレポジトリの追加。
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

DAGレポジトリは標準でOFF。必要なときのみONとする。DAGレポジトリの設定ファイルを開いて
# vi /etc/yum.repos.d/rpmforge.repo
・・・
enabled = 1
・・・
これを
・・・
enabled = 0
・・・

に変更。

Tracが依存しているライブラリをDAGからインストール
# yum --enablerepo=rpmforge install -y python-clearsilver
ついでにmod_pythonもインストールしておく。こっちは標準レポジトリから。
# yum install -y mod_python

日本語化Tracのインストール
# wget http://www.i-act.co.jp/project/products/downloads/trac-0.10.4-ja-1.zip
# unzip trac-0.10.4-ja-1.zip
# cd trac-0.10.4-ja-1
# python setup.py install

Tracプロジェクト用ディレクトリの作成
# mkdir /home/develop/trac
Tracプロジェクトの作成。こちらも subversion のプロジェクト名と同じように”test”とします。
# trac-admin /home/develop/trac/test initenv
trac-admin 〜 initenv するといろいろ聞かれるので以下のように回答していきます。

まずプロジェクト名。”test”と入力。
Project Name [My Project]> test
Tracのデータベース接続詞を設定。今回はお手軽に デフォルトのsqlite を使うのでそのままENTER。
Database connection string [sqlite:db/trac.db]>
レポジトリのタイプを指定。subversion がデフォルトなのでそのままENTER。
Repository type [svn]>
subversionのレポジトリパスを指定します。
Path to repository [/path/to/repos]> /home/develop/svn/test
Tracのテンプレートパスを指定。とりあえずデフォルトで。そのままENTER。
Templates directory [/usr/share/trac/templates]>

完了したら動作確認。Trac付属の簡易HTTPサーバを起動。
# tracd --port 8000 /home/develop/trac/test
ブラウザで http://サーバのIP:8000/プロジェクト名 にアクセスして画面が表示されればとりあえずOK。

Tracd で動作確認が出来たら Ctrl+C で止めて今度はapacheで動作するように設定。まずパーミッションを変更。
# chown -R apache:apache /home/develop/trac/test
次にtrac用のapache設定ファイルを作成。
# vi /etc/httpd/conf.d/trac.conf
内容はこんな感じ。
<Location /trac>
   SetHandler mod_python
   PythonDebug On
   PythonHandler trac.web.modpython_frontend
   PythonOption TracEnvParentDir /home/develop/trac
   PythonOption TracUriRoot /trac
</Location>
 
<LocationMatch "/trac/.*/login">
   AuthType Basic
   AuthName "trac"
   AuthUserFile "/home/develop/.htpasswd"
   Require valid-user
</LocationMatch>

設定が終わったらapacheを再起動して設定を反映。
# service httpd restart
ブラウザで http://サーバのIPアドレス/trac/test にアクセスして確認してみます。
Trac
こんな画面が表示されたらこれで一応完了です。

あと、やりたいこととして

  • HTTPSでのアクセス。
  • Subversion のコミットとTracのチケットの連携。
  • Subversion でコミットが行われたり、Trac でチケットが登録された時にメールで通知。

とかあるんだけどこれは後々。

【追記:2007/9/8】

このエントリを参照していただいたサイトで以下のエントリがありました。

■[CentOS]CentOS5でsubversionを入れる時に詰まったことのメモ

  CentOS5 で Subversion+Trac | cafe chantant blog

VMware Serverを導入したので、CentOS5を入れていろいろと試そうということで上記のページを参考にSubversionのインストールしました。

インストールを終えてブラウザから動作の確認をしたのですが、「Could not open the requested SVN filesystem」と表示され、うまくいっていませんでした。(public static void main

テスト環境だったのでSELinuxとかFirewallはOFFにしてたのですが記述してなかったので追記しました。

学ぶべき10の現代実用プログラミング言語
2007/07/24 19:05 posted by kunkichi

CodeZine にこんな記事が載ってました。

あなたが学ぶべき10の現代実用プログラミング言語

本稿では、アプリケーション開発の現場で実用されているプログラミング言語をピックアップし、それらの言語の特徴や、テキストを表示するまでの簡単なサンプルをご紹介します。これからプログラミング言語を勉強しようと考えている学生や新人開発者の方はもちろんですが、すでにプログラミング言語をいくつか覚え、新しい別の言語を学習しようと考えている方にも参考にしていただけると思います。(CodeZine

以前紹介した『終わってるITスキルトップ10』というエントリとはちょうど逆の内容、ということで載ってたのは以下の10個。

  • C
  • C++
  • Java
  • C#
  • Visual Basic
  • JavaScript
  • Perl
  • Ruby
  • PHP
  • Python

特徴なりサンプルなりはあっちを見てもらうとして、サーバ運用SEとして必要そうなもの・必要だったもの・できればよかったなというものを個人的に上からピックアップしてみる。

(more…)

printf/sprintf で 2進数で出力する
2007/07/24 11:33 posted by kunkichi

メモ。printf/sprintf の 型指定で b を使うと 2進数 で出力できる。Perl 5.6以降っぽい。
$ perl -e 'printf("%3d:%08b\n",$_,$_)for(0..255)'
  0:00000000
  1:00000001
・・・
254:11111110
255:11111111

Solaris8 標準の Perl は 5.003だから自分で書かないと無理かな。

参考:
↓まるまる載ってた。
2進10進数変換

このページの先頭へ