2011/10/25

とっとり花回廊と大山トムソーヤ牧場に行ってきました。



2011/10/16にとっとり花回廊と大山トムソーヤ牧場に行ってきました。

とっとり花回廊
http://www.tottorihanakairou.or.jp/


10:00に、とっとり花回廊に着きました。天気もとてもよく、どの花もとてもきれいでした。


11:00から、10万株のサルビアの丘で、「バードフライトショー」をやっていました。これを目当てに行った訳ではないのですが、とても楽しいショーでした。


鷹や、ふくろうが、木の上まで飛んだり、サルビアの絨毯の上をぎりぎりに飛行したりするショーでした。スタッフによる鳥の生態の説明も交えてくれるので、鳥のことも良く分かったようで、子どもたちも真剣に見入っていました。


鷹が飛ぶ様子の動画です。


とっとり花回廊から30分ほど走ったところに、大山トムソーヤ牧場がありました。そんなに大きな施設ではありませんが、沢山の動物と触れ合うことが出来て、子どもたちは、大変楽しんでいました。

大山トムソーヤ牧場
http://www.sanin.com/daisen/tom/



2011/10/23

Djangoの画像管理プラグインアプリdjango-photologueを試してみました。



django-photologueは、画像管理に必要な機能が、おおよそ用意されているプラグインです。Djangoなので、この画像管理の機能を自分のアプリ用にカスタマイズして利用することも可能です。

django-photologue
A customizable plug-in photo management application for the Django web framework.
http://code.google.com/p/django-photologue/


上記のサイトよりソースをダウンロードしてインストールします。さくらのVPSサーバにインストールします。インストール方法は、READMEに従いました。ソースフォルダの中で、以下のコマンドでインストールします。
$ python setup.py install
インストールを確認します。
$ python
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import photologue
>>> photologue.VERSION
(2, 2)
setting.pyに設定を追加していきます。
INSTALLED_APPS に photologue を追加します。
    INSTALLED_APPS = (
         # ...other installed applications,
         'photologue',
    )
django-photologue は、PIL(Python Imaging Library)を利用するので、インストールします。PIL(Python Imaging Library)のインストールの前に、libjpeg-develをインストールしておきます。
$ sudo yum install libjpeg-devel
PIL(Python Imaging Library)の1.1.7をソースからインストールします。
$ wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
$ cd Imaging-1.1.7
$ python setup.py build
$ sudo python setup.py install
PIL(Python Imaging Library)インストールを確認します。
$ python selftest.py
--------------------------------------------------------------------
PIL 1.1.7 TEST SUMMARY
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from /usr/lib64/python2.4/site-packages/PIL
--------------------------------------------------------------------
*** PIL CORE support not installed
*** TKINTER support not installed
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
*** FREETYPE2 support not installed
*** LITTLECMS support not installed
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.
syncdbを行います。
$ python manage.py syncdb
/usr/lib/python2.4/site-packages/django/db/__init__.py:60: DeprecationWarning: Short names for ENGINE in database configurations are deprecated. Prepend default.ENGINE with 'django.db.backends.'
  DeprecationWarning
Creating tables ...
Creating table photologue_gallery_photos
Creating table photologue_gallery
Creating table photologue_galleryupload
Creating table photologue_photo
Creating table photologue_photoeffect
Creating table photologue_watermark
Creating table photologue_photosize
Installing custom SQL ...
Installing indexes ...
No fixtures found.
Photologueを初期化します。サムネール画像等のサイズ指定、エフェクトの初期指定を行います。ここで行った設定は、後でも変更可能です。

This command initiates the Photologue initialization routine and prompts you to create a number of default photo sizes and effects. This command takes no arguments.
$ python manage.py plinit
urls.pyにphotologueを追加します。
    # urls.py:
    urlpatterns += patterns('',
        (r'^admin/(.*)', admin.site.root),
        (r'^photologue/', include('photologue.urls')),
    )
