2013年11月23日土曜日

EC2にCentOS 6.4+Nginx+Python+Flask+gunicornの環境構築

1.EC2にインスタンスを作成

参考:EC2でCentOSを使う

ここは無数に情報があるので省略。
iptableを停止しておく。
/etc/rc.d/init.d/iptables stop
chkconfig iptables off

2.Nginx1.4.3のインストール

参考:CentOS-6へ最新版のnginxを3分でインストールする方法

下準備。
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel wget

CentOS6用のパッケージをインストール。
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx


3.Python2.7.4のインストール

参考:CentOS6.3にPythonの学習環境を作る

ソースのダウンロード。
wget http://python.org/ftp/python/2.7.4/Python-2.7.4.tgztar xvzf Python-2.7.4.tgz
tar xvzf Python-2.7.4.tgz
cd Python-2.7.4

コンパイル。
./configure --with-threads --enable-shared --prefix=/usr/local
make
make install

共有ライブラリを確認
ldd /usr/local/bin/python

すると、libpython2.7.so.1.0 => not found といわれるので、シンボリックリンク貼る。
ln -s /usr/local/lib/libpython2.7.so.1.0 /lib/i686/nosegneg/

4.virtualenvつくる

easy_installをインストール。
このとき、Python2.7を指定してインストールしないと、CentOSにデフォルトで入っているPython2.6に環境が構築されてしまうので注意。
wget http://peak.telecommunity.com/dist/ez_setup.py
/usr/local/bin/python2.7 ez_setup.py

pipをインストール。
easy_install pip

virtualenvをインストール。
pip install virtualenv
pip install virtualenvwrapper

パスを通す。
vi .bashrc

.bashrcに以下の2行を追加
export WORKON_HOME=$HOME/.virtualenvs 
source /usr/local/bin/virtualenvwrapper.sh

source .bashrc

仮想環境を作成。
mkvirtualenv test_env

仮想環境を抜ける。
deactivate

仮想環境に入る。
workon test_env

これで元環境を汚さずライブラリをインストールし放題に。

5.Flaskとgunicornのセットアップ

pip install flask
pip install gunicorn

nginxでproxy_passを設定(Flaskはポート5000番)。
vi /etc/nginx/conf.d/default.conf
location / {
       proxy_pass http://localhost:5000;
}

nginx再起動
service nginx restart

