FrontPage http://www.ark-web.jp/sandbox/wiki/16.html

このページは?

アークウェブのスタッフが、システム開発についての
“個人メモじゃもったいないけどブログ未満”的コンテンツをまとめているWiki。
お役に立てば幸いです。B^)

Ruby on Rails/Rails3関連 (42d)

更新日 2010-01-24

なんか見つけたらわかることだけでもいいからメモっていくことに。

まとめサイト

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! &lt;sciprt&gt;" %>
    <%= 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 でインストールされるらしい

投稿者志田 | パーマリンク

| append.gif

Flash/FeliCa ナイトでFlashによるFeliCaとの通信をする勉強会に参加しました (51d)

更新日 2010-01-14

勉強会 概要

  • 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」は私のメモです。

「Flash/FeliCa ナイトでFlashによるFeliCaとの通信をする勉強会に参加しました」 の続きを読む

投稿者竹村 | パーマリンク

| append.gif

Ruby on Rails/RESTfulAuthenticationに権限管理を追加する「role_requirement」プラグイン (51d)

更新日 2010-01-14
  • 認証プラグインとしてデファクトスタンダードな「RESTfulAuthentication」には権限の概念がない
  • timcharperさんが作った「role_requirement」プラグインを追加してやれば権限管理ができるようになる!

インストール

  • 次のコマンドを実行
    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]
  • 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

投稿者志田 | パーマリンク

| append.gif

Ruby on Rails/PostgresSQLを使う (55d)

更新日 2010-01-10
  • 以下インストールの流れ
    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

投稿者志田 | パーマリンク

| append.gif

Ruby on Rails/Railsプロジェクトを作るときに最初にやること (55d)

更新日 2010-01-10
  • 最初にセットアップするときに毎度やることをメモ
  • 間違ってるところとか、追加することがあるので随時更新します(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などをignore
    svn 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

投稿者志田 | パーマリンク

| append.gif

Movable Type/MT4 mysql4とMT5 mysql5を同じサーバーで動かすときのmt-config.cgiの書き方 (59d)

更新日 2010-01-06

概要

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の書き方」 の続きを読む

投稿者竹村 | パーマリンク

| append.gif

MovableType(MT)/スカイアークさんの「MovableTypeエンジニアの夕べ」に参加 (81d)

更新日 2009-12-15

目次

スカイアークさんのMovableTypeエンジニアの夕べに参加しました

  • 昨日(12月9日)スカイアークさんの「MovableTypeエンジニアの夕べ」に参加しました
  • (たしか)25名以上の方が参加しており、非常にリラックスしたムードの中、楽しい・非常にためになる・刺激的な発表が続きました
    • 発表内容は後日スカイアークさんのサイトで公開されると思います。
  • 最後には最優秀MovableTypeエンジニアをクイズで決定し、優勝者には、2万円相当の北海道の名産や、旅行券(いずれか1つ)が選べる、という大奮発な企画も!
  • 会の終了後、参加者全員に北海道のお土産が多数配られました。
  • 僕がもらったのは↓の銘菓「三方六」。とってもおいしかったです! :D
  • Item3_20080403203335_2L.jpg
  • スカイアークさんの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" 
  • 管理画面のデザインが変わったことにでレイアウトが崩れた
    • 地道に修正
  • ソースコード内の日本語が文字化け
    • UTF8フラグ関係で化けてるらしい
    • 言語ファイルにちゃんと追い出す
  • jsonの文字化け
    • MT本体のJSONライブラリのバージョン変更によるもの
    • MT4.25のバージョンアップ時にも苦労した
    • どうしても化けるので 日本語をURLエンコードしてからJSONにいれて、JSONから復元するときも、URLでコードを
    • MT5ではUTF8フラグをつけたままだと文字化け(よくわからないが)
    • 次のようにして対処
      • UTF8フラグを取る
        utf8::encode($str); 
      • 文字をコードに変換
      • JSONからオブジェクトに変換
      • コードを文字に変換
      • 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」のご紹介

  • ダイナミックパブリッシングの場合のみ動作
  • インストールしたらプラグインの設定画面で以下を設定

skyarc_meeting-20091209-1.png

  • 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」にて編集可能)

skyarc_meeting-20091209-2.png

  • auth.cgiで無事認証がとおれば、認証前にアクセスしようとしたページへリダイレクトされる

tags: MovableType

投稿者志田 | パーマリンク

| append.gif

git/第一回勉強会 (84d)

更新日 2009-12-13

僕自身勉強中なんですが。