ソースに含まれているphotologue用のtemplatesを配置します。
    myproject/
        myapp/
            ...
        templates/
            photologue/
                ...
Djangoを起動して、管理画面にアクセスします。

管理画面に「photologue」の項目が追加されています。


Gallery uploadsを使うと、サーバにアップしたい複数の画像を一度にアップできます。アップしたい複数の画像をフォルダにまとめて、zipに圧縮します。そのzipをアップすることで、画像ギャラリーが自動で作成されます。


画像ギャラリーが作成されました。


Photoには、それぞれの画像がサムネール付きで登録されています。


管理画面でプレビューを確認できます。


メインに表示される画像サイズ、サムネールの画像のサイズ、管理画面に表示するサムネール画像のサイズは、変更可能です。これ以外の画像サイズの設定項目を作ることも可能です。



画像にエフェクトを掛けることも、管理画面からの操作で可能です。メインの画像に「Display Reflection」のエフェクトを掛けた様子です。


エフェクトは、photo effectの画面で追加、変更、削除が可能です。


上記の画像には、ウォーターマークを設定しています。ウォーターマーク用のpngを用意して、Watermarksにアップすることによって、ウォーターマークの管理、運用が可能です。

2011/10/15

Amazon Web Service(AWS)には、1年間、無料で使用できる範囲があるので、その範囲内の使用を試してみました。



Amazon Web Service(AWS)には、1年間、無料で使用できる範囲があるので、その範囲内の使用を試してみました。

AWS 無料使用範囲
http://aws.amazon.com/jp/free/


上記のページで、次のように説明されています。
AWS の新規お客様のクラウド使用開始のお役に立てるよう、AWS は無料使用範囲を提供しています。AWS の新規のお客様は、Amazon EC2 マイクロインスタンスを1年間無料でご利用いただけると共に、Amazon S3、Amazon Elastic Block Store、Amazon Elastic Load Balancing、および AWS データ転送の無料使用範囲もご活用いただけます。AWS 無料使用範囲は、新しいアプリケーションの起動、既存アプリケーションのクラウドでのテスト、または単なる AWS 実地経験など、クラウドで実行するどのようなものにもご利用いただけます。
Amazon EC2であれば、Linux マイクロインスタンス使用(613 MB メモリと、32ビットと 64ビットプラットフォームサポート)750時間 毎月継続的に実行するのに十分な時間が無料で使用できます。

まず最初に、AWSのサインアップをします。クレジットカードが必要です。本人確認のため、電話も掛かってきます。

登録が完了すると、自動返信メール「Welcome to Amazon Web Services」が届きます。その後「AWS Unified Registration Sign-Up Confirmation」が届くと、AWS Management Consoleへのアクセスが可能になります。

Amazon EC2の無料範囲の使用をしてみます。

設定の仕方については、下記のページを参照して進めました。

Get Started with EC2
http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/

Amazon EC2の画面にて、まずインスタンスを作成します。
「Launch Instance」のボタンをクリック


どのOSをインストールするかを選びます。お勧めの星のついている「Basic 64-bit Amazon Linux」にしてみます。


インストールのタイプは、無料使用範囲の「Micro」を選びます。


その他のインスタンスのオプションはデフォルトのままにしました。


暗号キーを作成して、ダウンロードしておきます。


セキュリティもデフォルトのままで設定しました。デフォルトでは、SSHのみ設定されています。

インスタンスが作成されました。


次に作成したインスタンスに接続します。

PeTTYgenを起動して、先ほどダウンロードしたキーを読み込みます。「鍵のパスフレーズ」を設定した後、「秘密鍵の保存」をします。


次にPuTTYを起動して、ホスト名(またはIPアドレス)にAmazon EC2のインスタンスページに表示されている「Public DNS」の内容を設定します。