Flaskのサンプルプログラム(https://flask-docs-ja.readthedocs.org/en/latest/quickstart/#id2)をhello.pyとして保存し、

hello.pyと同じフォルダにconfig.pyというファイルを作成する。中身は以下。
bind = '127.0.0.1:5000'
debug = True

gunicorn -c config.py -D hello:app

これで、EC2のインスタンスにブラウザからアクセスすれば、Hello Worldが表示される。

2012年7月12日木曜日

[BoardGameClock]ボードゲーム用のチェスクロックiPhoneアプリ作りました!

App Store でこのアプリケーションを見る:
Cover Art      

BoardGameClock

yetuma
カテゴリ: ユーティリティ
更新: 2012/8/20

        


ボードゲーム用の対局時計アプリです。
特に、各プレイヤーのコマに色があるタイプのゲームに最適です。

長考しがちな重めのゲームは、仲間で集まっても時間がもったいなくてなかなか手が出せなかったりしますよね。また、ダウンタイムが長いと、どうしても集中がそがれてしまったり。

そんな時に、ある程度時間をコントロールできるかもしれません。
2-5人プレイに対応しています。
6人での電力会社などは未対応ですが、アグリコラなんかには最適です。

プレイ順にコマのカラーを選択し、
 (最も若いプレイヤーをタップすることでキャンセルできます。)




持ち時間、



秒読み





を設定してスタートするだけ。





カウント画面では、1秒以上のタップで、終了します。





バックグラウンドで動作しているあいだは、カウントしませんので、中断したいときはホームボタンを押してください。
電話に出る等でも中断されます。

iPadでも動作しますが、iPhoneを移動させながら…という遊び方がいいかなぁと思います。

2012年3月12日月曜日

RubyのMechanizeでGREEにログイン&投稿

573の某ソーシャルゲームにすっかりはまっている。
体力の効率的な消費を模索し、自然回復が無駄にならないよう、常に体力は低下状態を保つようチェック。朝起きたら、まずは溜まった体力を消費する作業。

レベルアップ時の全回復を効率的に行うため、体力を消費しきった瞬間に経験値がMAXになるよう、必要な残り時間を計算しアラームを設定、体力0から全回復後、職場にいようがトイレに駆け込み体力消費作業に入る。
回復アイテム=資産であり極力使用を避け、イベントの都合上どうしても回復薬使用が必要な際は、レベルアップ時と同様、体力0になるまで冒険へ。

回復=資産であり、トレードコミュニティはマーケットである。
機能改修・カード追加・次期イベント内容を見極め、値上がりが予想される物件を底値の回復薬で購入し、
売りさばく。転売、保有、現実のマーケットほどのリスクと複雑さを伴わない投機の実験場だ。

そうして得た資産はそのままデッキの強さとなる。しかしながら、デッキ強化のためのレアカード購入は、とりわけ資産価値の低下がはやいソーシャルゲームにおいては大きな保有リスクとなり、結果的に資産の減少を招く。
したがって、ソーシャルゲームの目的はデッキを強化し他プレイヤーより優位に立つことから、いかにゲーム内で価値の上昇する資産を持つかというむき出しの富のゲームへといたる。

仮にRMTが絡めば、いきなり現実のマーケットと地続きの駆け引きも生じる(参考)。

ここにおいて、最速の攻略というものを目指すならば、ソーシャルゲームからは射幸心を煽る課金システムは意味をなくすはずである。どんな演出があろうと、バトルで勝つためにデッキを強化することは非合理な行動である。ガチャでレアカードを手に入れるよりも、マーケットで同カードを購入した場合の方が期待値で圧倒的に低コストである。私たちの身体に訴えかけるキラキラした快よりも、最適な価格で商品を入手できたという合理的な快が勝る。
ソーシャルゲームのRTAがあるとすれば。このような投機的な行動の結果によるはずであり、それはそれで、いっぱんにRTAと呼ばれているプレイングとは大きく違ってしまうが、課金アイテムを度外視して最善の攻略を目指したとき、このようなことになるであろうと思う。

---

と、いうのはあくまで資産に偏ったプレイングの例ですが、こういった駆け引きを好む人には食わず嫌いかもしれないということで、いちどやってみるといいですよ、ガチャガチャポチポチソーシャルゲーム。

そこで本題ですが、GREEのコミュニティに自動投稿するスクリプトを公開。
iMacrosなどを導入した方が話は早いし、トレードコミュニティでも、投稿先を個人のブログに設定しているところには、うまくポストできないんで、半端なコードですが。
GREEのブログへのコメントフォームは、jsかなにかで動的に生成しているみたいで、Mechanizeでポストする方法がわからなかった。誰か教えてください。


require 'rubygems'
require 'mechanize'
require 'kconv'

#それぞれ入力
email = '[Email-address]'
passwd = '[Password]'
comment = "[投稿内容]"

#インスタンスの生成
agent = Mechanize::new

#サイト内容取得
agent.get('http://gree.jp/')

#loginフォーム処理
agent.page.form_with(:name => 'login'){|form|
  form.field_with(:name => 'user_mail').value = email.toutf8
  form.field_with(:name => 'user_password').value = passwd.toutf8
  form.click_button
}

#コミュニティにアクセス
agent.get('[http://gree.jp/コミュニティのURL/]')

#括弧内にはクリックしたいリンクを入力
#ページ遷移は下の行をコピペで
agent.page.link_with(:text => /#{"[自己紹介スレッド]"}/).click

agent.page.form_with(:action => 'http://gree.jp/#form'){|form|
  form.field_with(:name => 'thread_msg').value = comment.toutf8
  form.click_button
}

2012年3月9日金曜日

Contact form 7 と WordPress HTTPS でSSLを使う

WordPress 3.3.1 で、ちょっとした申込みフォームを作成したときのメモ。


1.Contact form 7でフォーム作成

まずは、Contact form 7をインストールしてアクティベート。
2012/03/08 時点で、Contact form 7のバージョンは3.1.1。

設定画面でフォームの項目を指定します。


基本的には「タグの作成」が親切にインストしてくれるため、指示に従っていけばフォームが設定されます。
ちなみに、type要素についているアスタリスクは、必須項目を示しています。

フォームの設定が終わったら、下部の送信メール内の項目をフォームと対応させ、設定完了。
保存後、↓のコードをページに張り付けてフォーム完成です。





2.WordPress HTTPSで共有SSLを使用する

各サーバで共有SSLのURLを調べる。
ほんで、WordPress HTTPSをインストール&有効化。
バージョンは2.0.4。

WordPress3.3.1では、
管理画面サイドバーの設定タブから、WordPress HTTPS SETTINGをクリックし、設定画面へ。

SSL Host欄に共有SSLのURLをペースト。



Force SSL Exclusivelyは、指定したページにのみSSL認証をかけるための機能なので、チェックし、さらに当該ページ(上で作成したフォームを設置した)の保存画面で、保存ボタン付近にある「Force SSL」にチェックを入れる必要があります。


3.以上!

簡単ですね。
住所など扱う場合には、SSL認証を使う必要も出てくると思うので、いちいちPHPいじるよりも便利。
あとは、作成したページのみ、テンプレートをいじって別ページにして、外部サイトのプラグインを使わないようにしないと、SSLおなじみの警告が出ますのでご注意を。

2012年3月8日木曜日

平泳ぎは腰によくない

ジムに通い出して4ヶ月。
3週間、週2で通うと、腰が痛んで、1週間休みというペースを続けていたんですが、
今日はトレーナーさんから、平泳ぎ禁止令が。

ほかの泳法はまともに泳げないんで、毎回ジムの最後は平泳ぎを100mくらいやっていたのが、腰に悪かった模様。息継ぎで背中を反るのがダメみたいですね。
今日、マシンはほぼ行わず、平泳ぎだけやったら、腰にピキッときて、こいつが原因かと思い、聞いてみたら案の定、「ダメ!」って。

このあいだ習ったクロールの息継ぎのコツがようやく掴めてきたんで、次回からはクロールで25m泳げるようになろう。