2012年6月15日金曜日

2012年4月6日金曜日

[AWS]S3 で静的な Web サイトを構築する方法

S3 に静的な Web サイトを構築してみる。十分な帯域を持ち、大量アクセスにも耐えられ、一瞬で準備できるということでキャンペーンサイトなどに向いていると思う。

とりあえず、ドメイン名を取得しよう。レジストラはどこでもいい。とりあえず、僕は legna.org というドメイン名をもっているのでそれを使用する。

1. Web サーバーを作成 (Amazon S3)
  1. Amazon Management Console にアクセス
  2. Amazon S3 タブをクリック
  3. Create Bucket をクリック
  4. Bucket Name に取得したドメイン名に www を付けたサブドメイン名を入力
    (例:example.com を取得している場合、www.example.com を入力する。)
  5. Region で Tokyo を選択
  6. Create をクリック
  7. Bucket パネルの Actions > Properties をクリック
  8. Properties パネルの Website タブをクリック
  9. Enabled をチェック
  10. Index Document にインデックスドキュメント名を入力
    (例:index.html)
  11. Error Document にエラードキュメント名を入力
    (例:error.html)
  12. Endpoint をメモ
  13. Save をクリック
2. Web サイトをアップロード (Amazon S3)
  1. Objects and Folders パネルの Upload をクリック
  2. インデックスドキュメントとエラードキュメントを Add Files をクリックして追加
  3. Set Details をクリック
  4. Set Permissions をクリック
  5. Make Everything Public をチェック
  6. Start Upload をクリック
  7. Endpoint の URL にアクセスし、インデックスドキュメントが表示されることを確認
  8. Endpoint に存在しないファイル名を付けた URL にアクセスし、エラードキュメントが表示されることを確認
3. DNS のゾーンを作成 (Amazon Route 53)
  1. Amazon Route 53 タブをクリック
  2. Create Hosted Zone をクリック
  3. 取得したドメイン名を Domain Name に入力
  4. 適宜コメントを Comment に入力
  5. Create Hosted Zone をクリック
  6. Delegation Set のネームサーバー名をメモ
  7. レジストラのドメイン名管理画面でネームサーバー名を登録
4. DNS のレコードを作成 (Amazon Route 53)
  1. 作成したゾーンをチェック
  2. Go to Record Sets をクリック
  3. Create Record Set をクリック
  4. Name に www を入力
  5. Type で CNAME を選択
  6. Value に Endpoint のホスト名部分を入力
    (例:www.example.com.s3-website-ap-northeast-1.amazonaws.com)