「接続」---「SSH」---「認証」の「認証のためのプライベートキーファイル」に先ほど用意した「秘密鍵」を指定します。


接続します。ユーザー名は「ec2-user」でログインします。「鍵のパスフレーズ」を尋ねられますので、先ほど設定した「鍵のパスフレーズ」を入れます。ログインできました。pythonのバージョンを確認しました。

2011/10/09

さくらVPSにMongoDBとPyMongoインストールして、動作を確認しました。



PyCon JP 2011の開催報告のUstreamで、「PythonとMongoDBでWEB開発 / Web」を拝見しました。MongoDBが面白そうなので、MongoDBのPythonのドライバ、PyMongoを一緒にインストールして、動作を確認してみました。

PythonとMongoDBでWEB開発 / Web
http://www.ustream.tv/recorded/16898050


これも、さくらVPSで試しています。
スキーマレスのデータベース「MongoDB」って面白そうです。

MongoDBのインストール
$ sudo vi /etc/yum.repos.d/10gen.repo 

[10gen]

name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0

$ sudo yum install mongo-10gen* --enablerepo=10gen
Installed:
  mongo-10gen.x86_64 0:2.0.0-mongodb_1
  mongo-10gen-server.x86_64 0:2.0.0-mongodb_1
関連するファイル、ディレクトリは下記のように設定されます。
設定ファイル:/etc/mongod.conf
ログファイル:/var/log/mongo/mongod.log
データディレクトリ:/var/lib/mongo/
起動は起動スクリプトでOK
$ sudo /etc/init.d/mongod start
Starting mongod: all output going to: /var/log/mongo/mongod.log
forked process: 31800
           [  OK  ]
PyMongoのインストール

pipを使ってインストールします。pip自体が入っていないので、pipをまずインストールします。その後、pipでPyMongoをインストールします。
$ sudo easy_install pip
$ sudo pip install pymongo
PyMongoを使って、MongoDBを操作してみます
$ python
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymongo

コネクションを作成して
>>>con = Connection('localhost', 27017)

コネクションからvivoデータベースを取得
>>>db = con.vivo

vivoデータベースからbarコレクションを取得
>>>col = db.bar
事前に、データベースのスキーマ作ることも、データベースを作成することもなしに、データベースに接続出来ました。

辞書を渡してやることで、データの登録が出来ます。
>>>col.insert({'ariki' : 2011})
ObjectId('4e91a2648eacfc7c8c000001')
>>> col.insert({'fujii' : 2010,'suwa' : 2009})
ObjectId('4e91a2d98eacfc7c8c000002')
>>> print col.find_one()
{u'_id': ObjectId('4e91a2648eacfc7c8c000001'), u'ariki': 2011}
>>> for data in col.find():
...     print data
...
{u'_id': ObjectId('4e91a2648eacfc7c8c000001'), u'ariki': 2011}
{u'fujii': 2010, u'_id': ObjectId('4e91a2d98eacfc7c8c000002'), u'suwa': 2009}
>>>
データの更新をします。
>>>data = col.find_one({'ariki' : 2011})
>>>data['ariki'] = 2008
>>>col.save(data)
>>>for data in col.find():
...     print data
...     
{u'_id': ObjectId('4e91a2648eacfc7c8c000001'), u'ariki': 2008}
{u'fujii': 2010, u'_id': ObjectId('4e91a2d98eacfc7c8c000002'), u'suwa': 2009}
>>>
データを削除します。
>>>col.remove({'ariki' : 2008})
>>> for data in col.find():
...     print data
...
{u'fujii': 2010, u'_id': ObjectId('4e91a2d98eacfc7c8c000002'), u'suwa': 2009}
>>>
データディレクトリの /var/lib/mongo/ に、下記のファイルが出来ていることを確認しました。
vivo.ns
vivo.0
vivo.1

Django Google Maps API v3 and Static Maps API helper appのサンプルを試してみました。