第一回git勉強会

動画

まず概念から

  • 分散レポジトリ管理とは?

「git/第一回勉強会」 の続きを読む

投稿者志田 | パーマリンク

| append.gif

MapServer/導入 (103d)

更新日 2009-11-24

ubuntu 8.04 ltsにて、Rails + PostGIS + MapServer + OpenLayersの環境構築のメモ

PostGISとは

MapServerとは

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://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を重ねて出す

Rubyからいじる

  • MapScriptのRubyライブラリのインストール
    apt-get install  libmapscript-ruby1.8

投稿者志田 | パーマリンク

| append.gif

Ruby on Rails/動的条件でhas_oneしEagerLoad (120d)

更新日 2009-11-06

拙速メモ

  • 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。

投稿者志田 | パーマリンク

| append.gif

HTML5 3Days Tech Talk:HTML5に搭載されるAPIの勉強会 (153d)

更新日 2009-10-05

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 日本語化のサイトを確認してからいきました

下記のように、なにやらソレっぽいAPIが見つかってわくわくです。

「HTML5 3Days Tech Talk:HTML5に搭載されるAPIの勉強会」 の続きを読む

投稿者竹村 | パーマリンク

| append.gif

ネットワーク/EC2/EBSを使用する (153d)

更新日 2009-10-04

ネットワーク/EC2
EBSの作成とマウントのメモ

参考:

インスタンスの確認

とりあえず鍵ファイルを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がロケーションとなる。

「ネットワーク/EC2/EBSを使用する」 の続きを読む

投稿者斉藤 | パーマリンク

| append.gif

JavaScript/IEで「注意識別子、文字列または数がありません。」 (156d)

更新日 2009-10-01

すごい小さな備忘録

IE8にて

{class: 'big'}

見たいなJSON表記が、IEだと、

識別子、文字列または数がありません。

というエラーが出る。

{'class': 'big'}

とすべき。

同様に

hoge.class = 'big'

みたいのもNG

hoge['class'] = 'big'

ならOK

投稿者志田 | パーマリンク

| append.gif

JavaScript/クラス名を後から取得する方法 (180d)

更新日 2009-09-07

今までは、

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

投稿者志田 | パーマリンク | コメント(1)

| append.gif

Opensocial/mixiアプリの権限 (187d)

更新日 2009-08-31

徐々に拡充してく

newFetchPersonRequest

  • VIEWER情報: そのアプリをインストールしていないと取得できない。マイミクである必要はない。
  • OWNER情報: そのアプリをインストールしていなくても取得できる。マイミクである必要はない。
  • ID指定: ビュアーのマイミクなら表示できる。

newFetchPersonAppDataRequest

  • OWNERのデータ: そのアプリをインストールしていなくても取得可能。マイミクである必要はない。

投稿者志田 | パーマリンク

| append.gif

Flash/FlashでJSON形式のデータを読み込む (ActionScript2.0を利用) (192d)

更新日 2009-08-26
Flash/FlashでJSON形式のデータを読み込む (ActionScript2.0を利用)

目次

概要

  • 時間の都合上、下記の制約があります (とりあえず今回はFlashでJSONをパースして出力することだけを行っています)
    • ボックスは直近のアークウェブ ブログから取ってきたものですがリンクさせてません
    • 読み込むJSONファイルは固定です
    • ボックスはドラッグできません

ダウンロード

  • 以下でソースレビューしていきます

「Flash/FlashでJSON形式のデータを読み込む (ActionScript2.0を利用)」 の続きを読む

投稿者竹村 | パーマリンク

| append.gif

Apache/mod_rewriteによるクエリつきURLのリダイレクト (198d)

更新日 2009-08-21

ありがちな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]

投稿者志田 | パーマリンク

| append.gif

ネットワーク/EC2/料金を試算してみる (214d)

更新日 2009-08-04

概算でもいいから料金が知りたい!とよく言われるので。

サーバー構成

  • 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を日本においてほしい!

投稿者志田 | パーマリンク

| append.gif

ネットワーク/EC2 (214d)

更新日 2009-08-04

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上からイメージファイルを指定して立ち上げる

参考

tag: ネットワーク, EC2

投稿者志田 | パーマリンク

| append.gif

ネットワーク/EC2/Ubuntu + Senna(Tritonn) (216d)

更新日 2009-08-03

はじめに

  • 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';

投稿者志田、斉藤? | パーマリンク

| append.gif

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-01-30 (水) 18:01:55 (772d)

アークウェブのサービスやソリューションはこちら