5. ブラウザからアクセスして確認
(例:http://www.example.com)
補足1. Web サーバーへのアップロードに Enhanced Uploader を使用する方法 (Mac OS X Lion)
これを使用するとフォルダごとアップロードできる。
  1. アプリケーション > ユーティリティ > Java Preferences を起動
  2. 「アプレットプラグインおよび Web Start アプリケーションを有効にする」をチェック
  3. Java Preferences を終了
  4. Safari を再起動(起動していた場合)
  5. S3 の Upload ポップアップウィンドウで Enable Enhanced Uploader をクリック
  6. アプレットの実行について警告が出るので、許可をクリック
これだけで、静的な Web サイトのための Web サーバーが準備できる。また、アカウントのアクセスキーを新しめのバージョンの Cyberduck に設定すれば、Cyberduck からもアップロードできるので試してみてほしい。

2012年3月30日金曜日

AirMac Express の速度調査

今さらだけど、AirMac Express を新しいのにした。有線接続(直接)で 80Mbps 出ている回線で、旧型 AirMac Express (M9470J/A) で 4Mbps しか出ないのは寂しすぎるので。新型 AirMac Express (MB321J/A) にして、新旧の速度と新型のワイヤレス設定変更したときの速度を計測してみたので、ここに書きとめておく。

Mac 側は、MacBook Pro 13 (Early 2011)、Mac OS X Lion という感じ。計測は3回計測した結果の平均で、計測サイトは USEN スピードテストを使用。アパートの回線環境は UCOM のようだけど、詳細は不明。(入居時に資料があった気がするけど……。)
  • 有線接続(直接):79.892Mbps
  • 旧型 AirMac Express - 802.11g のみ:5.625Mbps
  • 新型 AirMac Express - 802.11n(802.11b/g 互換):36.557Mbps
  • 新型 AirMac Express - 802.11n のみ(2.4GHz):43.661Mbps
  • 新型 AirMac Express - 802.11n(802.11a 互換):61.452Mbps
  • 新型 AirMac Express - 802.11n のみ(5GHz):62.986Mbps
安定して有線接続は速いわけだけど、新型は十分な無線での接続速度を出してくれてるね。全部 5GHz にできれば最強なんだけど、iPhone 4 が対応していないということもあるので、ワイヤレス設定は「802.11n のみ(2.4GHz)」にしておいた。Windows PC は Mini PCI Express カードを買い替えて付け直す方針。HP のプリンタは、Canon のプリンタにいずれ買い替えよう。最近使ってないから、必要になったら買い替える方針で。

2012年3月22日木曜日

AWS Elastic Beanstalk for PHP #1

AWS Elastic Beanstalk が PHP 環境をサポートしたようなので、とりあえず試してみる。

どうやってデプロイすんのかなと思ってたんだけど、どうやら Git を使用するらしい。「Git を知らないのが許されるのって高校生までだよねー」とか言われそうだけど、Git 使ったことないぞ……。

とりあえず、Windows 7 環境で試してみた。(Windows XP Professional SP3 で試したらうまく行かなかったよ……。)

Getting Started Using AWS Elastic Beanstalk > Get Set Up > AWS DevTools のところに、Windows は次のような手順でやってねって書いてあった。
  1. 必要なソフトウェアのインストール
  2. AWS DevTools のダウンロード
  3. セットアップスクリプトの実行
  4. Git リポジトリディレクトリの作成
  5. リポジトリセットアップスクリプトの実行
では、順番にやっていこう。

1. 必要なソフトウェアのインストール

必要なソフトウェアのインストールということで、次の2つをインストールした。とりあえず、git コマンドのパスを通すところ(画像参照)以外はデフォルトインストールだね。

2. AWS DevTools のダウンロード

AWS Elastic Beanstalk Command Line Tool をダウンロードする。ダウンロードしたら、ZIP ファイルを解凍する。

3. セットアップスクリプトの実行

解凍したディレクトリ内の elasticbeanstalk-cli¥AWSDevTools¥Windows¥AWSDevTools-OneTimeSetup.bat をダブルクリックして実行する。

4. Git リポジトリディレクトリの作成

デスクトップにある Git Bash アイコンをダブルクリックして Shell を起動する。下記のコマンドをホームディレクトリで実行する。

$ mkdir sample $ cd sample $ git init .

5. リポジトリセットアップスクリプトの実行

解凍したディレクトリ内の elasticbeanstalk-cli¥AWSDevTools¥Windows¥AWSDevTools-RepositorySetup.bat を sample ディレクトリにコピーし、ダブルクリックして実行する。



ここまでで、AWS DevTools の設定は完了した。
早速、サンプルの PHP ファイルをデプロイしてみよう。

作成した sample ディレクトリで下記のような感じで作業し、サンプルとなる PHP ファイルを作成した。(Hello, World と表示するだけのサンプルw)すべてのコマンドは、Git Bash から実行した。

$ vim index.php
$ git add .
$ git commit -m "initial check-in"

次に、AWS Management Console > AWS Elastic Beanstalk > Create New Applicationで適当なアプリケーションを作成する。僕は、Hello というアプリケーションを作成した。環境は HelloEnv にしといた。

その内容で、下記コマンドを実行し、デプロイの設定をする。

$ git aws.config
AWS Access Key: (アクセスキーを入力する。)
AWS Secret Key: (シークレットキーを入力する。)
AWS Region [default to us-east-1]: (デフォルトのまま Enter を入力する。)
AWS Host [default to git.elasticbeanstalk.us-east-1.amazonaws.com]: (デフォルトのまま Enter を入力する。)
AWS Elastic Beanstalk Application: Hello
AWS Elastic Beanstalk Environment: HelloEnv

最後に、下記コマンドでデプロイ!

$ git aws.push

そして、下記の URL をブラウザで開いて実行されていることを確認する。

http://(環境の名前).elasticbeanstalk.com/index.php

環境構築には手間取ったけど、慣れてしまえば効率的に開発環境も本番環境も作成できるね。シンプルな Web アプリケーションだったら、サーバーエンジニアの仕事はなくなっていくな。AWS がわかるエンジニアが居ればね。

参考文献:
AWS Developers Guide Elastic Beanstalk

追記(2012年3月22日):
ELB のヘルスチェックを sample/index.php に設定してやらないとダメみたい。
追記(2012年4月19日):
Git を理解してなかったためにいろいろと間違ってたので修正。ELB のヘルスチェックも index.php になってれば大丈夫。

2011年12月10日土曜日

Python 3 チュートリアルを Python 2 で試しながら読んでみた #1

Django が、Python 3 に対応していないので、Python の勉強をするなら Python 2 環境に慣れておかないとダメ。ということで、手元にある「Python チュートリアル 第2版」のコードを Python 2.7.2 (Windows XP) 上で試してみたよ。

とりあえず、Python 2 インタプリタをめいっぱい Python 3 互換で動くようにするために、次のようなスタートアップファイルを作成した。あくまで、対話環境の初期化ファイルなので、ファイルを指定して実行するときは、同じようなインポートをファイルごとに記述する必要がある。

# -*- coding: utf-8 -*-
from __future__ import division, print_function, unicode_literals
from future_builtins import ascii, filter, map, hex, oct, zip

それで、環境変数 PYTHONSTARTUP にそのファイルのパスを登録した。ちなみにエディタは、IDLE を使用している。設定は、フォントを FixedSys の10ptに変更し、Default Source Encoding を UTF-8 に変更した。ただし、IDLE 上のインタプリタでは、スタートアップファイルが反映されなかったので、Python (command line) で起動したインタプリタ上で実行している。

さて、チュートリアルを読み進めていこう。

最初の関門かなと思ったのは、「3.1.1 数値」の割り算の部分。Python 2 と Python 3 で動作が異なる部分だけど、スタートアップファイルの設定で、同じ動作をしてくれた。素晴らしい。

次の問題は、文字コード。日本人プログラマーなら1度は頭を悩ませたことがある問題。「3.1.3 Unicode について」のところも、スタートアップファイルの設定で、ほぼ同じ動作をしてくれた。

ここから先は、当分トラブルはなさそうだなと思っていたら、「4.1 if 文」に伏兵が潜んでいたよ。input 関数の引数にスタートアップファイルで設定したまま非 Ascii 文字を含む文字列を入れるとダメっぽい。input 関数は、テストコードくらいでしか使わないだろうけど、こういうエラーが生じることは覚えとかないとかな。

「4.2 for 文」で、print 文と print 関数の違いを見た。出力が、タプルとして評価された結果になってしまっている。スタートアップファイルの設定があれば問題はない。

「4.3 range() 関数」では、range 関数の戻り値を print 関数の引数としたとき、動作が異なるところが見られる。Python 3 の range 関数は、Python 2 の xrange 関数と同様に反復可能体 (iterable object) を返すが、Python 2 の range 関数はそうではないためだ。とりあえず、range 関数を使ったままのコードで for 文の動作は問題ない。

「4.7.1 引数のデフォルト値」で、Python 2 と Python 3 での input 関数の違いに遭遇。Python 2 の raw_input 関数が Python 3 での input 関数になったそうだ。Python 2 の input 関数は、Python 3 での eval(input()) になるらしい。

4章まで読了。次回は5章から。Pythonista 目指して頑張ろう。

  • Python 2.7.2

    >>> (50-5*6)/4
    5
    >>> 8/5
    1
    >>> 'Hello\u0020World !'
    'Hello\\u0020World !'
    >>> 'あいう'.encode('utf-8')
    
    Traceback (most recent call last):
      File "", line 1, in 
        'あいう'.encode('utf-8')
    UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 0: ordinal not in range(128)
    >>> x = int(input("整数を入れてください: "))
    整数を入れてください: 42
    >>> a = ['cat', 'window', 'defenestrate']
    >>> for x in a:
    ...     print(x, len(x))
    ...
    ('cat', 3)
    ('window', 6)
    ('defenestrate', 12)
    >>> print(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> list(range(5))
    [0, 1, 2, 3, 4]
    >>>
  • Python 2.7.2 (Python 3 互換設定済)

    >>> (50-5*6)/4
    5.0
    >>> 8/5
    1.6
    >>> 'Hello\u0020World !'
    u'Hello World !'
    >>> 'あいう'.encode('utf-8')
    b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86'
    >>> x = int(input("整数を入れてください: "))
    Traceback (most recent call last):
      File "", line 1, in 
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)
    >>> a = ['cat', 'window', 'defenestrate']
    >>> for x in a:
    ...     print(x, len(x))
    ...
    cat 3
    window 6
    defenestrate 12
    >>> print(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> list(range(5))
    [0, 1, 2, 3, 4]
    >>>
  • Python 3.2.1

    >>> (50-5*6)/4
    5.0
    >>> 8/5
    1.6
    >>> 'Hello\u0020World !'
    'Hello World !'
    >>> 'あいう'.encode('utf-8')
    b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86'
    >>> x = int(input("整数を入れてください: "))
    整数を入れてください: 42
    >>> a = ['cat', 'window', 'defenestrate']
    >>> for x in a:
    ...     print(x, len(x))
    ...
    cat 3
    window 6
    defenestrate 12
    >>> print(range(10))
    range(0, 10)
    >>> list(range(5))
    [0, 1, 2, 3, 4]
    >>>

参考文献

2011年8月15日月曜日

Android の定石 #1 スプラッシュ画面の表示

Android の定石っぽいものをメモとして書いておくことにした.出来る限り,正しいコードを書くように心がけるつもりだけど,Android の開発を始めて1ヶ月も経ってないので,いろいろ間違ってたりするかもしれない.間違っていたら,ぜひ教えてください.

さて今回は,スプラッシュ画面(スプラッシュスクリーン)を Android で実現する方法について.

基本的な流れは,次のとおり.

1. スプラッシュ画面(スプラッシュ画像を表示するアクティビティ)を表示する.



2. N ミリ秒後にスプラッシュ画面から遷移する.



1 は,レイアウト XML ファイルに ImageView を追加し画像を表示するだけなので割愛する.

重要なのは 2.時間を待って画面遷移をさせるために,Handler#postDelayed() を使用する.Handler#postDelayed() は,N ミリ秒後に Runnable オブジェクトの run() を実行するメソッドだ.(Handler クラスを一文で表すとなんだろうなぁ…….)

実際のコードは次のとおり.コードを見た方がわかりやすい.

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// スプラッシュ画面から、1000ミリ秒後に遷移する。
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intent = new Intent(MainActivity.this, SubActivity.class);
startActivity(intent);

// アクティビティを終了させることで、スプラッシュ画面に戻ることを防ぐ。
MainActivity.this.finish();
}
}, 1000);
}
}


