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)

2011年4月10日日曜日

写真を Aperture 3 から flickr に GPS 情報付きでアップロードする方法

写真を Aperture 3 から flickr に GPS 情報付きでアップロードするには,以下のような Aperture と flickr の設定変更が必要なのだ.

1. Aperture 3 の設定
アップロードする写真に位置情報を含めるようにする設定をする.

1.1.「Aperture > 環境設定… > 詳細 > 公開する写真に位置情報を含める」をチェックする.

2. flickr の設定
アップロードされる写真の位置情報を公開するようにする.

2.1. flickr にログインする.
2.2. グローバルメニューの You の横の▼をクリックし,プルダウンメニュー中の Your Account をクリックする.
2.3. Privacy & Permissions タブをクリックする.
2.4. Import EXIF location data の右端にある Edit をクリックする.
2.5. Yes please, that would be lovely. をチェックし,SAVE ボタンをクリックする.

これで自動的に,写真についている GPS 情報が flickr の Your Maps に反映される.

僕の場合はこんなかんじ.(コンタクトの追加もぜひしてねw)
Flickr: Explore TSUCHIDA Takuya's photos on the map

flickr の日本地図は残念な感じなので,改善を期待.(たぶん,アメリカの Yahoo! 地図の問題だろうけど.)

2011年4月6日水曜日

MacPorts から SpiderMonkey をインストール

MacPorts がインストールされている状態であれば,次のコマンド打つだけ.

$ sudo port -c install spidermonkey

次のコマンドでインタプリタを起動できる.

$ js

2011年4月3日日曜日

NetBeans 6.9.1 付属の GlassFish のアップデート方法

Mac OS X 上で NetBeans 6.9.1 をインストールしたら,GlassFish のアップデートが Update Tool からうまく実行できなかったのでメモ.

とりあえず,直接 pkg コマンドで GlassFish のアップデートを実行したらうまくいった.(既存環境でやって,一度失敗してるので,壊したくない人はやめといた方が無難かも.)

$ cd /Applications/NetBeans/glassfish-3.0.1/bin/
$ sudo ./pkg image-update
$ ./asadmin start-domain --upgrade
$ ./asadmin start-domain
$ ./asadmin stop-domain

ここまでやっとくと,とりあえず最新版になって,NetBeans 6.9.1 からも正常に起動できるっぽい.

蛇足だけど,GlassFish の日本語メッセージの文字コードは,Shift JIS みたいだからターミナルの設定変えて実行すると良い.

2010年11月23日火曜日

[日記]LTM Essentials WBT Forum

BIG-IP で有名な F5 Networks の無料オンライントレーニングをはじめた.良く知らないけど,BIG-IP Essentials v10.x をベースにしているらしい.BIG-IP も使いこなして,ネットワークエンジニアとしてステップアップするのだ♪

F5 Networks Japan: LTM Essentials WBT Forum

2010年9月19日日曜日

[資格]MOS Excel 2007

仕事で Excel 2007 をよく使うので,Excel 2007 の勉強のために MOS (Microsoft Office Specialist) Excel 2007 資格を取得してきた.

まあ,商業高校の生徒でも普通に合格しているレベルなので,就職とか転職とかで役に立つ資格ではないけどね.富士通エフ・オー・エムのテキストや問題集で勉強すると,案外知らない便利そうな機能が多くて,これ業務で使えそうだなってのがあるからオススメ.

資格を取得するだけなら,「よくわかるマスター MCAS Excel 2007 完全マスターI 公認テキスト」だけで十分.95%以上本番に類似した模擬試験ソフトが入ってるからw正直,12,390円という受験料の高さが問題w今回は合格したので,会社から受験料払ってもらえるからいいんだけどね♪

蛇足だけど,模擬試験ソフトは,模擬試験ソフトの修正パッチを適用した方がいいよ.あと,Office 2007 をインストールするときは,完全オプションでインストールしないと,模擬試験ソフトを起動したときに,「エラーが発生しました 指定されたキャストは有効ではありません。・・・」というエラーが出て動作しないので注意.

参考文献:
よくわかるマスター MCAS Excel 2007 完全マスターI 公認テキスト
よくわかる Microsoft Office Excel 2007(基礎)
よくわかる Microsoft Office Excel 2007(応用)

2010年5月30日日曜日

Windows 7 64ビット版を BootCamp でインストール

Windows 7 の64ビット版を BootCamp でインストールしようとすると,
Select CD-ROM Boot Type:

と表示されて止まってしまう.これは,El Torito ブートセクタファイルが BIOS と EFI の2種類あるので選択画面が出るが,BootCamp からのインストールではなぜか何も入力できないからなんだよね.(要確認)

