Pages

Monday, May 20, 2013

Python: for ループのカウンター

一般的なfor ループは以下のように記述する。
for i in items:
  print i
で、よくあるのはforループの中で今何回目の処理なのかを知りたくって、カウンターを取ってくる事。

何も考えずにするとこんな感じだろうか。
counter = 0
for i in items:
  print i
  counter +=1
  print counter
 でも、Pythonではもっとエレガントにできる。そのためにはenumerateを使う
for (counter, i) in enumerate(items):
  print i
  print counter

Sunday, May 12, 2013

Windows 8 でPythonとPostgreSQLを接続させる



インストーラーを以下のページからダウンロード
http://www.stickpeople.com/projects/python/win-psycopg/

私の環境ではWindows8の64bit版で、Pythonは2.7なので以下のファイルをダウンロードしてインストール
http://www.stickpeople.com/projects/python/win-psycopg/2.5.0/psycopg2-2.5.win-amd64-py2.7-pg9.2.4-release.exe

Tuesday, May 7, 2013

Djangoを1.5.1にアップグレードして、そして、空のプロジェクトを作成し開発サーバーを走らせたらいきなりエラーに遭遇してしまった。
結構Stackoverflowでも質問されているエラーでした。

エラーの詳細を説明すると以下のコマンドを空のプロジェクト作成後に実行。
python manage.py runserver

すると、以下のエラーが出て来ました。

Validating models...
Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x106e41210>>
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/core/management/commands/runserver.py", line 92, in inner_run
    self.validate(display_num_errors=True)
  File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 280, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Python/2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/Library/Python/2.7/site-packages/django/db/models/loading.py", line 166, in get_app_errors
    self._populate()
  File "/Library/Python/2.7/site-packages/django/db/models/loading.py", line 72, in _populate
    self.load_app(app_name, True)
  File "/Library/Python/2.7/site-packages/django/db/models/loading.py", line 96, in load_app
    models = import_module('.models', app_name)
  File "/Library/Python/2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Python/2.7/site-packages/django/contrib/auth/models.py", line 370, in <module>
    class AbstractUser(AbstractBaseUser, PermissionsMixin):
  File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 213, in __new__
    new_class.add_to_class(field.name, copy.deepcopy(field))
  File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 265, in add_to_class
    value.contribute_to_class(cls, name)
  File "/Library/Python/2.7/site-packages/django/db/models/fields/__init__.py", line 257, in contribute_to_class
    cls._meta.add_field(self)
  File "/Library/Python/2.7/site-packages/django/db/models/options.py", line 179, in add_field
    self.local_fields.insert(bisect(self.local_fields, field), field)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 56, in <lambda>
    '__lt__': [('__gt__', lambda self, other: other < self),
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 56, in <lambda>
    '__lt__': [('__gt__', lambda self, other: other < self),
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 56, in <lambda>
    '__lt__': [('__gt__', lambda self, other: other < self),
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 56, in <lambda>
    '__lt__': [('__gt__', lambda self, other: other < self),
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 56, in <lambda>
    '__lt__': [('__gt__', lambda self, other: other < self),
RuntimeError: maximum recursion depth exceeded in cmp

結局Djangoをアンインストールして、再インストールするとエラーはなくなりました(泣)
sudo pip uninstall django
sudo pip install django

StackOverflowの答えのページにも書いたのですが、 このアンインストール、再インストールそして、python manage.py runserverをエラーがでた同じターミナルで行うと、実はエラーが解消されていてもエラーが出続けますので、新しいターミナルをたちあげてpython manage.py runserverコマンドをもう一度試して見ることをおすすめします。

ちなみに、StackOverflowのページを見て気づかれたかもしれないですが、英語圏ではCodingDaddyとして活動しております。よろしくお願いします。

Monday, May 6, 2013

SEO対策(パート1)URLをサーチエンジンに登録する

検索で自分のページが引っかかるようにする第一のステップは検索エンジンに自分のURLを登録することです。
Googleはよく徘徊しているので、多分提出しなくても、検索エンジンのディレクトリに登録されているかもしれませんね。

有名所で考えるとGoogle, Yahoo, Bingといったところでしょうか。
以下のページでURLを登録することができます。

GoogleにURLを提出する

YahooにURLを提出する
一応ページは存在するのですが、結局Bingのページに連れて行かれました。w
もしや検索エンジン同じなんてないですよね?299ドル払って有料のYahooDirectoryには登録できるみたいですが…

BingにURLを提出する

さあ、この次はウェブマスターツールについて考えましょう。

Djangoを1.5にアップグレードする。

現在のDjangoの最新バージョンは1.5.x

今のローカルマシンには1.4.xが入っている。

Djangoをアップグレードするには,インストールと同じ手順で--upgradeオプションを付けるのみ。

sudo pip install Django --upgrade

以下の様な結果が出てくるはず。


Downloading/unpacking Django from https://pypi.python.org/packages/source/D/Django/Django-1.5.1.tar.gz#md5=7465f6383264ba167a9a031d6b058bff
  Downloading Django-1.5.1.tar.gz (8.0MB): 8.0MB downloaded
  Running setup.py egg_info for package Django
 
    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
Installing collected packages: Django
  Found existing installation: Django 1.4.2
    Uninstalling Django:
      Successfully uninstalled Django
  Running setup.py install for Django
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755
 
    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
    changing mode of /usr/local/bin/django-admin.py to 755
 
 
    ========
    WARNING!
    ========
 
    You have just installed Django over top of an existing
    installation, without removing it first. Because of this,
    your install may now include extraneous files from a
    previous version that have since been removed from
    Django. This is known to cause a variety of problems. You
    should manually remove the
 
    /Library/Python/2.7/site-packages/django
 
    directory and re-install Django.
 
Successfully installed Django
Cleaning up...


そして、以下のコマンドでアップグレードされたバージョンをチェックできる。
>>> import django
>>> quit()