FrontPage http://www.ark-web.jp/sandbox/wiki/16.html
このページは? アークウェブのスタッフが、システム開発についての “個人メモじゃもったいないけどブログ未満”的コンテンツをまとめているWiki。 お役に立てば幸いです。B^)
Ruby on Rails/Rails3関連 (42d)
なんか見つけたらわかることだけでもいいからメモっていくことに。
まとめサイト †
Rails 3 and the Real Secret to High Productivity より。 †
- いきなり分からんが ^^;
In Rails 3, ActionController::Base is built on top of ActionController::Metal ...
うーん、- ActionController::Metalというのが用意される
- それには、callbacks, rendering, layouts, helpersがないがその分高速
- ActionController::BaseはActionController::Metalを継承している?
- ActionController::Baseが、必要に応じて内部的にincludeしてくれるんで、callbacksなどを使わなければActionController::Baseがめちゃ早いってこと? わからん。。
- URL /loginを GETメソッドなら、SessionsController#loginに
- POSTメソッドなら、SessionsController#createに
- そんな感じでルーティングする、ってことかな。URLにこだわりたい人向け?
contrller :sessions do match 'login', do get :new, :as => :login post :create end end - routesで、resourcesの入れ子のとき、こんな風に記述できるらしい。
resources :projects, :controller => :project do resources :attachments resources :participants do :put => :update_all, :on => :collection end resources :companies do resources :people resource :avator end end - XSS対策、デフォルトでサニタイズされるらしい。rawでサニタイズさせないらしい。
<%# => "I'm hacked you good! <sciprt>" %> <%= comment.body %> <%# => "I'm hacked you bad! <script>" %> <%= raw comment.body %>
- link_to_remote -> link_to :remote => true みたいになって、生成されるHTMLにJavaScriptが含まれなくなり、unobtrusive javascript になるらしい
<%= link_to "Delete", @comment, :remote => true, :method => :delete %> <a href="/comments/1" data-remote="true" data-method="delete">Destroy</a>
- このdata-xxx っていうのは、HTML5のdata-xxx アトリビュートらしい(参考: http://zaa.ch/past/2009/5/23/unobtrusive_javascript_in_rails_3/)
My Five Favorite Things About Rails 3 | Engine Yard Blog †
- respond_toが宣言的に記述できるらしい
respond_to :html, :xml # class level def create @user = User.new(params[:user]) flash[:notice] = 'User was successfully created.' if @user.save respond_with(@user) end
- ActiveModelというのができて、ActiveRecordを継承しなくてもバリデーションできるらしい。
class Person include ActiveModel::Validations validates_presence_of :name attr_accessor :name def initialize(name) @name = name end end Person.new.valid? #=> false Person.new.errors #=> {:name => ["cannot be blank"]} # localizable of course Person.new("matz").valid? #=> true
Customizing your scaffold template become easier in Rails3 †
- scaffoldのテンプレートのカスタマイズが楽になるらしい
- RAILS_ROOT/lib/templates/rails/scaffold_controller/controller.rb に
置いておけばそれをテンプレートにしてくれるらしい。 - scaffoldに限らずgeneratorは全部?
Rails 3 の Gem 管理ツール Bundler を使う - ursmの日記 †
- rake gem ではなく、Bundlerという仕組みを使うらしい
- config/environment.rbではなく、Gemfileに読み込みたいgemを書くらしい
- gem bundle でインストールされるらしい
Flash/FeliCa ナイトでFlashによるFeliCaとの通信をする勉強会に参加しました (51d)
勉強会 概要 †
- SDK for FeliCa & Adobe AIR / Adobe Flash勉強会開催のお知らせ(募集終了)
http://blog.felicalauncher.com/sdk_for_air/?p=623> 日時:2010年1月12日(火)18:00開場、18:30スタート、20:30終了予定 > 場所:アドビ システムズ 株式会社 会議室
当日、参加した人数は 7人x6列 = 40人強 くらい。
私は途中から参加です(;;
当日参加できなかった方も、下記に USTREAM があるのですが、最初は音声が入っていなかったようでちょっと分かりづらいかも^^;
http://www.ustream.tv/channel/felica-night
以下、勉強会のメモと、勉強会後にSONYの方に話が聞けたので書いていきます。
- いつものように「タケ:hogehoge」は私のメモです。
Ruby on Rails/RESTfulAuthenticationに権限管理を追加する「role_requirement」プラグイン (51d)
- 認証プラグインとしてデファクトスタンダードな「RESTfulAuthentication」には権限の概念がない
- timcharperさんが作った「role_requirement」プラグインを追加してやれば権限管理ができるようになる!
- 参考: Usage - role_requirement - GitHub http://wiki.github.com/timcharper/role_requirement/usage
インストール †
- 次のコマンドを実行
script/plugin install git://github.com/technoweenie/restful-authentication.git script/plugin install git://github.com/timcharper/role_requirement.git
セットアップ †
- 次のコマンドを実行
./script/generate authenticated user sessions ./script/generate roles Role User
- Userは、authenticatedに指定したモデルクラス名
- Roleは、権限をあらわすモデル名
- 次のファイルが作らる
test/fixtures/users.yml test/fixtures/roles.yml app/models/role.rb lib/role_requirement_system.rb lib/role_requirement_test_helper.rb lib/hijacker.rb db/migrate/20100111002832_create_roles.rb
- テーブルを作る
rake db:migrate
- 次のテーブルができた
- roles
- roles_users
使い方 †
- rolesとusersはhabtmの関係
- rolesには「name」というカラムがあるだけ
- rolesに「admin」「user」などの値を持つレコードをいれておく
- コントローラー内に宣言的に記述
- このコントローラーのすべてのアクションはadmin権限が必要
require_role "admin"
- このコントローラーのindexアクション以外はadmin権限が必要
require_role "admin", :for_all_except => :index
- このコントローラーのindexアクションはadmin権限が必要
require_role "admin", :for => :index
- このコントローラーのすべてのアクションは「admin」と「executive」権限が必要
require_role "admin" require_role "executive"
- このコントローラーのすべてのアクションは「admin」と「executive」権限が必要。ただし、「index」アクションのみ「admin」権限のみでOK
require_role "admin" require_role "executive", :except => [:index]
- このコントローラーのすべてのアクションは「admin」権限が必要。さらに「create」「update」「edit」「destroy」は「executive」権限も必要
require_role "admin" require_role "executive", :only => [:create, :update, :edit, :destroy]
- このコントローラーのすべてのアクションは「admin」権限、または「executive」権限が必要
require_role ["admin", "executive"]
- このコントローラーの「list」アクションと「show」アクション以外はadmin権限が必要
require_role "admin", :except => [:list, :show]
- このコントローラーの「delete」アクションと「edit」アクションのみadmin権限が必要
require_role "admin", :only => [:delete, :edit]
- このコントローラーのすべてのアクションはadmin権限が必要
- current_userに指定されたroleが紐づいていれば、要求されたアクションが実行される
- 紐づいていなければ AuthenticatedSystemのaccess_denied が呼ばれる
常に「admin」というroleの人はなんでも許可されるようにしたい †
- デフォルトでそうなっている
- app/model/user.rbに次のメソッドが追加されるているため
def has_role?(role_in_question) @_list ||= self.roles.collect(&:name) # return true if @_list.include?("admin") #This is the culprit. (@_list.include?(role_in_question.to_s) ) end
tag: Ruby on Rails
Ruby on Rails/PostgresSQLを使う (55d)
- PostGISを使わないといけない案件があり、PostgreSQLを使うことに
- 参考: http://wiki.rubyonrails.org/database-support/postgres
- 以下インストールの流れ
vi config/environment.rb //config.gem "pg" を追加 rake gems:unpack:dependencies rake gems:build vi config/database.yml
- database.ymlの中身はこんな感じ
development: adapter: postgresql database: xxx_development username: xxx password: xxx host: localhost encoding: utf8 template: template0
tag: Ruby on Rails
Ruby on Rails/Railsプロジェクトを作るときに最初にやること (55d)
- 最初にセットアップするときに毎度やることをメモ
- 間違ってるところとか、追加することがあるので随時更新します(wikiなので)
- まずrailsコマンドでrailsの開発ディレクトリを作る
rails myproject cd myproject
- 現バージョンでfreeze
rake rails:freeze:gems
- database.ymlをrename
mv config/database.yml config/database.yml.default
- rspecを追加 (参考: http://wiki.github.com/dchelimsky/rspec/rails)
ruby script/plugin install git://github.com/dchelimsky/rspec.git -r 'refs/tags/X.X.X' ruby script/plugin install git://github.com/dchelimsky/rspec-rails.git -r 'refs/tags/X.X.X' ruby script/generate rspec
- haml,sassを追加
ruby script/plugin install git://github.com/nex3/haml.git ruby script/plugin install git://github.com/dfischer/rspec-haml-scaffold-generator.git
- 国際化
ruby script/plugin install git://github.com/amatsuda/i18n_generators.git ruby script/generate i18n ja
- jqueryを追加
ruby script/plugin install git://github.com/aaronchi/jrails.git
- rcovを追加
vi config/environment.rb # config.gem "rcov" を追加 rake gems:unpack:dependencies ruby script/plugin install git://github.com/commondream/rcov_plugin.git
- 一旦commit
svn import -m 'プロジェクトの初期設定' SVNレポジトリ/trunk/rails
- それをcheckout
svn checkout SVNレポジトリ/trunk/rails
logなどをignoresvn remove log/*.log svn propset svn:ignore "*.log" log svn propset svn:ignore "*" tmp/cache/ svn propset svn:ignore "*" tmp/sessions/ svn propset svn:ignore "*" tmp/sockets/ svn propset svn:ignore "*" tmp/pids/ svn propset svn:ignore "database.yml" config/
- gemをbuild
rake gems:build
tag: Ruby on Rails
Movable Type/MT4 mysql4とMT5 mysql5を同じサーバーで動かすときのmt-config.cgiの書き方 (59d)
概要 †
MT5からMySQL5が対象となったので、開発環境は MT4 MySQL4 と、MT5 MySQL5 の2つのDBを1つのサーバー上で運用するようにしました。
MT4 は既存の通りだったので、インストールする時のDBの指定方法は、
- DB名
- DBホスト (localhost)
- DBユーザー
- パスワード
を入力します。
MT5 の場合は、同じ条件だとMySQL4を使うので変更する必要があります。
その変更方法と、調べ方をまとめました。
MT5 のインストール時に MySQL5 を指定する方法 †
MT5のドキュメントより、
対話式インストールウィザードの実行
http://www.movabletype.jp/documentation/mt5/installation/mt-wizard.html#database
データベースソケット というのを指定するようです。
うんちゃら.sockファイルがどこにあるかを調べる必要があります。
→「Movable Type/MT4 mysql4とMT5 mysql5を同じサーバーで動かすときのmt-config.cgiの書き方」 の続きを読む
MovableType(MT)/スカイアークさんの「MovableTypeエンジニアの夕べ」に参加 (81d)
目次 †
スカイアークさんのMovableTypeエンジニアの夕べに参加しました †
- 昨日(12月9日)スカイアークさんの「MovableTypeエンジニアの夕べ」に参加しました
- (たしか)25名以上の方が参加しており、非常にリラックスしたムードの中、楽しい・非常にためになる・刺激的な発表が続きました
- 発表内容は後日スカイアークさんのサイトで公開されると思います。
- 最後には最優秀MovableTypeエンジニアをクイズで決定し、優勝者には、2万円相当の北海道の名産や、旅行券(いずれか1つ)が選べる、という大奮発な企画も!
- 会の終了後、参加者全員に北海道のお土産が多数配られました。
- 僕がもらったのは↓の銘菓「三方六」。とってもおいしかったです!


- スカイアークさんのMTに対する情熱と、ユーモアと、参加者へのおもてなし、and 北海道への愛を感じたとても楽しい会でした。
- 僕も会が始まる1時間前に↓発表内容をまとめて無理やりしゃべりました ^^;
- 第二回もあるとうれしいな!
A-Formご紹介 †
A-FormのMT4からMT5への対応で必要だった作業 †
- MT5にA-Formをいれてみて動かないところを直す
- で、いれてみたら、全然動かないので、MT4とMT5同時サポートは諦める方針とした
- 以下直したところ↓
- MT5はjQueryが同梱されることになった
- A-FormもjQueryを同梱してるので、MT5側jQueryが呼ばれたりしてうまく動作しない問題が発生
- MT側のjQueryを使うと毎度バージョンがかわって大変なのでAForm内のjQueryを使うことにした
- 「$」 -> 「aform$」 jQuery ->「aform_jQuery」として修正して利用
- AFormが依存している他のJSライブラリも要修正
- openDialog() が使えなくなった
- <a>タグにクラス指定する形に変更
<a class="mt-open-dialog"
- <a>タグにクラス指定する形に変更
- 管理画面のデザインが変わったことにでレイアウトが崩れた
- 地道に修正
- ソースコード内の日本語が文字化け
- UTF8フラグ関係で化けてるらしい
- 言語ファイルにちゃんと追い出す
- jsonの文字化け
- MT本体のJSONライブラリのバージョン変更によるもの
- MT4.25のバージョンアップ時にも苦労した
- どうしても化けるので 日本語をURLエンコードしてからJSONにいれて、JSONから復元するときも、URLでコードを
- MT5ではUTF8フラグをつけたままだと文字化け(よくわからないが)
- 次のようにして対処
- UTF8フラグを取る
utf8::encode($str);
- 文字をコードに変換
- JSONからオブジェクトに変換
- コードを文字に変換
- UTF8フラグ付ける
- UTF8フラグを取る
- メールで文字化け
- mt-config.cgiに DefaultLanguage ja を書いたら解消
- 「ウェブサイト」画面でメニューにAFormのメニューがでない
- 以前の書式
menus => { 'aform:list' => { label => 'List', mode => 'list_aform', condition => sub { AForm::CMS::aform_user_permission() }, }, } - 下記の記述ならでる
menus => { 'aform:list' => { label => 'List', mode => 'list_aform', condition => sub { AForm::CMS::aform_user_permission() }, view => [ "blog", 'website', 'system' ], }, } - view に "user" を追加するとダッシュボードにも出すことができる
- 以前の書式
- CSVエクスポートでSJISに変換されない
- 下記記述だった
print MT::I18N::encode_text($buf, '', 'sjis');
- 次のように修正
print MT::I18N::encode_text($buf, '', 'shift_jis');
- 下記記述だった
会員限定ページ用プラグイン「DynamicAuthentication」のご紹介 †
- ダイナミックパブリッシングの場合のみ動作
- インストールしたらプラグインの設定画面で以下を設定
- auth.cgiのパス
- auth.cgiとはログイン画面を表示するCGIです。DyamicAuthentication内に同梱されており、設置場所も変更可能です。設置した場所に応じてこちらのURLの設定も変更します。
- 認証対象のブログID
- ここで、指定されたブログのページを表示する際、認証チェックが行われるようになります。
- ここで指定したIDのブログはダイナミックパブリッシングである必要があります。
- ユーザー情報が格納されているブログのID
- 認証対象となるアカウント情報は、ここで指定したブログにエントリーとしてあらかじめ追加しておきます。DyamicAuthenticationプラグインは、現状は、ユーザー自身によるユーザー登録には対応しておりません。
- ユーザーIDが格納されているフィールド名
- 上記「ユーザー情報が格納されているブログのID」で指定したブログにここで指定したフィード名のカスタムフィールドを追加し、そこに、認証対象となるユーザーのログインIDを指定します。
- パスワードが格納されているフィールド名
- 上記「ユーザー情報が格納されているブログのID」で指定したブログにここで指定したフィード名のカスタムフィールドを追加し、そこに、認証対象となるユーザーのパスワードを指定します。
- 上記「認証対象のブログID」がパブリッシュするページにアクセスすると、クッキーで認証されたかどうかを判定
- クッキーがなければ、「auth.cgiのパス」で指定されたURLにリダイレクト。下記のようなログイン画面が表示される。(ログイン画面はMTテンプレート「plugins/DynamicAuthentication/tmpl/login.tmpl」にて編集可能)
- auth.cgiで無事認証がとおれば、認証前にアクセスしようとしたページへリダイレクトされる
tags: MovableType
git/第一回勉強会 (84d)
僕自身勉強中なんですが。
第一回git勉強会 †
- 2009/09/08 参加者 志田、竹村さん、大辻さん
- ネタ元: gittutorial(7) http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/gittutorial.html
動画 †
まず概念から †
- 分散レポジトリ管理とは?
MapServer/導入 (103d)
ubuntu 8.04 ltsにて、Rails + PostGIS + MapServer + OpenLayersの環境構築のメモ
PostGISとは †
- PostgreSQLでGISが利用可能にするPostgtreSQLの拡張
- 参考: PostGIS Manual
http://www.ne.jp/asahi/free/hiroro/postgis/manual/ - 空間データをデータベースに保存し、検索したりできる
MapServerとは †
- オープンソースなWebGISサーバー
- http://www.yaskey.cside.tv/mapserver/what.html 参照
- CGIとして動作
- 各プログラミング言語用に、MapScriptという連携用ライブラリがあり、それを通じて連携する -> http://mapserver.org/mapscript/index.html
- GISデータとして参照元として、PostgreSQL + PostGISが利用可能
OpenLayersとは †
- MapServerのようなWebGISサーバーと連携可能なJS用ライブラリらしい
- Google MapsのようなAPIが提供されるらしい
- Google Mapsとも連携可能
Rails + PostGIS + MapServer + OpenLayersとはどんなアーキテクチャか? †
ユーザー OpenLayers Apache + mod_rails Rails MapServer PostGIS
| | | | | |
+----------> | | | | |
+--------------->
+-------------->| | |
+-- mapscript ->| |
+-------------->
<--空間データ--+
|<--- 画像 -----+
|<--------------|
|<-------------+
|<------------
MapServerのインストール †
apt-get install cgi-mapserver
- これで、http://localhost/cgi-bin/mapserv にアクセスすると、
No query information to decode. QUERY_STRING is set, but empty.
と表示される。これ動いてるらしい。 - MapServerのチュートリアル ( http://www.yaskey.cside.tv/mapserver/tutorial/
) を動かしてみる [#w5c05453]
- http://demo.mapserver.org/tutorial/mstutorial_data.zip からデータを取ってくる
cd Webからアクセスできるディレクトリ wget http://demo.mapserver.org/tutorial/mstutorial_data.zip unzip mstutorial_data.zip mv ms4w/apps/tutorial/* .
- 最初のチュートリアルを動かしてみる。
http://www.mapserver.org/tutorial/example1-1.html
- mapfiles/example1-1.map 内の
SHAPEPATH "/ms4w/apps/tutorial/data"
を、解凍して移動してできたdataのパスに変更 - mapservに直接アクセスする
http://ホスト/cgi-bin/mapserv?map=/回答したディレクトリ/mapfiles/example1-1.map&layer=states&mode=map
- これで変な地図が出てきたらOK
PostGISのインストール †
- PostgreSQL と PostGISのインストール
apt-get install postgresql-8.3-postgis
- おれ最前線ねっと - [Ubuntu]Ubuntu8.10でPostGISを使えるようにする。[PostGIS]
http://ore.saizensen.net/archives/160
MapServer + PostGISを試してみる †
- ここが参考になる
[ThinkIT] 第2回:MapServerで地図を表示してみよう (1/3)
http://www.thinkit.co.jp/free/article/0701/9/2/
MapServerのWMS化を試す †
- ここが参考になる
WMS Server ― MapServer 5.4.2 documentation
http://mapserver.org/ogc/wms_server.html
- ENDの数があってなくてこういうエラーがでて嵌った orz
<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?> <!DOCTYPE ServiceExceptionReport SYSTEM "http://schemas.opengis.net/wms/1.1.1/exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1"> <ServiceException code="LayerNotDefined"> msWMSLoadGetMapParams(): WMS server error. Invalid layer(s) given in the LAYERS parameter. </ServiceException> </ServiceExceptionReport>
MapServerのWMSとGoogle Mapsを重ねて出す †
- OpenLayersを使ってみる - Google Maps とMapServerを重ねる:いいタイトルが浮かびません。:So-net blog
http://shigekun.blog.so-net.ne.jp/2009-04-10-1
Rubyからいじる †
- MapScriptのRubyライブラリのインストール
apt-get install libmapscript-ruby1.8
Ruby on Rails/動的条件でhas_oneしEagerLoad (120d)
拙速メモ
- dogxiの犬のランキングの部分ではまったのでメモ
- 犬は 直近10日間のランキング、直近30日間のランキングなど、複数のランキングを持つ
has_many :user_rankings, :dependent => :destroy
- 直近30日のランキングを表示するときは、直近10日間のランキングのインスタンスを生成せずに、直近30日間のrankingだけeager loadしたい
- has_oneのconditionを動的に設定できないか、検討したがうまくいかない
参考: dynamic condition for has_one and eager loading issue - Ruby Forum
http://www.ruby-forum.com/topic/170709
- 解決方法 => has_oneではconditionを指定せず、find時に指定する
has_many :user_rankings, :dependent => :destroy has_one :current_user_ranking, :class_name => 'UserRanking', :foreign_key => :user_id
- 検索時にconditionで絞ってやる
dogs = Dog.find(:include => :current_user_ranking, :conditions => ['user_rankings.ranking_id=?', ranking_id]) - これで dogs[0].current_user_ranking で取れる。
ついでに †
- will_paginate で includeがうまく動作しない、とどこかのブログにあったけど、僕が試したところはうまくいった。バージョンは2.3.6。
HTML5 3Days Tech Talk:HTML5に搭載されるAPIの勉強会 (153d)
HTML5 3Days Tech Talk †
HTML5 3Days Tech Talk の勉強会にいってきました。
2009年10月1日 19:00〜、2009年10月2日 19:00〜 で、私は2日目に行きました。
渋谷のGoogle 東京オフィスです。
目次 †
- HTML5 3Days Tech Talk
- 始まる前に
- では、はじまりはじまり〜
- オフラインWebアプリ
- HTML5について、オフラインアプリに関して。
- アプリケーションキャッシュ
- Web Database
- Web Strage
- Web Workers (ワーカ)
- HTML5時代のwebアプリ
- まとめ
- Canvasチュートリアル
- Canvasとは
- canvasの使い方
- 描画とちらつき
- つかいどこ
- まとめ
始まる前に †
実は HTML5 の仕様はぜんぜんノーチェックのまま行きました^^;
「オフラインアプリケーション」の文字があったので、その辺をチェックしたい感じです。
行く直前に HTML5 日本語化のサイトを確認してからいきました
- HTML5.JP
http://www.html5.jp/trans/
下記のように、なにやらソレっぽいAPIが見つかってわくわくです。
- WAHTWG - HTML5 Working Draft 『4.11 クライアント側のデータベースストレージ』
http://www.html5.jp/trans/whatwg_html5_4_11.html
- WAHTWG - HTML5 Working Draft 『4.10 クライアント側のキー/値ペアーのセッションと永続ストレージ』
http://www.html5.jp/trans/whatwg_html5_4_10.html
ネットワーク/EC2/EBSを使用する (153d)
ネットワーク/EC2
EBSの作成とマウントのメモ
参考:
- http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1663&categoryID=100
- http://d.hatena.ne.jp/rx7/20080825/p1
インスタンスの確認 †
とりあえず鍵ファイルをEXPORTしておく。
# export EC2_CERT=*****************************.pem # export EC2_PRIVATE_KEY=********************************.pem
ec2-describe-instancesを使ってインスタンスのIDやロケーションを確認する。
#ec2-describe-instances RESERVATION r-******** ************ webserver INSTANCE i-******** ami-******** *****************.compute-1.amazonaws.com domU-****************.compute-1.internal running ****** 0 m1.small 2009-07-22T07:34:49+0000 us-east-1d aki-******** ari-******** monitoring-enabled RESERVATION r-******** ************ dbserver INSTANCE i-******** ami-******** ******************.compute-1.amazonaws.com domU-***************.compute-1.internal running ****** 0 m1.small 2009-07-27T07:59:57+0000 us-east-1d aki-******** ari-******** monitoring-disabled
上記 i-******** がインスタンスのID、us-east-1dがロケーションとなる。
JavaScript/IEで「注意識別子、文字列または数がありません。」 (156d)
すごい小さな備忘録
IE8にて
{class: 'big'}
見たいなJSON表記が、IEだと、
識別子、文字列または数がありません。
というエラーが出る。
{'class': 'big'}
とすべき。
同様に
hoge.class = 'big'
みたいのもNG
hoge['class'] = 'big'
ならOK
JavaScript/クラス名を後から取得する方法 (180d)
今までは、
var animal = new Object();
animal.Human = function (name) {
this.name = name;
}
のように、クラス定義&コンストラクタを書いてたけど、
var animal = new Object();
animal.Human = function Human(name) {
this.name = name;
}
var className = animal.Human.toString().
match(/function[ ]+([a-zA-Z0-9_]+)/)[1];
console.log(className); // Human と表示される
のようにすると、
参考: Function コンストラクタか関数宣言か関数式か(関数 - MDC)
関数名は Function の toString メソッド によってシリアライズした時にも 見る事ができます。
とあるように、FunctionのtoString()を使って、後からクラス名がとれる。
ただ、通常は、名前空間オブジェクトも使って、
var animal = new Object();
animal.Human = function (name) {
this.name = name;
}
のようにしてるので、パッケージ名もほしかったら
var animal = new Object();
animal.Human = function aminal_Human(name) {
this.name = name;
}
のように、パッケージはアンダーバー区切りにするなどし、
var packageAndClassName = animal.Human.toString().match(/function[ ]+([a-zA-Z0-9_]+)/)[1];
var packages = packageAndClassName.split('_');
var className = packages.pop();
console.log(packages); // ["animal"] と表示される
console.log(className); // Human と表示される
のようにする必要があるのか。PHP4みたいでダサいが。
ただ、いずれにしても、生成したインスタンスがどのクラスのインスタンスか、わからない。
このままだとせいぜい、クラスメソッドのthisオブジェクトから、現在実行しているクラス名がわかる程度。
インスタンスからクラスのFunctionオブジェクトに参照でもあればいいんだけどな…
- animal.Human.nameで"Human"が取得でき、animal.Humanのインスタンスのconstructorプロパティからanimal.Humanを参照できます。 -- javascripter? 2009-09-07 (月) 16:37:27
Opensocial/mixiアプリの権限 (187d)
徐々に拡充してく
newFetchPersonRequest †
- VIEWER情報: そのアプリをインストールしていないと取得できない。マイミクである必要はない。
- OWNER情報: そのアプリをインストールしていなくても取得できる。マイミクである必要はない。
- ID指定: ビュアーのマイミクなら表示できる。
newFetchPersonAppDataRequest †
- OWNERのデータ: そのアプリをインストールしていなくても取得可能。マイミクである必要はない。
Flash/FlashでJSON形式のデータを読み込む (ActionScript2.0を利用) (192d)
目次 †
概要 †
- FlashでJSONファイルをパースしてオブジェクト型として返してくれるライブラリがあります。
- これを利用したサンプル
- 時間の都合上、下記の制約があります (とりあえず今回はFlashでJSONをパースして出力することだけを行っています)
- ボックスは直近のアークウェブ ブログから取ってきたものですがリンクさせてません
- 読み込むJSONファイルは固定です
- ボックスはドラッグできません
ダウンロード †
- 以下でソースレビューしていきます
- ↓こちらから一式ダウンロードできます
- JSON_FLASH_AS2.0.zip
Apache/mod_rewriteによるクエリつきURLのリダイレクト (198d)
ありがちなTIPSだけど、微妙にはまったので。
http://example.com/index.php?id=xxx ↓ http://hogehoge.com/search?group=xxx
のようにリダイレクトしたい
RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^.*$ http://hogehoge.com/search/?group=%1 [R=301,L]
ネットワーク/EC2/料金を試算してみる (214d)
概算でもいいから料金が知りたい!とよく言われるので。
サーバー構成 †
- Webサーバー2台
- DBサーバー2台
- 1台マスター
- 1台スレーブ
- Elastic Load BalancingでWebサーバーを2台を分散
- CloudWatchで4台を監視
- マスターはEBSをマウントしてそこにデータを登録
料金を見積もってみる †
EC2 †
- インスタンス料金
- 24時間 * 30日 = 720H
- Webサーバー(small) 2台
- DBサーバー(small) 2台
- $0.1/H * 720H * 4台 = $288
- 転送料金
- 画像、JS、CSSその他静的なページ内に埋め込まれる要素は日本国内の共用ホスティングに置くことを想定
- 1ページ 30KB
- 300万PV/月
- データ容量は 900万KB ≒ 86GB
- $0.17/GB * 86G = $15
CloudWatch料金 †
- インスタンス料金
- 24時間 * 30日 = 720H
- $0.015/H * 720H * 4台 = $43.2
Elastic Load Balancing料金 †
- インスタンス料金
- 24時間 * 30日 = 720H
- $0.025/H * 720H = $18
- 転送量
- $0.008/G * 86G = $0.7
EBS †
- データ容量
- 1Gを想定
- $0.1/G * 1 = $0.1
- IOリクエスト
- 300万PV
- 1PVあたり100リクエストとする(適当)
- $0.10/100万リクエスト * 300 = $30
- S3スナップショット
- 7世代保存するとして7Gを想定
- $0.15 * 7 = $1
S3 †
- データ容量
- OSで100GBを想定
- $0.15/GB * 100 = $15
- 転送量
- とくになし
画像用サーバー †
- WebArena SuiteX 30Gを想定
- 3,150/月
DNS †
- WebArena SuiteXのDNSアウトソーシングを想定
- 1ドメインの管理
- 525円/月
合計 †
- EC2インスタンス料金 $288 + $15
- CloudWatch $43.2
- Elastic Load Balancing $18 + $0.7
- EBS $0.1 + $30 + $1
- S3 $15
- 画像サーバー $31.5
- DNS $5.15
----------------------------------------
$447.65
感想 †
- 画像サーバーが分散化されてないので、ちょっと負荷が心配かも
- S3のCloudFrontを使う方法もあるけど、料金がめちゃ高い
- 1ページあたり 400K * 300万PV とすると、4万円ぐらいかかる? 計算はちゃんとやってない
- 早くEC2を日本においてほしい!
ネットワーク/EC2 (214d)
EC2/S3について調べたのでメモとして残しておきます。
クラウドコンピューティングとは? †
- 仮想OS技術 Xenなどによって実現される
- 1台のサーバーを複数のサーバーに見せる
- 障害時に別マシンに簡単に退避できる
- スケーラブル
- 物理制限によらず台数を増やしていける
Amazon EC2/S3とは? †
- S3は「データ」
- EC2はS3のデータを実行する「箱」
- 特徴: 「箱」を簡単に増減できる
- 従来はハウジングでしか実現できなかった
- 従量課金
- 日本からだと転送速度が遅い (1回の通信で0.2秒程度かかったりする)
- 表示し始めがおそい
- 特に画像など
EC2 †
- 借りるサーバーは仮想サーバー
- 毎回IPアドレスが変わるパターンと固定IPのパターンがある
Amazon Web Services Developer Community : Feature Guide: Amazon EC2 Elastic IP Addresses
http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1346
- 増やしたり減らしたりできる
- レンタルサーバー内で動かすOSのファイルやアプリケーションのファイルをイメージとして読み込んで実行する
- サーバー同士がLAN回線で接続可能(ハウンジング状態)
S3 †
- イメージファイルをおきEC2のサーバーを立ち上げるときに、S3上からイメージファイルを指定して立ち上げる
参考 †
ネットワーク/EC2/Ubuntu + Senna(Tritonn) (216d)
はじめに †
- webサーバー郡があり、そこから接続されるDBサーバー用インスタンスを作成する手順についてメモ
- 最終的にはレプリケーションに対応し、マスターはEBSにしたいけど、とりあえず立ち上げまで。
セキュリティグループを作成 †
- セキュリティグループとはファイアウォールの許可設定の集まり
- WebサーバーとかDBサーバーとか、同じセキュリティポリシーのものごとに、セキュリティグループを作り、インスタンスにそのセキュリティグループを割り当てる
- 「xxxxx」というサイトのDBサーバー用セキュリティグループを作成
ec2-add-group xxxxx-db -d 'db-server for xxxxx' GROUP xxxxx-db db-server for xxxxx
- 開発環境からのみxxxxx-webに22番ポートを許可
ec2-authorize xxxxx-db -P tcp -p 22 -s 11.22.33.44/32
- Webサーバーから3306ポートへの許可。Webサーバーのセキュリティグループが「xxxx-web」でユーザーIDが「123456789」であると想定。ユーザーIDは、「ec2-describe-group」で確認できる
ec2-authorize xxxxx-db -P tcp -p 3306 -o xxxxx-web -u 123456789
インスタンスの立ち上げ †
- いつも使っている、http://alestic.com/ の 「Ubuntu 8.04 Hardy」の「server
32-bit」を使うec2-run-instances ami-0772946e -g xxxxx-db --availability-zone us-east-1a -k keyname
- sshでログイン
ssh -i ~/.ssh/xxxxx.id 立ち上がったインスタンスのホスト名
- とりあえず apt-updateする
# apt_update
senna インストール †
- mecabだのなんだのをいれる
# apt-get install gcc g++ libmecab-dev libncurses5-dev mecab mecab-ipadic
- sennaをいれる
cd /usr/local/src/ wget http://jaist.dl.sourceforge.jp/senna/33763/senna-1.1.4.tar.gz tar xvzf senna-1.1.4.tar.gz cd senna-1.1.4 configure --prefix=/usr make make install
tritonnのインストール †
- tritonnのインストール
cd /usr/local/src/ wget http://jaist.dl.sourceforge.jp/tritonn/36449/tritonn-1.0.12-mysql-5.0.67.tar.gz tar xzf tritonn-1.0.12-mysql-5.0.67.tar.gz cd tritonn-1.0.12-mysql-5.0.67 ./configure \ --with-senna \ --with-mecab \ --enable-assembler \ --with-charset=utf8 \ --with-unix-socket-path=/var/lib/mysql/mysql.sock \ --with-extra-charsets=binary,utf8,cp932,eucjpms,ujis,ucs2,latin1,sjis \ --enable-thread-safe-client make make install
- mysqlアカウントの作成
groupadd mysql useradd -g mysql -s /bin/false -d /home/mysql mysql
- mysql.sock 用とmysqlのdata用のディレクトリの作成
install -d -o mysql -g mysql -m 2755 /var/lib/mysql install -d -o mysql -g mysql -m 2750 /var/lib/mysql/data
- mysql_install_dbの実行
./scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql/data/
- my.cnfの作成
cp support-files/my-large.cnf /etc/my.cnf
- /etc/init.d/mysql の作成
cp support-files/mysql.server /etc/init.d/mysql
- 以下を追記
[mysqld] basedir=/usr/local datadir=/var/lib/mysql/data
- 実行権限を与える
chmod 755 /etc/init.d/mysql
- sysv-rc-confをいれて自動機動を設定する
apt-get install sysv-rc-conf sysv-rc-conf mysql on
Webサーバーからの接続を許可する †
- dbを作る
mysql> create database foo;
- mysqlのgrantで。firewallで制御しているので接続元は指定しない。(WebサーバーのIPアドレスなどは動的に変わるので)
mysql> GRANT ALL PRIVILEGES ON foo.* TO foo identified by 'bar';
![[PukiWiki] [PukiWiki]](image/sandbox.gif)