なので,Windows AIK を使用して,読み込む El Torito ブートセクタファイルを事前に指定したディスクを作成することで解決している.(El Torito については参考文献を参照のこと.)

その作業の詳細は,ググればいっぱい出てくると思うので割愛させてもらうとして,作業で使用するコマンドのオプションを僕の場合は変更しているので,それをメモしておこうと思う.(ここでは,Z: ドライブに Windows 7 のマスタメディアがあるものとする.なお,今回は MSDN AA で配布されている Windows 7 Professional 64 ビット日本語版を使用した.)
> "C:\Program Files\Windows AIK\Tools\x86\oscdimg.exe" -bZ:\boot\etfsboot.com -lGRMCPRXFRER_JA_DVD -m -n Z:\ C:\ja_windows_7_professional_x64_dvd_x15-65823.iso

それぞれのオプションの意味は次のとおり.
-b: El Torito ブート セクタ ファイルの場所の指定する(主目的)
-l: ボリューム ラベルを指定する(ボリュームラベル指定しないと CD-ROM となっていたから)
-m: イメージの最大サイズ制限を無視する(ISO として出力すると,72分 CD-R のサイズがデフォルトになるから)
-n: 長いファイル名を使用する(長いファイル名が存在した場合に削られるのは良くないから)

オプションについては,参考文献のサイトとヘルプを参照して自分なりに設定しているのだけど,誤認識しているものもあるかもしれないので,間違っていたら教えてください.

○参考文献
この先行き止まり: Select CD-ROM Boot Type:
Microsoft ダウンロードセンター: Windows 7 用の Windows 自動インストール キット (AIK)
Microsoft TechNet: Oscdimg のコマンド ライン オプション
Wikipedia: ISO 9660

○追記(2010年5月30日)
d オプションを付けるとうまくいかないので注意.

2010年4月25日日曜日

画像置換を JavaScript (jQuery) でやってみる

お久しぶり!社会人になってしまったので,Blog 更新する暇なかった!

いま,ちょっとした Web サイトを作成中なんだよね.その制作過程で,「画像置換どうしよう?」ってことになったんで,今回はそれについて書くことにした.

Windows もメイリオが入ってから,フォントがだいぶ綺麗になったと思うけど,見出しに使うフォントとしてはいまいち.でも,Mac OS X ならヒラギノ明朝があるから,それを見出しにすればいいよなぁと思った.

また,Mac OS X の場合はフォントがあるんだから,テキストとしてコピーできるように,フォントがある場合は画像置換をしたくない.そして,見出し1つ1つに id を付けるのは嫌だったし,XHTML を汚したくない.さらに言えば,CSS に置換用画像のファイル名をいっぱい書かなければならないのもどうかなと思うわけだ.

なので,条件としては,

・ヒラギノ明朝が存在すれば,画像置換はしない
・XHTML と CSS を汚さない

ということで考えてみた.

そーなると,CSS でどーにかするっていう画像置換は無理なので,JavaScript で頑張ることにした.まあ,美しいサイトを見たいなら JavaScript くらい有効にしておいてくれということでwアクセシビリティとしても XHTML を汚さないので大丈夫だと思うし.

んで,今回は,jQuery で,

・ヒラギノ明朝の存在判定
・h1, h2 要素のテキストのハッシュ値からの画像名計算
・h1, h2 要素のテキストの img 要素への変換

ということをすることで,画像置換を行ってみた.サンプルは次のとおり.

JavaScript による画像置換サンプル

使用したライブラリは,jquery.js と jquery.fontavailable.js,jquery.md5.js.

JavaScript を書くことがないので,こういう書き方が正しいかわからないけど,次のようなかんじで記述したら OK だった.

$(function() {
// Image Replacement
if (!$.fontAvailable("Hiragino Mincho Pro") &&
!$.fontAvailable("ヒラギノ明朝 Pro W3")) {
$("h1").each(function() {
$(this).replaceWith(
'<h1><img src="img/ir/h1_' + $.md5($(this).text()) +
'.jpg" alt="' + $(this).text() + '" /></h1>');
});

$("h2").each(function() {
$(this).replaceWith(
'<h2><img src="img/ir/h2_' + $.md5($(this).text()) +
'.jpg" alt="' + $(this).text() + '" /></h2>');
});
}
});


一応,Mac OS X での Safari と Firefox,Chrome,Opera,Windows での Internet Explorer 6,Internet Explorer 7,Internet Explorer 8,Firefox,Safari,Chrome,Opera での動作を確認.

