Programming Feed

14 July 2011

Although I posted previous entry about Python, there is a list of editors / IDEs for javascript. These editors / IDEs are mentioned in node.js thread.

Yeah I use vim, too!

Editors / IDEs

seealso

When I cleaned my inbox up today, I just remembered that I would like to wrap threads up. The threads are about an editor / IDE for Python. This list may be a little bit old though, if you are a beginner in Python world, it's useful, I think.

I found good page on stackoverflow, What IDE to use for Python?, during wrapping this list up. Also it's worth checking it out.

Yeah, I use vim, too!

メールボックスを整理していてPythonのエディタ/IDEについてまとめようと思っていたのを思い出しました。もしPython初心者なら参考になるかもしれません。

stackoverflowにもありましたのでそちらも見てみるといいかも。

そうそう、わたしはvimを使ってます。

Thanks!

Editors / IDEs

seealso

18 August 2010

ifconfig のソースコードがほしかったので このサイト を参考にソースコードをゲットしまして、以下その辺りの作業ログ。

# yumdownloader が必要ってことでまずは yum-utils をインストール。
$ sudo yum install yum-utils
# 次に対象のコマンドのRPMを探す
$ rpm -qf /sbin/ifconfig
net-tools-1.60-81.el5
# ダウンロードする。
$ yumdownloader --source net-tools-1.60-82.fc7
# 一応、RPMの中身を確認
$ rpm -qpl net-tools-1.60-82.fc7.src.rpm
# ファイルを展開する
$ rpm2cpio net-tools-1.60-82.fc7.src.rpm | cpio -id
# 肝心のファイルを展開
$ tar xvf net-tools-1.60.tar.bz2
# 移動して、
$ cd net-tools-1.60
# ここを見たかったのよ。
$ vi lib/interface.c

seealso:

25 May 2009

id:antipop さんの体系的な知識・技術を身につけるための学習法についてのエントリは面白かったですね。目次を書くという発想はなかったので今度試してみようかと思いました。 個人的には最も身に付く学習法は「講義をする」ことだと思います。プレゼンテーションやライトニングトークなどで紹介するようなスタイルではなくて、誰かに教えることを前提にした講義です。この場合、自分自身は先生の立場になります。誰かに教えるには一度自分自身で噛み砕いたあとでどのように伝えるか考える必要があります。その過程で体系的な学習が得られると思います。また生徒役のリスナーの方々からの質問もあるでしょうから、講義する範囲以上のことを理解していないとリスナーの理解度はあがりません。必然的に掘り下げて学習し、分かりやすく話さなければならないので、体系的に身に付くと思います。結果、自分自身の学習として成果が出ます。 最近はめっきりやっていないのですが、このやり方である分野について深い学習をすることができました。リスナーからの質問が分からないときなどより深く調べますから相乗効果が期待できます。鋭い突っ込みができる人がリスナーだとより効果的ですね。

10 March 2009

前回作成したモジュールは CPAN にアップロードします。今回は初めて ShipIt を使ってみたいと思います。

以下のように関連するモジュールのインストールです。cpan-upload-http は手動でインストール。

# cpan ShipIt
# cpan AppConfig::Std
# wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/cpan-upload-http-2.4.tar.gz
# tar xvfz cpan-upload-http-2.4.tar.gz
# cd cpan-upload-http-2.4
# perl Makefile.PL
# make
# make install

ShipIt するときに cpan-upload-http が利用する .pause ファイルの準備も。

# vi $HOME/.pause
# cat $HOME/.pause
user shigeta
password  YOURPASSWORD
mailto shigeta@cpan.org
# chmod 600 $HOME/.pause

ShipIt を使う場合、.shipit ファイルがプロジェクトのトップに必要なのですが、Perl モジュールのひな形を作成してくれる pmsetup は .shipit を自動的に生成してくれます。miyagawa++

ShipIt に限らずですが、以下を実施して MANIFESTファイルと MANIFEST.SKIP ファイルの中を調整するのを忘れずに。

# perl Makefile.PL
# make manifest