さくらVPSのDjango1.3にdjango-gmapi(Django Google Maps API v3 and Static Maps API helper app)のインストールをして、サンプルアプリの動作を確認しました。


Django Google Maps API v3 and Static Maps API helper app
http://django-gmapi.googlecode.com/

django-gmapi-1.0.1 のダウンロードとインストール。
sample_project のダウンロードとDjangoのプロジェクトフォルダへの設置をします。

サンプルプロジェクトの「gmapitest」でdjangoを起動します。
下記のエラーが表示されます。
SyntaxError at /

invalid syntax (maps.py, line 129)

Request Method:  GET
Request URL:  http://hogehost:8000/
Django Version:  1.3
Exception Type:  SyntaxError
Exception Value:  

invalid syntax (maps.py, line 129)

Exception Location:  /path/to/django/gmapitest/myapp/views.py in ?, line 3
調べてみると、現在のPython 2.4.3では動かないようです。
Python 2.6.7を別にインストールします。

別にインストールをしたPython 2.6.7で再度djangoをインストールします。
インストールの確認をします。
$ python2.6.7
Python 2.6.7 (r267:88850, Oct  8 2011, 17:43:16)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 3, 0, 'final', 0)
django-gmapi-1.0.1 をPython 2.6.7でインストールした後
再度、サンプルプロジェクトの「gmapitest」で、Python 2.6.7を使ってdjangoを起動します。
Google mapの表示を確認できました。


地図表示のポイントとなるのは、/path/to/django/gmapitest/myapp/views.py になります。この中のindexの内容を基に修正、機能を作っていけばよさそうです。
# -*- coding: utf-8 -*-
from django import forms
from django.shortcuts import render_to_response
from gmapi import maps
from gmapi.forms.widgets import GoogleMap


class MapForm(forms.Form):
    map = forms.Field(widget=GoogleMap(attrs={'width':900, 'height':600}))


def index(request):
    gmap = maps.Map(opts = {
        'center': maps.LatLng(34.687428,133.916473),
        'mapTypeId': maps.MapTypeId.ROADMAP,
        'zoom': 13,
        'mapTypeControlOptions': {
             'style': maps.MapTypeControlStyle.DROPDOWN_MENU
        },
    })
    marker = maps.Marker(opts = {
        'map': gmap,
        'position': maps.LatLng(34.687428,133.916473),
    })
    maps.event.addListener(marker, 'mouseover', 'myobj.markerOver')
    maps.event.addListener(marker, 'mouseout', 'myobj.markerOut')
    info = maps.InfoWindow({
        'content': 'Hello! 岡山の地図',
        'disableAutoPan': True
    })
    info.open(gmap, marker)
    context = {'form': MapForm(initial={'map': gmap})}
    return render_to_response('index.html', context)

2011/10/06

さくらVPSにDjango1.3(PostgerSQL使用)をインストールしました。開発用のサーバでCSSが有効になるまでの手順の続きです。



前回の続きです。DjangoアプリPollのチュートリアルの内容で、開発用サーバでCSSが有効になる方法のまとめです。


はじめての Django アプリ作成、その 3
http://djangoproject.jp/doc/ja/1.0/intro/tutorial03.html

公開用のインタフェース、ビュー(view) の作成をする際、サンプルのままだと、CSSの効いていない画面しか表示されません。


CSSの効いた画面を表示したいと思った時、どうすればよいか分かりませんでした。実際に公開する際は、静的なファイルはApacheで提供するようになりますが、開発用のサーバで、CSSを有効にするには、どうすればいいのでしょうか。

Googleで色々と調べて、下記の設定で、開発用サーバでCSSが有効になることが分かりました。