スプラッシュ画面表示時間は,values/integers.xml などに入れておくのも良いかと思う.

プロジェクトファイルは下記 URL に置いてあるので,参考にしてほしい.

http://idisk.mac.com/takuya0301/Public/Android/Example001.zip

参考文献:
Android Developers: Handler
素人のアンドロイドアプリ開発日記: splash画面を作成してみる。

2011年5月8日日曜日

HP Compaq nx6320 で Intel Wireless WiFi Link 4965AGN を使う方法

※起動しなくなってもいっさい保証できないので,自己責任で実施してね.

HP Compaq nx6320 が認めているカード以外は,BIOS ではじかれる.BIOS にホワイトリストが含まれているらしい.なので,ホワイトリストを除去した(正確には,ホワイトリストを参照しないなのかな?) BIOS を書き込めば,Intel Wireless WiFi Link 4965AGN などの Wi-Fi カードが動作する.(なお,このカードは,オークションで安く出回っている.)

ということなのだが,自力でやる方法を探す暇がなかった.とりあえず,ダウンロードサイトなどで出回っているツールを使って解決できたので,自己責任で使用してください.

sp38742_SLIC21_SLPon_no_whitelist.zip

なお,ネタ元は,参考文献をどうぞ.

参考文献:
ログ速: 【HP】HPCompaq nx6320/6310買得 No3【ビジネス】 (>>690)
My Digital Life Forums: This is no request thread! HP COMPAQ bioses, how to modify the bios? [Archive] (>>TTAV134 14 Aug 2009, 11:01 PM)