いきなり shipit コマンドを叩くのが怖いなと思う人は dry-run オプションを使うのが吉ですね。

# shipit --dry-run

で、アップロード内容について色々確認した結果、Ship It!

# shipit
Upload to CPAN? [Y/n] Y
cpan-upload-http: your config file /var/root/.pause is readable by others!
Upload failed.

orz

.pause は 600 とかのパーミッションにしないとダメっぽい(上の手順に chmod を追加しました。)

そのあともう一度登録しようとしましたが、すでに登録済みだからコミットしないと。。。
確かに github のほうにはタグらしいコミットがついてる。

Next/release version? 0.01
No local changes, and version on disk is already tagged.  Nothing to do.

orz

# git tag
0.01

あーすでにタグが 0.01 で打たれちゃっているからダメなんですね。よし、0.02 にします。

# shipit
Running step ShipIt::Step::FindVersion=HASH(0x18012d0)
Current version is: 0.01
Next/release version? 0.02

Edit file? [Y/n] Y
ここで ChangeLog の編集

(make dist 中につき中略)

Upload to CPAN? [Y/n] Y
#

今度はうまくいったっぽい。 PAUSEのShow my files したらアップロードされているではないか!すばらしい。簡単にコミットできた。便利ですねぇ。CPAN Author の方は ShipIt を使った方はいいですよ。

seealso:

09 March 2009

github にプロジェクトを登録したのでそのときの備忘録です。