/path/to/django/mysite/setting.py の該当部分
MEDIA_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'media')
MEDIA_URL = '/m/'
/path/to/django/mysite/urls.py
from django.conf.urls.defaults import *
from mysite import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',

    (r'^polls/$', 'mysite.polls.views.index'),
    (r'^polls/(?P\d+)/$', 'mysite.polls.views.detail'),
    (r'^polls/(?P\d+)/results/$', 'mysite.polls.views.results'),
    (r'^polls/(?P\d+)/vote/$', 'mysite.polls.views.vote'),

    url(r'^admin/', include(admin.site.urls)),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^m/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )
/path/to/django/mysite/templates/polls/index.html


2011/10/04

さくらVPSにDjango1.3(PostgerSQL使用)をインストールしました。開発用のサーバでCSSが有効になるまでの手順をまとめておきます。



さくらVPSにて、Django1.3で開発サーバを起動し、アプリを作成する際、テンプレートからCSSが参照できませんでした。しばらく調べて解決したので、備忘録として記録しておきます。


さくらのVPSに入っているPythonは、2.4.3です。
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Django1.3をインストールします。
$ wget http://www.djangoproject.com/download/1.3/tarball/
$ tar vxzf Django-1.3.tgz
$ cd Django-1.3
$ sudo python setup.py install
Django1.3がインストールされたことを確認します。
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VIRSION
(1, 3, 0, 'final', 0)
PostGreSQLをインストールします。
# yum install postgresql-server postgresql postgresql-libs postgresql-devel
postgresql8.1.23-1がインストールされました。 PostgreSQL関係の操作をpostgresユーザで行います。
{user} su -
{root} su - postgres
{postgres}
データベースを初期化します。
{postgres}$ initdb --encoding=UTF8 --no-locale
・・・
Success. You can now start the database server using:
    postmaster -D /var/lib/pgsql/data
or
    pg_ctl -D /var/lib/pgsql/data -l logfile start
サーバプロセスの起動と停止のコマンドです。
{postgres}$ pg_ctl -w start  // 起動処理終了後プロンプトに戻る
{postgres}$ pg_ctl stop    // サーバプロセスの停止
ユーザーを作成します。
{postgres}$ createuser hoge
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
psqlでデータベースに接続します。
$ psql postgres hoge
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
postgres=>
$ psql template1 hoge
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
template1=>
終了するには、\qコマンドを実行します。
PostGreSQLに用意されているテンプレート用のデータベース「template1」を使います。

パスワードを設定します。
$ psql
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
postgres=# alter user hoge password '**********';
ALTER ROLE
postgres=# \q
PostgerSQLとPythonの接続をします。
psycopg2のインストール
$ wget http://initd.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.2.tar.gz
$ tar vxzf psycopg2-2.4.2.tar.gz
$ cd psycopg2-2.4.2
# python setup.py build
# python setup.py install
はじめての Django アプリ作成の内容を元にアプリを作成していきます。

はじめての Django アプリ作成
http://djangoproject.jp/doc/ja/1.0/intro/tutorial01.html#intro-tutorial01

Djangoのプロジェクトを作成します。
/path/to/django/にて
$ django-admin.py startproject mysite
Djangoアプリケーションを作成します。
/path/to/django/mysite/にて
$ python manage.py startapp polls
重要な設定箇所だけを記載します。
/path/to/django/mysite/settings.pyを編集
DATABASES = {
    'default': {
        'ENGINE': 'postgresql_psycopg2',
        'NAME': 'template1',
        'USER': 'hoge',
        'PASSWORD': '*************',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'mysite.polls'
)
/path/to/django/mysite/polls/models.pyを編集
from django.db import models
class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
admin サイトの有効化
/path/to/django/mysite/urls.pyを編集
from django.conf.urls.defaults import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)
モデルテーブルをデータベース上に作成します。
/path/to/django/mysiteにて
$ python manage.py syncdb
Djangoを起動
/path/to/django/mysiteにて
$ python manage.py runserver 0.0.0.0:8080
管理画面へのアクセスを確認。

次回へ続く。

人気の投稿 (過去 30 日間)