それにしても jQuery って便利だねぇ.

2010年3月14日日曜日

Office 2010 優待アップグレードキャンペーンで,卒業直前に Office 2007 アカデミックを購入する場合

Office 2007 を3月5日からパッケージ製品発売前日までに購入し, Office 2010 優待アップグレードキャンペーンへ申し込むと,3,000円で Office 2010 にアップグレードできる.

詳細は,キャンペーンサイトに譲るが,どうやら店頭からの購入日がキャンペーン期間中であれば,過去の優待パッケージ製品でもいい.(まあ,過去の優待パッケージが残っているとは思えないけどね.)そして,購入するパッケージがアカデミックでもいい.ここで,本年度卒業の学生は,Office 2007 Professional アカデミックを購入して,Office 2010 Professional アカデミックへのアップグレードが可能なのかが重要になる.

僕は,Office 2010 が学生のうちに出ないかなぁと待ってたんだけど,結局学生のうちにでないということになった.でも,Office 2010 優待アップグレードキャンペーン対象の Office 2007 Professional アカデミックは学生のうちに購入できる.Office 2010 の本国の価格情報から,Office 2010 Professional を入手する場合の費用は,Office 2010 Professional(非アカデミック)購入価格より Office 2007 Professional アカデミック購入価格+3,000円の方が安くなると思う.なので,学生のうちに買った Office 2007 Professional アカデミックから,社会人になってから発売される Office 2010 Professional アカデミックに優待アップグレードキャンペーンによってアップグレードできれば安上がりになる.ちなみに学生時に購入したアカデミック版は,卒業後でも個人用途であればそのまま使用できるからね.

さて,ここらへんはどうなってるんだろう.ちょっと,Microsoft に問い合わせてみるかなぁ.

追記(2010年3月15日):
Microsoft に問い合わせてみた結果,Office Professional 2007 アカデミックを在学中に購入し,Office 2010 優待アップグレードキャンペーンに応募すれば,Office Professional 2010 アカデミックが発売後に届くらしい.もちろん,それを使用することはライセンス上問題がないとのことだ.

参考文献:
Microsoft Office 2010 優待アップグレード キャンペーン

2010年2月19日金曜日

Mac OS X で Hex Dump(バイナリビューワー)

Mac OS X でとりあえず16進数でバイナリを表示したいときに使えるツールのメモ.
$ hexdump ファイル名
$ xxd ファイル名

xxd の方のデフォルトの表示フォーマットのが好きだな.機能の差とかはよく知らない.

2010年2月14日日曜日

またたび式 C 入門 #0

どうも,お久しぶりですw

修士論文とレポートで忙しくてほったらかしてたんだよね.一応,修士論文発表会も終わり,単位認定結果を待つのみとなったので,ブログを書くのを復活させよう♪

久しぶりのブログのネタは,いわゆる C 言語の入門ネタをやろうかと思ってる.C の入門ネタなんてインターネット上に腐るほどあるので,いまさら感はあるんだけど,1回くらいは C の入門ってーのを書いてみたいと前々から思っていたのでwほかの言語でちゃんとした入門ネタを書こうとも思ったんだけど,入門ネタを書けるほど修得してる言語って C くらいかなぁと…….そもそも,C ってとんでもない人がわんさかいるから,僕が偉そうに書くというのもいろいろ自爆してる気がするけどwww

ということで,「またたび式 C 入門」と題して,C 言語の入門ネタを書いていこう.またたび式という名前は,とりあえず C 入門じゃ検索し辛いから,適当に付けた名前なのであまり気にせずにwあと,林檎生活なんだけど,ターゲットプラットフォームは,Windows XP にした.とりあえず,Windows ユーザ向けに書いてみたかったからなんだよね.Windows ユーザ向けで書いてどのくらい読む人がいるか知りたかったのと,Windows っていう C に向かない環境でとりあえず学ぶ方法を開拓してみたかったから.

まあ,今回のエントリは,ぐだぐだ僕の C 言語とそれを学ぶことについて思ってることを書くだけにする.#1 からちゃんと入門っぽいエントリにするのでねw

まず,C を学びたい人ってどういう人だろうねという話.とりあえず,C って有名だから学び始める人が多いのかもしれない.実際,僕はそんな感じで勉強し始めた.学校で教えられるから勉強し始めた人も多いと思う.最近だと,実務で必要だからという人もいるかもしれないね.Web アプリケーションでよく使われる言語からプログラミングを始めて,組み込みの仕事もやることになってみたいな友達を知ってるから.