まずは github にログインしたあと、dashboard にいきます。(http://github.com にいくんだけどね。)

と右側のペインに Your Repositories と書いてある横に Create a New Repository というリンクがあるのでクリック。

Project Name/Description/Homepage URL を入力するフォームが現れるので適宜入力。

Who has access to this repository? とありますが、ここは Anyone にしました。無料のプランでは private なプロジェクトは作成できないみたいです。ぼくは CPAN モジュールをここにおくつもりだったので、private にする意味は全くないので、Anyone です。

そして、Create Repository ボタンを押して submit します。

そうするとプロジェクトのページができます。

http://github.com/アカウント名/プロジェクト名/tree/master
例:http://github.com/comewalk/perl-xrds-simple/tree/master

そしたら親切なガイドラインが出てきましたよ。

Global setup:

  Download and install Git
  git config --global user.name "Takatsugu Shigeta"
  git config --global user.email takatsugu.shigeta@gmail.com
  Add your public key

Next steps:

  mkdir perl-xrds-simple
  cd perl-xrds-simple
  git init
  touch README
  git add README
  git commit -m 'first commit'
  git remote add origin git@github.com:comewalk/perl-xrds-simple.git
  git push origin master

Existing Git Repo?

  cd existing_git_repo
  git remote add origin git@github.com:comewalk/perl-xrds-simple.git
  git push origin master

Importing a SVN Repo?

  Click here

When you're done:

  Continue

上記に従ってローカルの設定をしました。今回は初めて github に登録するということと新規に作成するプロジェクトでしたので、Global setup と Next steps を実践しました。各 OS 毎の ssh キーの作成、登録についても github のヘルプページにありました。すばらしい。

かくして touch しただけの空っぽの README ファイルが github に登録されました。

さてこれから新しく作成したプロジェクトのファイル群を git add して、git commit して、git remote add して、git push するというわけですね。

で、今回作成したプロジェクトは perl-xrds-simple です。ご興味のある方はご覧ください。

Continue reading »
27 February 2009
10 December 2008

最初に知ったときからだいぶ時間があいてしまったのですが、やっと試す時間が作れました。今日は Google App Engine についてメモです。

インストール

Google App Engine は Python 2.5 以上が必要なのですね。Google App Engine のインストール時に Python 2.5 以上がないと警告が出ましてインストールは途中で終了します。。。

Python はこちらからダウンロードできるようです。

さて、ここからやっと Google App Engine を使う準備が整ったことになりますね。

私の環境は Mac OS X (10.4.11、つまり Tiger) を使っています。

Google App Engine は /usr/local/google_appengine/ にインストールされました。

 # find /usr/local/google_appengine/ -type f

としてみると Django が。へー。

スタートガイドでしょ。

さてインストールが完了したら早速触ってみます。まずは日本語版のスタートガイドを最初から順番においかけてみます。こういうときは写経です。

    * 概要
    * 開発環境
    * Hello, World!
    * webapp フレームワークの使用
    * ユーザー サービスの使用
    * webapp を使ったフォームの操作
    * データストアの使用
    * テンプレートの使用
    * 静的ファイルの使用
    * アプリケーションのアップロード

このスタートガイドでは最初は文字列 helloworld だけを表示するアプリをゲストブックアプリに成長させていくストーリーになっています。早速、「webapp フレームワークの使用」から「コンテンツを次のように置き換えます。」とどんどん上書きしていく形をとっています。(もし自分の心が写経モードだったときには章単位で新しいファイルを用意して、コピペではなくてちゃんとタイプしていくというのがいいですね。今回私はそのやり方にしました。)

感想

とても簡単にアプリの開発ができる感じですね。Rails や Catalyst のように開発用のミニサーバで小さく作っていくスタイルはモチベーションが高まっていきますね。

Google App Engine はなかなか良さげです。早速自作アプリを作成しようと今コードを書いています。まだ Python をはじめて間もない、というか Google App Engine に触れるまでは Python のコードを書いたことがなかったので、これから一般的に使われるモジュールなどを知りたいな。おそらく Google App Engine で使えるモジュールと使えないモジュールがあると想像しているので、その辺りの違いなんかもこれから勉強したいです。

Python も結構面白いよ。

おまけ

最後にいくつか特記しておきます。

データストアの使用
ここで以下のエラーで詰まりました。

Traceback (most recent call last):
  File "/usr/local/google_appengine/google/appengine/ext/webapp/__init__.py", line 484, in __call__
    handler.get(*groups)
  File "/Users/takatsugu/GAE/helloworld/helloworld5.py", line 17, in get
    greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10")
  File "/usr/local/google_appengine/google/appengine/ext/db/__init__.py", line 1496, in __init__
    from google.appengine.ext import gql
SystemError: Parent module 'google.appengine.ext.db' not loaded

よく調べてみると、/usr/local/google_appengine/demos/guestbook にこの章と似たようなサンプルがありました。コードを見比べても特に大きな違いは見られなかったので、試しにその demos/guestbook を起動しましたら、期待された動作が出来ました。「やっぱり何か違うのかなー」と思って、dev_appserver.py helloworld/ としたら、今度は上記のエラーを出力せずに起動しました。もしかして  db,Model はサーバ起動時に生成されるのかな?これまで、 Hello, World!、 webapp フレームワークの使用、 ユーザー サービスの使用、 webapp を使ったフォームの操作、とずっと dev_appserver.py を Ctrl + C で終了させずにきたのでした。。。

とりあえずこのエラーが出たときには dev_appserver.py が起動していたら Ctrl + C で一旦停止した後、再び dev_appserver.py 起動するというのが対処法っぽいですね。(将来的にはgoogle_appengine か dev_appserver.py などのフレームワーク関係のコードを見てみてることにします。とりあえずは「開発用 Web サーバ」の章が参考になります。)

テンプレートの使用
ここでは以下のようなエラーが出ました。

Traceback (most recent call last):
  File "/usr/local/google_appengine/google/appengine/ext/webapp/__init__.py", line 484, in __call__
    handler.get(*groups)
  File "/Users/takatsugu/GAE/helloworld/helloworld6.py", line 34, in get
    self.response.out.write(template.render(path, template_values))
  File "/usr/local/google_appengine/google/appengine/ext/webapp/template.py", line 80, in render
    t = load(template_path, debug)
  File "/usr/local/google_appengine/google/appengine/ext/webapp/template.py", line 125, in load
    template = django.template.loader.get_template(file_name)
  File "/usr/local/google_appengine/lib/django/django/template/loader.py", line 79, in get_template
    source, origin = find_template_source(template_name)
  File "/usr/local/google_appengine/lib/django/django/template/loader.py", line 54, in find_template_source
    mod = __import__(module, globals(), locals(), [attr])
SystemError: Parent module 'django.template' not loaded

ここでもデータストアの使用のときと同様に dev_appserver.pl を再起動したところエラーが解消されました。テンプレートエンジンには Django テンプレート エンジン を使っているんですねぇ。本家サイトでは記法が詳しく書かれています。

19 November 2008

oEmbed

oEmbed is a format for allowing an embedded representation of a URL on third party sites

oEmbed はサードパーティで URL の埋め込み表現を許可するためのフォーマットです。

という直訳になりますが、Pownce で使われるケースが oEmbed のサイトに載っていたので、その使われ方がなんとなく理解できましたので、僕なりの使われ方をご紹介したいと思います。

Twitter などに代表されるマイクロブログなどでは URL だけがポンと投稿されることが多いと思います。oEmbed のサイトの例で言うと、

http://www.flickr.com/photos/bees/2341623661/

という文字列の URL が投稿されることになります。

Twitter はその投稿された内容を parse することはないので、そのまま文字列が読者にも見えるわけですが、これを parse するようなサービスを展開しようとしたときには、

  1. URL を fetch して、URL の先のコンテンツの種別をとってくる
  2. コンテンツの種別に応じて、幅や高さなどの属性を調べる
  3. URL と属性を利用して HTML タグを作成する
  4. 自分のサービス内にその HTML を埋め込む

みたいなことをするのだと思います。で、oEmbed を利用したとしても確かに同様な手順が必要なのですが、2 の自分で調べるという手間が省けます。画像の場合、ImageMagick などを利用して属性を取得するなど自分のサーバ内での処理が増えるので、若干しんどい面があります。Mashuper たちは特に面倒でしょう。

そこで oEmbed です。oEmbed はエンドポイントに URL を渡すと必要そうな属性が返却されるという API です。oEmbed のサイトの例で言うと、

http://www.flickr.com/services/oembed/?url=http%3A//www.flickr.com/photos/bees/2341623661/

こんな感じでリクエストを送ります。するとレスポンスとして、JSON ならば、

{
"version": "1.0",
"type": "photo",
"width": 240,
"height": 160,
"title": "ZB8T0193",
"url": "http://farm4.static.flickr.com/3123/2341623661_7c99f48bbf_m.jpg",
"author_name": "Bees",
"author_url": "http://www.flickr.com/photos/bees/",
"provider_name": "Flickr",
"provider_url": "http://www.flickr.com/"
}

という感じで返ってきます。Format としては JSON か XML で返却する感じみたいです。返却されるパラメータの内容も定義されていますが、これについては oEmbed のサイトを参考にするとよいでしょう。上記の例は Flickr ということもあり、Type が photo になっていますが、その他に video、link、rich もあります。photo は画像、video は動画、link は URL、rich は xhtml となるようです。

oEmbed のサイトの「7 章 implements」 に現在 oEmbed が実装済のサービスが記載されています。YouTube など動画サイトやPicasa など写真共有サイトが積極的に対応するようになると、他のサービスを利用する側もちょっと楽ができていいのになあ。

Discovery を埋めてくれていると助かりますね。

<link rel="alternate" type="application/json+oembed"
href="http://flickr.com/services/oembed?url=http%3A//flickr.com/photos/bees/2362225867/&format=json"
title="Bacon Lollys oEmbed Profile" />

まとめ

TypePad のようなブログサービスでも、例えばコメント欄に oEmbed をサポートするサービスの URL が貼り付けられた場合、Anchor タグを生成するのではなくて、画像も表示してあげるようにするとかやるとうれしい人もいるかもしれませんね。(スパムだったりすると気に入らない画像が列挙されて嫌な思いをするケースもあるかもしれませんが。。。)

ちょうど microformats の上級版で、API の簡易版という印象があるので、結構手軽に活用できるのではないかと思いました。せっかくだから画像なんかはオプションで選択すると Exif 情報も含めて送ってくれるなんかだとうれしいかもな。

seealso:

04 November 2008