じゃ,C を学んでハッピーになれる人は?とりあえず,大学で研究するために必要な人は,ハッピーになれるはずだね.学ばないと研究にならないわけだしw実務で使用する人もハッピーになれると思うけど,入門書が役に立つとは思えないな.C の案件って組み込みが多いだろうし,入門書じゃそこまでカバーしきれないから.とりあえず,プログラミングを始めたくて C を選んだ人は,ハッピーにならない気がするな.いわゆる Windows アプリケーションを作成することを夢見てたり,ゲームプログラミングを夢見てるのであれば,C という選択肢はイバラの道だ.Windows API を叩いて Windows アプリケーションを作成するよりは,Visual Studio と C# で作った方が簡単だよね.ゲームを作るにしても,いまなら C# でいいんじゃないかなぁ.Direct X を C++ で叩くよりは,C# で叩いた方が行数が少なかったよね.ハッピーになる人なんて,UNIX アプリケーションのソースを読まなきゃならない人とか,C++ や Objective-C の前段階として学ぶ人くらいじゃないかなぁ.

実際のところ C は広く使われてるから,なんでもかんでもやろうと思えばできる.ハードウェアに近いドライバから,GUI アプリケーションや Web アプリケーションまで.でも,C じゃなきゃ困るというところは,組み込み系とか UNIX アプリケーション系とかに限定されてくる.あとは,リバースエンジニアリングをする目的で Windows API を知らなきゃならないとかいう状況かな.その場合は,もちろんアセンブラの知識の方が重要になるけどね.

という感じで,C をいまさらやらなくてもいいよなぁと思うところもあるわけだけど,大学ではまだ C を教えてるみたいだし,UNIX のサーバとかは C で開発されているのが多いし,とりあえず C を学びたい人はいそうだ.OpenGL や OpenMP,OpenCV を使って研究用の書き捨てのコードを書くなら C っていう選択肢は有りだし,C で書かれている便利なものが多くあるんだよな.

うーん,またたび式では,Windows 上で C の UNIX 的な使い方を勉強しつつ,いろんなライブラリを使える程度のスキルを身につけられるようにすることを目標にしようかな.発展的には,Windows API を使ってみることで,C からかけ離れた使い方を勉強してみるとかwあと,UNIX の開発ツールの使い方とかも一緒に学んで,UNIX アプリケーションのソースを読めるようにするとかね.

まっ,こんなことをグダグダと書いてしまったけど,次回からはちゃんと C 入門を書いていきます.全編通しての例題として考えているのは,リバーシ!いわゆる,オセロねwコンピュータの思考ルーチンとかも作って,最終的には GUI 化しようとか企んでるわけです♪

ではでは,お楽しみにw

2009年12月22日火曜日

WILLCOM のメールアドレスに迷惑メール

WILLCOM のメールアドレスに,12月15日から迷惑メールが届くようになった.サイトとかに登録しているメールアドレスでもないので,迷惑メールが届くようになるのはおかしい.そもそも,この現象についていろいろなブログが書いている.WILLCOM の方で,メールアドレスの流出があったのではないかと思ってしまう.

WILLCOM の迷惑メール対策機能は,残念ながらしょぼいので今回の件に対応できそうにない.WILLCOM の方での対策を待つしかない.WILLCOM からの音沙汰がないので,現状について何らかの発表をしてほしいなと思う.

参考文献:
WebDiary: Willcomでスパム爆発中!
何の変哲もない新婚生活…: @willcom.comあての迷惑メールが届くようになった.

2009年11月4日水曜日

Dell Inspiron Mini 12 無線 LAN 換装 Atheros AR5007EG (AR5BXB63)

Dell Inspiron Mini 12 に搭載されている無線 LAN モジュール Broadcom BCM94312MCG を Yahoo! オークションで購入した Atheros AR5007EG (AR5BXB63) に換装した.どちらも 802.11b/g 対応なのは変わらないが,FreeBSD をインストールして無線アクセスポイントとして使用したかったので,対応している Atheros のものにしたのだ.

FreeBSD 7.2-RELEASE で認識し,クライアントとして使用できることは確認できたが,FreeBSD 7.1-RELEASE では認識できなかった.Windows XP でも,Aspire One の無線 LAN ドライバをインストールすることで使用できることを確認した.(ダウンロードできるサイトは参考文献にある.)

以下,その作業手順.

1. バッテリーを外す.

2. 画面を最大まで開く.

3. 左側の F1 のあたりにある隙間を使ってヒンジカバーを浮かせて外していく.

4. ヒンジカバーを外したら,ヒンジカバーの陰に隠れていたキーボードを止めているネジを外す.

5. キーボードを外すときには,キーボードと本体を繋いでいるケーブルに注意する.

6. ケーブルのささっているところの左右のケーブルをロックしている茶色い部分を引き出してケーブルを外す.

7. 無線 LAN モジュールについている白黒のケーブルを外し,ネジを外す.

8. 無線 LAN モジュールが浮くので,交換したい無線 LAN モジュールに交換する.


簡単に交換できるので,802.11n に対応させたりしたい人はやってみるといいかもしれない.Intel Wireless WiFi Link 4965AGN なら普通に購入できるし,ドライバも簡単に手に入ると思う.Windows でクライアントとして使用することを前提としてだけどね.

関連製品:
Intel Wireless WiFi Link 4965AGN

参考文献:
へろへろ日記: Inspiron mini 12 分解
Dell: Inspiron 1210 サービスマニュアル
Acer Europe: Drivers for Aspire One 150

2009年10月30日金曜日

FreeBSD でサーバ構築 #18 Cyrus IMAP 編

林檎生活100: FreeBSD でサーバ構築 #17 UW IMAP 編の続き.今回は,Cyrus IMAP で IMAP サーバを構築してみる.

Cyrus IMAP は,メールボックスを1箇所で集中管理するタイプのサーバで,クウォータを設定できたり,サーバサイドでのメールフィルタ (Sieve) を使用できたりする.UW IMAP に比べ高機能で高性能だが,その分設定する項目も多くなっているので,導入は少し面倒である.このエントリでは,UW IMAP 編で UW IMAP を導入したときと同等の機能の IMAP サーバを構築することを目指すことにする.つまり,IMAP over SSL なサーバであり,クウォータやメールフィルタの設定は行わない.(そのような設定に付いては,参考文献を参照してほしい.)

Cyrus IMAP の動作は,UW IMAP の動作とは大きく異なる.UW IMAP のように UNIX のメール環境と共存するわけではなく,完全に独立したメールボックスを構成する.そのため,サーバにログインして mail コマンドでメールを読むことはできなくなる.あくまで IMAP(設定によっては POP も可能.)でメールボックスにアクセスする.UNIX のメール環境における,ローカルのメールボックス (/var/mail) とユーザのメールボックス (~/mbox) は使用しないのだ.Sendmail のローカル配信が Cyrus IMAP のメールボックスになるように設定するので,このような動作になる.

さて,さっそくインストールと設定をしていこう.

1. Ports からインストールする.
# cd /usr/ports/security/cyrus-sasl23
# make install clean



2. cyrus ユーザの所有権を持つ証明書と秘密鍵を /var/imap/certs などに配置する.

3. 設定ファイル (/usr/local/etc/imapd.conf) を変更する.下記設定項目について,該当行を変更する.
allowplaintext: yes
admins: root
sasl_pwcheck_method: saslauthd
sasl_mech_list: plain
tls_cert_file: /var/imap/certs/cert.pem
tls_key_file: /var/imap/certs/key.pem
tls_ca_file: /var/imap/certs/cacert.pem
tls_ca_path: /var/imap/certs

4. メールスプールなどを作成・設定するスクリプトを実行する.
# /usr/local/cyrus/bin/mkimap

5. /etc/rc.conf に次の行を追加する.
cyrus_imapd_enable="YES"

6.Cyrus IMAP を起動する.DB_ERROR ってのが大量に出るが,ユーザのメールボックスにメールが配信されると,そのメッセージはでなくなるので気にしない.
# /usr/local/etc/rc.d/imapd start

7. ユーザのメールボックスを作成する.
# cyradm --user root localhost
> createmailbox user.takuya
> quit

8. Sendmail のローカル配信を Cyrus IMAP にするので,設定ファイル (僕の環境では,/etc/mail/lucifer.legna.org.mc である.) に以下の行を追記する.
dnl Cyrus IMAP options
define(`confLOCAL_MAILER', `cyrusv2')
MAILER(`cyrusv2')

9. Sendmail に設定を反映し,再起動する.
# cd /etc/mail
# make install
# /etc/rc.d/sendmail restart


設定完了♪メールの送受信をしてテストしてみてほしい.WAN 側から接続するときは TCP の143番へのポートマッピングを設定すること.

残った問題として,IMAP over TLS の状態じゃなく,平文の状態でもログインができてしまうことがある.imapd.conf の allowplaintext を no にすればいいのだけど,そうすると cyradm が使えなくなる.うーん,どうしたらいいのかな.

次回は,メールのちょっとした設定などについて解説して,メール編は終わりの予定♪では,また.

参考文献:
Cyrus IMAP Server v2.3 Documentation
IMAP