ホーム ブログ ページ 62

Ruby On Rails 国際標準化機能 I18n その1

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ども、4日目のrickです。

今回は、Rails2.2以降から標準装備されている国際標準化機能(単語を置き換える機能とでもいうのかな?)について説明します。
なんでその1なのかは、最後を読んでみてね。
ちなみにi18nというのはinternationalizationの頭と後ろのiとn、文字数が18文字というところから来てるらしい。

環境

rails2.2以上

設定

config/environment.rb

# 最下行に追加
I18n.default_locale = “ja”

日本語以外もあるかもなので取った値によってみるページを替える

# app/controllers/application.rb

before_filter :set_locale
def set_locale
I18n.locale = params[:locale]
end

日本語用のページ作成

$cp config/locales/en.yml config/locaes/ja.yml

言葉入力

ja:
genre: ジャンル
models:
book_mark: Booker
attributes:
book_mark:
url: URL
link_name: Booker名

※空白や段落に気をつける

View画面

<%= I18n.t :genre %>

これでジャンルが表示される。

Error文

#config/locales/ja.yml

ja:
site_title: サイトタイトル
activerecord:
errors:
template:
header: “{{model}}でエラーが発生しました。”
body: 以下のエラー内容を確認してください。
messages:
blank: が空白です。
models:
entry: エントリー
attributes:
entry:
title: タイトル
body: 本文

こんな感じにするとデフォルトのエラー表示の英語のところも日本語になる。

以上が、I18nの説明です。
さてなぜその1なのか?という答えは、もちろん次回その2があるからです。
その内容は、はっきり言ってそっちを先に教えろよって感じかもしれませんが、
今回のは、勉強がてら見てもらえると嬉しいです。
もちろん次回のも見てほしいですけどね。

んでわぁまた。

Google Analyticsで同じURLのページの遷移のデータを取得する方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Google Analtyicsで同じURLの遷移のデータを取得する方法

アクセス解析チーム中林です。

Google Analyticsを使用していてコンバージョン測定をする際に

目標到達プロセスを設定する際にページのステップのURLが同じとなっていて

プロセスを取得することができないなんてことがまれにあります。

今日はそういったURLが同じページ遷移が有った場合に

Google Analyticsでデータを取得する方法です。

ページの遷移が全て同じURLで有る場合

たとえば、CGIページとか、

レンタルカートの買い物かごから購入までのステップに同じURLがあったりして、

Google Analyticsでデータが正しく取得できないなんてことが有ったりします。

同じURLのページ遷移

 このような場合、GoogleAnalyticsのデフォルトのままでは

同じURLでの遷移回数が増える度に、PV数が増加してしまうことになり、

正しい数値が取れなくなってしまうし、

コンバージョンにおける目標到達プロセスを設定する場合に非常に困ります。

このような場合にGoogleAnalyticsでは仮想的にURLをページに持たせて、

データを取得することができます。

Google Analyticsで仮想的にURLを持たせてデータを取得する方法

GoogleAnalyticsで仮想的にURLを持たせる場合には

onload関数を使って仮想的にURLを呼び出しす必要があります。

先ほどの全て同じURLのページの箇所を下記のように仮想的にURLとして持たせてみます。

買い物かご ⇒/kago.html

入力画面  ⇒/edit.html

入力確認  ⇒/confirm.html

違うURLのページステップ

わかりやすく今回は、タグにOnLoadイベントを埋め込んでみます。

買い物かごページの場合

 onLoad=”pageTracker._trackPageview(‘/kago.html’);”>

入力画面ページの場合

 onLoad=”pageTracker._trackPageview(‘/edit.html’);”>

入力確認ページの

 onLoad=”pageTracker._trackPageview(‘/confirm.html’);”>

それぞれページの中に埋めこんであげることで、

仮想的にページのURLを指定することができます。一点注意する点として、

_trackPageviewの関数を使用して仮想URLを持たせる場合は、

GoogleAnalyticsのトラッキングコードは、

ソースコード上_trackPageviewの関数より上に持ってこなければいけないので注意してください。

以上、Google Analtyicsで同じURLの遷移のデータを取得する方法でした。

◇バックナンバー

Google analyticsでPDFファイルをカウントする方法

◇その他アクセス解析関連記事

・Google Analyticsで複数ドメインのサイトを計測する方法

・Yahoo! Web Analytics とは? ~レポート機能を解説(日本語)~

・SEOって何ですか

KBMJ GoogleAnalyticsのスクールも開催中です!

Google Analyticsスクールでは、セミナーやブログではお伝えしきれない細かな設定方法やアクセス解析手法について、徹底的に解説いたします。 少人数のスクール形式だから、状況やレベルに合わせてインタラクティブに、より詳しく、実用的な活用術を徹底指導いたします!

Ruby On Rails エラーの英文を日本語に変換するプラグイン Ruby-GetText-Package

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ども、3日連続(休日はなしね)投稿中rickです。

今回は、Validateの英文を日本語にするプラグインの解説です。

これは、rails2.1以前まで使用可能です。
gettext2.0.0は、rails2.3.2対応してるらしいですが、バグあるらしいです。

gettext1.9.3はrails1.2.6に対応してないので、gettext1.90.0を入れるのがいいと思います。

今回の環境説明

Ruby 1.8.6
Rails 1.2.6
gettext 1.90.0
MySql 6.0.9-alpha

install

$gem install gettext –version=1.90.0

事前準備

htmlのヘッダーに

<meta http-equiv=”content-type” content=”text/html;charset=UTF-8″ />
database.ymlに

encoding: utf8

config/enviroments.rbに

$KCODE = ‘u’
require ‘jcode’

はやっておきましょう。
日本語表示・入力だよ〜っていう宣言です。

設定

config/enviroments.rbに

require ‘gettext/rails’

を加えます。
app/controllers/application.rbに

class ApplicationController < ActionController::Base
 init_gettext “test”
 省略
end

を加えます。
全ての場所で設定ファイルを読込めるようにしてるだけですね。
“test”の部分は後から出てくるpoファイルの名前なので何でもいいです。
次に、app上のRakefileに、

desc “Update pot/po files.”
task :updatepo do
require ‘gettext_rails/tools’
GetText.update_pofiles(“test”, #テキストドメイン名(init_gettextで使用した名前)
Dir.glob(“{app,config,components,lib}/**/*.{rb,erb,rjs}”), #ターゲットとなるファイル
“test 1.0.0” #アプリケーションのバージョン
)
end

desc “Create mo-files”
task :makemo do
require ‘gettext_rails/tools’
GetText.create_mofiles
end

を加えます。
そして

$rake updatepo
$make po/ja
cp po/test.pot po/ja/test.po

します。
次にtest.poの編集

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE’S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid “”
msgstr “”
“Project-Id-Version: test 1.0.0\n”
“POT-Creation-Date: 2009-04-17 09:27+0900\n”
“PO-Revision-Date: 2009-04-17 09:27+0900\n”
“Last-Translator: FULL NAME \n”
“Language-Team: LANGUAGE \n”
“MIME-Version: 1.0\n”
“Content-Type: text/plain; charset=UTF-8\n”
“Content-Transfer-Encoding: 8bit\n”
“Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n”

もともとこんなんが入っていますので、一番下に

#: app/models/test.rb
msgit “Test|title”
msgstr “タイトル”

というように入力します。
そして

$rake makemo

を実行すると

local/ja/LC_MESSAGES/test.mo

というファイルが作成されます。

実行

あとは起動してエラーを出すだけです。
私の場合ここで
~/Ruby/Gems/1.8/gems/gettext-1.90.0/lib/gettext/iconv.rb

if __FILE__ == $0
puts Iconv.iconv(“EUC-JP”, “UTF-8”, “ほげ”).join
begin
puts Iconv.iconv(“EUC-JP”, “EUC-JP”, “ほげ”).join
rescue Iconv::Failure
puts $!
puts $!.class
end
end

とかがsyntax errorを起こしていたんですが、特に必要なさそうだったのでコメントアウトしときました。
__FILE__は”~/Ruby/Gems/1.8/gems/gettext-1.90.0/lib/gettext/iconv.rb”で、
$0は、”script/server”なんですがねぇ。。
なんで通るんでしょうかねぇ。

最後は、自分じゃよくわらからないですが、
以上がRuby-GetText-Packageの解説でした〜。

でわまた。

Ruby On Rails ログインのプラグイン restful_authentication

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちわ〜。

2日続けてのプラグイン紹介で、今回はログインのプラグインの紹介です。
前はacts_as_authenticationというプラグインがよく使われてたらいいんですが、
サポートが打ち切られたらしくrails2.0系からは、restful_authenticationを代わりに使ってほしいそうです。

とゆうわけで解説の始まり始まり〜。。。。

restful_authenticationのインストール

$ruby script/plugin http://svn.techno-weenie.net/projects/plugins/restful_authentication –force

acts_as_state_machineのインストール

$./script/plugin install http://elitists.textdriven.com/svn/plugins
このプラグインは、会員の状態管理などを行ってくれる。

コントローラーなど作成

$ ./script/generate authenticated user sessions –include-activation –stateful

設定

config/rootes.rb
# 次の4行を書く。1行目はactivate(本会員)にするために必要、

map.activate ‘/activate/:activation_code’, :controller => ‘users’, :action => ‘activate’, :activation_code => nil
map.signup ‘/signup’, :controller => ‘users’, :action => ‘new’
map.login ‘/login’, :controller => ‘sessions’, :action => ‘new’
map.logout ‘/logout’, :controller => ‘sessions’, :action => ‘destroy’
controllers/sessions_controller.rb

# Be sure to include AuthenticationSystem in Application Controller instead
include AuthenticatedSystem

この2行を削除してcontrollers/application_controller.rbにコピーする。

localhost:3000/signupなどで仮会員を作成その後rootへ戻るのでどこかで本会員へするためuser/activateへ飛ばさなくてはならない、
飛ばすときに仮登録したuserのactivation_codeを持たせてあげないと反応しない、これではじめてloginが可能となる。

acts_as_state_machine

作成されたusers_controllerの中に今の説明中に説明していないsuspend,unsuspend,destroy,purgeメソッドが存在する。
これは、acts_as_state_machineの機能で、model/user.rbの20行以降で定義されている。

acts_as_state_machine :initial => :pending
state :passive
state :pending, :enter => :make_activation_code
state :active, :enter => :do_activate
state :suspended
state :deleted, :enter => :do_delete

これは、初期状態のときstate :pendingへ移行して:enter => :make_activation_codeから

def make_activation_code
self.deleted_at = nil
self.activation_code = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
end

こいつを呼び出している、これは、仮登録状態のためのキーを発行している このキーを受け取ってactivateへ行くと本登録をしてくれる。それと同時に、仮登録のキーを

def do_activate
@activated = true
self.activated_at = Time.now.utc
self.deleted_at = self.activation_code = nil
end

これで削除している。
suspend,unsuspendは、状態変化ぐらいかな?
あ、状態変化は、userテーブルのsateカラムが変化してます。
destroyは、状態変化とdeletd_atカラムに現在時間を入れています。
purgeは、物理削除です。ちなみにpurgeは追放とかいう意味です。

これがrestful_authenticationの一通りの流れです。仮登録のときメール飛ばして返ってきたのを本登録にするとかもいろいろできるらしいです。(今回は、そこまでやってません)

というわけで終しまいです。

Google Analyticsで複数ドメインのサイトを計測する方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Google Analyticsで複数ドメインのサイトを計測する方法

こんにちは。アクセス解析チームの大山です。
春を楽しむ間もなく、夏を予感させる暖かい日が続いていますね。

今日は、2つのドメインを持つサイトをGoogle Analyticsに設定する方法についてご説明します

Google Analyticsで2つのドメイン構成のサイトデータを取得しよう

通常、ドメイン数が1つの場合は、Google Analyticsより発行されたトラッキングコードをコピーし、
トラッキングする各ページの タグの直前に貼り付ければ完了します。

2つのドメインを持つサイトをトラッキングするには、
通常のトラッキングコードの貼り付け作業に2つのポイントが加わります。

  1. 全てのトラッキングコードに下記の命令を追加します。
    1. トラッキングcookiesのドメイン特定
    2. 2ドメイン間のリンクを有効化
  2. 2つのドメイン間のリンク全てのリンクに_link関数を加えます。

◎Google Analyticsで複数ドメインのサイトを計測のポイント◎
2の_link関数を有効にするには、2よりも上に1を配置する必要があります。
</head>タグの直前の配置することで有効となります。
※</head>タグ直前の配置は_link関数を持つトラッキングコードのみ有効です。

複数のドメイン構成のサイトを登録する際に注意するポイント

複数のドメイン用のトラッキングコードを埋め込んでいない場合でも
(通常のトラッキングコードを複数のドメインを持つサイトに埋め込んだ場合でも)
そのサイトの数値はGoogle Analyticsに記録されます。
しかし、取得された数値は異常値であり、少なくとも下記の項目に影響があると考えられます。

  1. セッション
  2. 一人当たりのPV数
  3. 直帰率
  4. 参照元

Google Analytics上で数値がトラッキングされているからといって安心はせきません。
上記の項目が異常値である理由と確認方法をご説明しましょう。

  1. セッションが2重に取得される
  2. 一人当たりのPV数が少ない
  3. 直帰率が高い
  4. 参照元に同プロファイルのサイトがトラッキングされる

あなたのサイトには思い当たる部分はありませんでしたか?
上記のような間違ったデータで施策を打たないように、まずは正しい設定を心がけましょう。

以上、Google Analyticsで2つのドメインを正しく取得する方法でした。

■バックナンバー・‥‥━━★

■アクセス解析関連記事・‥‥━━★

vimの配色の設定をしてみる

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

最近vimを使っています。
とりあえず見た目を格好良くしたかったので、配色を変えてみることにしました

環境:ubuntu 8.10
vimエディタ GVim 7.1.314

ちなみに現在の配色はこんな感じ。すごくデフォルトです。

今回はすでに用意されているカラースキーマを利用することにします。
カラースキーマの場所
~/vimfiles/colors

ホームディレクトリにvimfilesディレクトリがない場合は作成します。
mkdir vimfiles
mkdir vimfiles/colors

ウェブで配布されているものもしくは、/usr/share/vim/vim71/colorsにあるカラースキーマを
~/vimfiles/colors内にコピーします。

今回は、巷で人気のzenburnを設定します。

cd ~/vimfiles/colors/
wget http://slinky.imukuppi.org/zenburn/zenburn.vim

ファイルを配置したらvimの設定ファイルを開きます。
gvim ~/.vimrc

設定ファイルの一番下に以下を追加します。
colorscheme zenburn
色が変わりました。簡単です。

カラースキーマを変更するといろいろ変わります。

でもこれだけでは味気ないので、
今度ちょっと手を加えてみようと思います。

Ruby On Rails 論理削除のプラグインacts_as_paranoid

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちわ〜。
今回はacts_as_paranoidというRailsのプラグインについてお話します。

以前x5rさんがRuby on Railsでacts_as_paranoidを使い倒すという記事を書いてまして、それをみて今回大体おこなったので基本はこちらを見ていただければ大体わかると思います。
私の記事では、その記事を見てできなかったところや、こんな動作してるなどを少しメモ程度に書いてあります。

まず、今回のrailsのversionは、1.2.6です。

とりあえずinstall前までは、x5rさんの記事と同じです。
installのコマンドをたたいてもinstallされなかったので、

ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_paranoid –force
でinstallする事ができました。
このプラグインを使う事で、find文を行うときに常に

SELECT ・・・ FROM ・・・ WHERE
deleted_at IS NOT NULL OR deleted_at > time.now ・・・
とうように条件がついてくるようになります。
この条件を外すために、:with_deletedオプションが有る訳ですね。

次は、ページネートの拡張です。
これは、自分が間違えただけだったのですが、pagination_extend.rbの内容をx5rさんの記事を参考に書いて作動させたところ
・かえってくる値が配列じゃない
・取得する情報が1つしかない
なんていう状態になりました。
これは、本当に初歩的なミスで、

def paginator_and_collection_for_with_deleted(collection_id, options) #:nodoc:
klass = options[:class_name].constantize
page = params[options[:parameter]]
count = count_collection_for_pagination_with_deleted(klass, options)
paginator = Paginator.new(self, count, options[:per_page], page)
collection = find_collection_for_pagination_with_deleted(klass, options, paginator)
return paginator, collection
end

return paginator, collection
を書き忘れていただけでした。。。値返さないじゃんっていう。。。。

少し思った問題点としては、
・ページ読込み時に関係ない所でもinitファイルが読込まれるので、全体的に動作が遅くなる。
・多対多のMapテーブルでは、動作しないので物理削除のまま。
といったところがあげられる。
他にも結構バグが多いといもいわれているので、大きくなったプロジェクトを後から・・・というならしょうがないかもしれませんが、最初からこのプラグインを使って論理削除を行うということは、あまりしたくはないですね。

・・・installの事しか書いてないじゃん。。。
まぁ、今回は以上でっす。

Google analyticsでPDFファイルをカウントする方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Google AnalyticsでPDFファイルのカウントをする方法

KBMJアクセス解析チームの中林です。

今日はgoogle analyticsでトラッキングコードが埋め込めない

PDFファイルなどのダウンロード数をカウントする方法についてご説明します。

Google Analyticsでアクセス数をカウントする場合

サイトのページ内にGoogle Analyticsのトラッキングコードを埋め込まなければいけません。

しかし、PDFなどファイルについては、トラッキングコードを埋め込むことが出来ないため

Google Analyticsでダウンロード数を取得するためには、

デフォルトの設定では取得できないため、ひとつ工夫が必要になります。

それではKBMJのサイトを例に説明します。

下記はKBMJのプレスリリースです。

PDFファイルダウンロード

リンクの部分については、Google Analyticsのタグを埋め込めば

もちろんセッション数やPV数を取得することはできるのですが

上記の赤枠箇所のPDFについては通常のままでは

Google Analyticsでデータを取得することはできません。

何回ダウンロードされたかをGoogleAnalytics上で取得するためには、

リンクそのものに修正が必要です。

現状のPDFファイルへのリンクは下記のものです。

 <a href="./../index/community.pdf" target="_blank">PDF 45 KBa>
 カウントを取得するためには、下記のようにリンクに色がついている部分を追加します。
■トラッキングタグにurchin.jsを使用している場合
 <a href="./../index/community.pdf" target="_blank" onclick="javascript:urchinTracker('/download/community');" >PDF 45 KBa> 
■トラッキングタグにga.jsを使用している場合
  <a href="./../index/community.pdf" target="_blank" onclick="javascript:pageTracker._trackPageview('/download/community');">PDF 45 KBa>
※赤字の部分は任意の文字列を記述してください(URLを仮想的に持たせます。) 
 【注意点】
このように_trackPageview関数を使用する場合、
トラッキングコード内に含まれる 下記の関数を_trackPageview関数よりも
ソースコードで上に記述しなければいけません。
var pageTracker = _gat._getTracker("UA-xxxxxx-x");  
pageTracker._initData();  
はやい話が今回の例でいうと、PDFダウンロードのリンクよりも
上にトラッキングコードを貼り付けなければいけないわけです。
データが反映されたあとGoogleAnalytics上で「上位のコンテンツ」から先ほど記述した
PDFダウンロードのリンクの_trackPageviewに設定した任意の文字列を検索すれば
数値が取得されていると思います。
以上GoogleAnalyticsでPDFファイルのダウンロード数をカウントする方法でした。 
 ■バックナンバー
 GoogleAnalyticsの「サイト上のデータを表示する」機能でクリック率をみる

■その他アクセス解析担当の記事 【最新の3記事】

Yahoo! Web Analytics とは? ~レポート機能を解説(日本語)~

アクセス解析で見るユーザビリティ -目的のコンテンツへの道筋を整えよう!-

SEOって何ですか?

KBMJ GoogleAnalyticsのスクールも開催中です!

Google Analyticsスクールでは、セミナーやブログではお伝えしきれない細かな設定方法やアクセス解析手法について、徹底的に解説いたします。 少人数のスクール形式だから、状況やレベルに合わせてインタラクティブに、より詳しく、実用的な活用術を徹底指導いたします!

resource_controller で RESTful, DRY 実践

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Rails 2.0 からの RESTful 指向により、ほとんどのコントローラは index, show, new, create, edit, update, destroy の基本的なアクションを持ちます。
コントローラはモデルとビューの中継ぎをするためのコードを持ち、ビジネスロジックはモデルに持つという思想を実践すれば、コントローラのコードはほとんど同じコードになります。
このコントローラの状況は、Rails の DRY (Don’t Repeat Yourself)の法則に反することになります。
そこで今回紹介する resource_controller の出番です。

script/generate scaffold post で作成したコントローラは以下のようになります。

class PostsController < ApplicationController
  # GET /posts
  # GET /posts.xml
  def index
    @posts = Post.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
  end

  # GET /posts/1
  # GET /posts/1.xml
  def show
    @post = Post.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @post }
    end
  end

  # GET /posts/new
  # GET /posts/new.xml
  def new
    @post = Post.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @post }
    end
  end

  # GET /posts/1/edit
  def edit
    @post = Post.find(params[:id])
  end

  # POST /posts
  # POST /posts.xml
  def create
    @post = Post.new(params[:post])

    respond_to do |format|
      if @post.save
        flash[:notice] = 'Post was successfully created.'
        format.html { redirect_to(@post) }
        format.xml  { render :xml => @post, :status => :created, :location => @post }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /posts/1
  # PUT /posts/1.xml
  def update
    @post = Post.find(params[:id])

    respond_to do |format|
      if @post.update_attributes(params[:post])
        flash[:notice] = 'Post was successfully updated.'
        format.html { redirect_to(@post) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /posts/1
  # DELETE /posts/1.xml
  def destroy
    @post = Post.find(params[:id])
    @post.destroy

    respond_to do |format|
      format.html { redirect_to(posts_url) }
      format.xml  { head :ok }
    end
  end
end

resource_controller を使えば、上記のコードは次の様になります。

class PostsController < ApplicationController
  resource_controller
end

また、/post/1/comments の様なネストしたコントローラにも対応しています。

class CommentsController < ApplicationController
  resource_controller
  belongs_to :post
end

belongs_to を使えば、/post/1/comments の様な URL で Comments コントローラにアクセスした場合に、自動的に @post インスタンス変数に親オブジェクトを生成してくれたりします。

resource_controller プラグインをインストールするには以下のコマンドを実行します。

script/plugin install git://github.com/giraffesoft/resource_controller.git

こちらのブログでさらに詳細が書かれていますので、興味ある人はご覧下さい。
resource_controller で RESTful, DRY な生活を送りましょう!

Amazon の電子書籍リーダー「Kindle 2」を使ってみた

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。

KBMJの佐藤です。

Amazon の電子書籍リーダー「Kindle 2」を触る機会があったので、今回はその感想を書いてみたいと思います。

http://farm4.static.flickr.com/3548/3425035461_98f67338bd.jpg

Amazon Kindle 2 とは

Amazon Kindle 2 は、米 Amazon が販売している電子書籍リーダーです。

Kindle 最大の特徴は、EV-DOを利用した、PCを介する必要のない電子書籍のダウンロード機能。携帯会社との契約は不要というのが素晴らしいです。つまり本を読みたくなっても書店に行かずに購入・読書が可能ということです。まさにユビキタスなサービス。Kindle向けの書籍だけでなく、Wikipediaや新聞、雑誌、ブログなどを購読することも可能なようです。

ハードウェアキーボードも装備されており、書籍の検索やノートの入力などにも使えます。

端末の省電力設計も特徴で、バッテリーが非常に長持ちするようです。無線機能を有効にした状態でも、1回の充電で4,5日は使用可能とのこと。「いつ充電したのか?」などを気にしなくてもよいくらいに電池がもつということで、非常に好感がもてます。

359ドルと、端末の値段が高いのが残念。

画面は6インチ。解像度は600×800ピクセルと、かなりいい感じです。iPhoneにPDFを転送して読むと画面が狭くてかなり悲しいことになるので、電子書籍リーダーとしてはこれくらい広い画面がないと使う気になりません。

2Gバイトのメモリを搭載し、1500タイトル以上の電子ブックを保存できるとのこと。音楽と違って書籍をそんなに保存できてもなあ、とは思いますが、読書の虫にとっては移動中に読む本が無くなるとやることがなくなってしまいますし、かといって複数冊の本を持ち歩くと荷物になりますので、この軽いデバイス1つに集約できるのは嬉しいかも。

Kindleはまだ日本では販売されていないようですが、Kindle本体から電子書籍を直接購入できるなど、ユーザー体験の面で今までの電子書籍リーダーとは一線を画する製品であると思います。

アップルのiPodのように、垂直統合の良さが際だった、ユーザー体験を非常に重視したサービス・製品だと思います。

従来機との比較

従来機に比べてかなり薄くなっています。以下、比較写真。

http://farm4.static.flickr.com/3310/3425035603_031ccbec0f.jpg
http://farm4.static.flickr.com/3570/3425844618_8b1aa257fe.jpg

厚みが0.91センチ。相当薄い。重量は289グラム。前モデルよりも軽くなったようですが、片手で気軽に読書を楽しむにはまだまだ重いという印象。キーボード部分をばっさりと切り捨てて、もっと軽くしてほしいですね。そういった思い切りが欲しいです。

新モデルではページをめくるためのボタンが両サイドに配置されたのですが、これが非常に良いです。デジタルガジェットを使っているとその形状によって使い方が縛られるという面があるかと思うのですが、両サイドにめくるボタンがついたことにより、そこが改善されていると感じます。

iPod touchとの比較

http://farm4.static.flickr.com/3551/3425844316_74898335f2.jpg
http://farm4.static.flickr.com/3559/3425036205_8c857d85a7.jpg

新型kindleとiPod touchとの厚さ比較。新型はかなり薄いです。バッグに入れておいてもまったく気にならないレベル。

現在「Kindle for iPhone」というアプリが利用可能となっていますが、小説などならともかく、技術書などを読むのは画面の大きさの問題もあってかなり厳しいようです。

まとめ

やはり既存の紙媒体のコンテンツであれば、画面の大きなデバイスで楽しみたいものです。というわけで、Kindleには非常に期待しているのですが、デバイスの価格が高かったり日本で買えなかったり非常に残念ですね。日本のメーカーが電子書籍リーダーを作ると様々な事情で非常に高機能かつ高価なデバイスになってしまうので、やはりKindleのように思い切った設計のデバイスを出して欲しいものです。

iPodの大ヒットを見ても分かるように、これからの一般消費者に向けたサービスではアップル的な「垂直統合」が非常に重要だと思います。あのマイクロソフトも音楽配信においては「Plays For Sure」による水平統合がうまくいかず、「Zune」などによる垂直統合へと方針を変えたようです。デバイス製品単体だけではなく、その周囲にあるコンテンツ・ネットサービス・実店舗などを一体化したユーザー体験を提供していく企業こそ、今後のデジタルライフスタイル時代では消費者に受け入れられるのだと思います。そういう意味で、Kindleというデバイスが出てきたことは非常に興味深いと考えます。

Special Thanks : 三浦印刷株式会社 代表取締役社長 三浦久司様、下町めぐり.jp

Google analyticsの「サイトのデータを表示する」機能でページのクリック率をみる

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

アクセスログ解析チーム中林です。

今日はGoogle Analyticsの機能紹介ということで

サイト上のデータ表示」でページごとのリンクのクリック率をみる機能をご紹介したいと思います。

◆サイト上のデータ表示 

まずGoogleAnalyticsにログインして、レポートを表示します。

GoogleAnalyticsレポートサマリー

次に、左ナビの「コンテンツ」をクリックしてください

Google Analyticsコンテンツサマリー

「コンテンツ」の中に、「サイト上のデータ表示」というのがでてきます。

それをクリックしてください。

するとレポート表示しているサイトが表示され、

オーバーレイでリンクのクリック率が表示されます。

GoogleAnalyticsサイト上のデータ表示

 リンクの一つひとつにパーセントとメーターが表示されました。

 これがクリック率になります。

他にもコンバージョン設定をしている場合は、

コンバージョン率や、コンバージョンバリューを表示することができます。

・サイトのどの場所がクリックされているか

・どのコンテンツが人気あるのか

・どのコンテンツからコンバージョンに達しているのか

といったことが視覚的にみることができるので、

サイトのなかの配置などを変更する時に有効なデータになると思います。

注意点としては、

例えばヘッダーとフッターにTOPページへのリンクが有り

リンク先のURLが

htt://www.dorouby.kbmj.com/index.html

とヘッダー、フッターで同じであった場合

「サイト上のデータ表示」の結果で出てくるクリック数は

ヘッダーとフッターのTOPページのリンクの数は同じ数となります。

※あくまでクリック前のページから、URLに対しての通信があった回数(トラッキングコードが読み込まれた回数)を算出しているため、

もしもどうしても、ヘッダーとフッターでクリック数を分けたいという場合は、

http://www.dorouby.kbmj.com/index.html?header

http://www.dorouby.kbmj.com/index.html?footer

のようになんらかのパラメーターをつけることで通信数を分けることができます。

以上、本日は、Google analyticsでページのクリック数・率を表示する方法でした。

■バックナンバー

 google analyticsで使う アクセスログ解析用語 その2

■その他アクセス解析担当の記事 【最新の3記事】

Yahoo! Web Analytics とは? ~レポート機能を解説(日本語)~

アクセス解析で見るユーザビリティ -目的のコンテンツへの道筋を整えよう!-

SEOって何ですか?

KBMJ GoogleAnalyticsのスクールも開催中です!


Google Analyticsスクールでは、セミナーやブログではお伝えしきれない細かな設定方法やアクセス解析手法について、徹底的に解説いたします。
少人数のスクール形式だから、状況やレベルに合わせてインタラクティブに、より詳しく、実用的な活用術を徹底指導いたします!

QRコード【読取】

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。みわです。ぽつぽつと、書いていきます。

今回は、「QRコードの読み取り~余白の重要性」についてです。

QRコードを携帯電話の画面に表示させ、それを読み取らせる・・・というサービスってありますよね。 最近増えてきたんじゃないかと思います。

QRコードにはいろいろとお約束があるのですが、読み取りに関するお約束を1つ紹介します。

QRコードは、あの正方形のコードの周りに「余白」があります。

これは、QRコード生成時に指定します (フリーのツールですと、デフォルトで設定されていて変更できない場合があるかもしれませんね) 。

この余白が「最低4px」必要です。 たま~に0pxでも大丈夫なときがありますけど・・・(^^;

4px以上の余白がないと、読み取りできません。

ですから、印刷されているQRコードも周りに若干余白がありますよね。

ということで、「QRコードには余白が必要だ」というお話でした。

rubyでのhttpリクエスト

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Rubyのnet/httpライブラリとuriライブラリを用いてヘッダーカスタマイズ、読み込み時間制限を設定できるhttpリクエスト関数を作成してみたいと思います。

今回作成するもの

rubyでヘッダーカスタマイズ、読み込み時間制限を設定できるhttpリクエスト関数を作成する

今回使用するrubyライブラリ一覧

uri は rubyでURI を表す文字列から URI オブジェクトを生成することができるライブラリ

 net/httpはrubyでHTTP リクエストすることができるライブラリ

rubyライブラリuriの使用例

irb(main):001:0> require ‘uri’

=> true

irb(main):006:0> uri = URI.parse(‘http://doruby.kbmj.com/ruby_on_rails/’)

=> #<uri::http:0xb7f655b0 url:http://doruby.kbmj.com/ruby_on_rails/>

irb(main):007:0> uri.host

=> “doruby.kbmj.com”

irb(main):008:0> uri.path

=> “/ruby_on_rails/”

irb(main):009:0> uri.port

=> 80

作成したrubyのヘッダーカスタマイズ、読み込み時間制限を設定できるhttpリクエスト関数

require ‘uri’

require ‘net/http’

module Net

 class HTTP

  def HTTP.get_with_options(uri,open_timeout=nil,read_timeout=nil,headers=nil,options=nil)

   uri = URI.parse(uri) if uri.respond_to? :to_str

   begin

    start(uri.host,uri.port) do |http|

     http.open_timeout= open_timeout if open_timeout

     http.read_timeout= read_timeout if read_timeout

     path_query = uri.path + (uri.query ? ( ‘?’ + uri.query) : ”)

     res = http.get(uri.path,headers)

     return res

    end

   rescue Exception => e

    puts e

    return false

   end

  end

 end

end

作成関数使用例

http://doruby.kbmj.com/yy_on_railsに5秒で読み込みが完了しなければERRORにしたいとき

res = Net::HTTP.get_with_options(‘http://doruby.kbmj.com/yy_on_rails’,nil,5,{‘Accept-Language’ => ‘jp’})

性能・負荷テストツール「JMeter」 導入編

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

はじめまして!

そろそろ2年目エンジニアのDaokaです。

今回は、私が性能・負荷テストを行うときによく使うJMeterというツールを紹介したいと思います。

JMeterとは?

jakartaプロジェクトで作られている、Webアプリ向けの性能・負荷テストツールです。無償でありながら、かなり高性能で複雑なテストシナリオを作成・実行することができます。

また、Javaの実行環境があればどのWindows/Mac/LinuxなどOSを問わず導入することができます。

JMeterでできること

無償で使える性能測定ツールとしてApache Benchというツールもありますが、JMeterはApache Benchより複雑なテストを行うことが可能です。そのほんの一例を挙げてみます。

・ Basic認証が必要なページにアクセスできる

・ スレッドごとに違うcookieを保持することができる。

・ リクエストのレスポンスを取り出して次のページのリクエストに使うことができる。

・ ヘッダーを変えることができる。(User Agentを変えて、モバイル用のページでテストを行う時などに便利)

・ 外部ファイルから値を読み込むことができる。

・ 複数台のマシーンでテストシナリオを共有することができる。

他にもたくさんできることがありますが、ここであげたのは自分が性能テストのシナリオを作成するときによく使う機能です。

これによって、複数のユーザが同時にアクセスする、書き込みなどでトークンが必要になる状況のテストを実行することができます。

JMeterのインストール

Java1.4以上実行環境があれば、インストールはとても簡単に行えます。

公式サイトのダウンロードページから、バイナリのtgzまたはzipファイルをダウンロードし、適当なディレクトリに展開すればインストール完了です。

JMeterの起動

JMeterをインストールしたディレクトリのbinに移動し、以下のコマンドを実行すればJMeterが起動します。

$ ./jmeter

Windowsの場合、jmeter.batをダブルクリックすれば起動します。

起動するとこんな感じにJMeterが立ち上がります。

http://doruby.kbmj.com/daoka_tips/files/jmeter-start.jpg

シンプルなテストシナリオを作ってみる

JMeterがインストールできたら早速テストシナリオを作成しましょう!

JMeterのテストシナリオはテスト計画に要素を追加して作っていきます。

まずは、テスト計画を選択してそこで右クリックしてみましょう。

すると下の画面のように、追加でいろいろなものを追加できるようになります。

http://doruby.kbmj.com/daoka_tips/files/jm01.jpg

まずはテスト計画の下にスレッドグループを追加してください。

スレッドグループはいくつスレッドを立ち上げるか、何秒間ですべてのスレッドを立ち上げるか、何回繰り返すかなどテスト実行の基本部分となります。これによってどのくらいのアクセスをサーバに送るかの制御を行います。*1

スレッドグループを追加、設定したらスレッドグループで右クリックして追加->サンプラー->HTTPリクエストを選択し、追加してください。

このHTTPリクエストサンプラーでHTTPリクエストの送信を行います。これによってWebページのアクセスをモデリングします。

HTTPリクエストサンプラーでは主に以下の項目を設定します。

・ Webサーバ (ホスト名またはIPアドレスを設定)

・ ポート番号 (リクエストを送る先のポートを設定)

・ プロトコール (HTTP、HTTPSなどを記述)

・ メソッド (GET/POSTを選択)

・ パス (アクセスする先のパスを記述)

・ リクエストで送るパラメータ (リクエストするときに送信するパラメータ(フォームやログインID・パスワードなど)がある場合はここに記述)

・ リクエストと一緒に送信されるファイル (ファイルアップロードなどリクエスト送信時に送るファイルがあればここに記述)

今回は下の画面のように、単純に自宅のサーバにリクエストを送るようにしてみました。

(Apacheをインストールした直後のIt Worksが出てくるだけのページですがw)*2

http://doruby.kbmj.com/daoka_tips/files/jm02.jpg

これでもテストを実行することもができますが、レスポンスの状況がどうか確認するためにリスナーを追加します。

リスナーにはいくつか種類がありますが、ここでは「結果をツリーで表示」を追加しましょう。同じくスレッドグループで右クリックし、追加->リスナー->結果をツリーで表示で追加してください。

この結果をツリーで表示は、スレッドごとに送信リクエストの内容、レスポンスの結果、レスポンスの内容が詳細に表示されます。テスト作成段階でよく使用されます。

これでテストシナリオが完成したので、保存して実行しましょう。

実行->開始でテストが実行されます。

すべてのスレッドが、指定した繰り返し回数実行すると自動的に実行終了します。

スレッドの繰り返しを無限にした場合、または何らかの事情で停止したい場合は、実行->停止を押してください。

実行するとリスナーに随時実行結果が表示されます。

結果をツリーで表示の場合は、成功したリクエストには緑色のアイコンが表示されリクエストを選択すると、リクエストごとのレスポンス時間などの詳細なデータを見ることができます。

http://doruby.kbmj.com/daoka_tips/files/jm03.jpg

今回は単純なページアクセスでJMeterのシナリオ作成の基本を紹介しました。今回くらいのテストだとApache Benchのほうが楽に作れますが、次回以降より複雑なシナリオ作成に挑戦していきたいと思います。

*1: スレッド数はあまり多すぎると実行するマシーン、負荷をかけるサーバともに大きな負担となります。また正確な結果を得られない場合もあります。スレッド数を増やすときは最初は小さい数で初め、様子をみて増やすようにしてください。また多くのスレッド数を立てる必要がある場合は、複数のマシーンで行うことも検討してください。

*2: リクエストを送るwebサーバは自分が責任取れるサーバのみにしてください

subversionのリポジトリルートの変更方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

subversionを置いているサーバーのIPアドレスが変わった事でsubversionのリポジトリルートを変更しなければならなくなりました。

その時に行ったsubversionのリポジトリルートの変更方法を紹介します。

svnのリポジトリルートをリポジトリルートAからリポジトリルートBに変更する方法

※svnリポジトリルートパスは下記を参照

リポジトリルートA http://192.168.1.100/svn/trunk

リポジトリルートB http://192.168.1.101/svn/trunk

svnリポジトリルート変更するにはsvn switch –relocateコマンドを利用すればできます。

svn switch –relocate http://192.168.1.100/svn/trunk http://192.168.1.101/svn/trunk

[Python]遺伝的プログラミングでFizzBuzz

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

社内勉強会用に遺伝的プログラミングでFizzBuzzを(作るプログラムを)つくってみました。

勉強会には間に合わなかったのでこちらで公開します。

遺伝的プログラミングの解説と例はこちらの本に載っています。

http://www.amazon.co.jp/%E9%9B%86%E5%90%88%E7%9F%A5%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Toby-Segaran/dp/4873113644 (redirection forbidden: http://www.amazon.co.jp/%E9%9B%86%E5%90%88%E7%9F%A5%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Toby-Segaran/dp/4873113644 -> https://www.amazon.co.jp/%E9%9B%86%E5%90%88%E7%9F%A5%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Toby-Segaran/dp/4873113644/354-1245016-3905348?ie=UTF8&*Version*=1&*entries*=0)

今回作ったスクリプトは上記の本に載っていたものをFizzBuzz用に修正したものです。Pythonで書いてあります。元々のスクリプトの機能は整数の加算、減算、乗算、if、>を組み合わせて目的にあった挙動をするプログラムを組み立てるというものでした。

今回修正した点は

  • 文字列を扱えるよう変数の型の概念を導入した。
  • 結果の出力を画像化した。

の2点です。

ソースコードはこちらから。実行にはPython2.6以降とpyDotが必要です。

genetic_fizzbuzz.py

以下、修正した主な部分の解説です。

class fWrapper:
    def __init__(self,function,child_count,name,params,type):
        self.function = function
        self.child_count = child_count
        self.name = name
        self.params = params
        self.type = type

paramsとtypeを指定して、パラメタ、戻り値の型を指定できるように修正。

def make_random_tree(pc,max_depth=4,fpr=0.5,ppr=0.6,type='object'):
    if random() < fpr and max_depth > 0:
        f = choice(flist[type])
        children = [make_random_tree(pc,max_depth-1,fpr,ppr,type=t) for t in f.params]
        return node(f,children)
    elif random() < ppr and type == 'int':
        return paramNode(randint(0,pc-1))
    elif type == 'object':
        return constNode(choice(['','fizz','buzz','fizzbuzz',randint(0,100)]));
    elif type == 'string':
        return constNode(choice(['','fizz','buzz','fizzbuzz']))
    else:
        return constNode(randint(0,100))

こちらもchildrenを作成するときに戻り値の型を指定するように修正。

mutateとcrossoverも同様の修正をしています。

定数ノードではfizz,buzz,fizzbuzzの文字を発生させる様に修正してます。

本当は文字列もランダムで発生させたかったのですが、進化にかかる時間が増えるので少し手抜きしました。

def write_jpeg(tree):
    stack = [tree]
    g = pydot.Dot()
    root = True
    while len(stack) > 0:
        node = stack.pop()
        parent_node = pydot.Node(node.name+"_"+str(id(node)))
        parent_node.set_label(node.name)
        if root:
            g.add_node(parent_node)
            root = False
        if hasattr(node,"children"):
            for child in node.children:
                stack.append(child)
                child_node = pydot.Node(child.name+"_"+str(id(child)))
                child_node.set_label(child.name)
                g.add_node(child_node)
                g.add_edge(pydot.Edge(parent_node,child_node))
    g.write_jpeg('tree.jpg',prog='dot')

新しく追加したメソッド。

ツリーを受け取って、jpeg画像を出力します。

画像の出力にはgraphvizを使っています。

一世代の個体群の数=100、最大世代交代数=5000で実行した結果が以下の画像です。

図中のif,mod,div,fizz,buzzは関数、p0はパラメータ(fizzbuzzが取る1~100の整数)、それ以外は、定数を表しています。たとえば一番左下のdivから61,11に矢印が伸びている部分はdiv(61,11)=61/11=5を表しています。

図のプログラムを、結果が定数になるような冗長な計算をはぶいてPythonで書くと以下の様になります。

if p0 % 5 > 1:
    if p0 % 3 > 1:
        return ""
    else:
        return "fizz"
else:
    return "buzz"

3、5の公倍数のときの出力ができてないのが残念ですが、おおむねfizzbuzzの動作をしています。個体群数や世代数、突然変異の発生率などを色々変えて試してみましたが、いまのところこれが最善の結果でした。

というわけで、完全な結果が得られなくて残念でしたが、変数型を導入できたので、いろいろ応用ができそうです。また何か作ったらここで公開したいと思います。

ストアドプロシージャを使ってみましょう@MySQL

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんばんわ。ご無沙汰してます。トマトです。 今回はMySQLでストアドプロシージャを使ってみました。

■ ストアドプロシージャとは?

 一言で表すと複数のSQLを1つの要求だけで実行できる、

 ステキな機能です。

 そんなステキ機能にもメリットデメリットが有ります。

 メリット

・1つの要求だけで複数のSQLを実行できるため、ネットワークに対する負荷を軽減できる

・ 前もってサーバ上で構文解析や機械語に変換するため、処理時間を軽減できる

デメリット 

 ・ データベースごとに記述する構文に規約が有り、互換性が低い

 ・ アプリケーションとのインターフェースが変更になる場合、

   ストアドプロシージャも変更する必要が有り、メンテナンス性が悪くなる

それでは、早速使ってみる事にしましょう。

1. ストアドプロシージャを作ってみる

 とにかく作ってみる事にしましょう。今回使ってみるテーブルはこちら。

 mysql> select * from member_lists;
+------+-------+-------+
| id | name | money |
+------+-------+-------+
| 1 | hoge | 1000 |
| 2 | hoge2 | 2840 |
| 3 | hoge3 | 4789 |
| 5 | hoge5 | 1960 |
| 4 | hoge4 | 6840 |
| 6 | hoge6 | 840 |
| 7 | hoge7 | 784 |
| 8 | hoge8 | 1504 |
| 9 | hoge9 | 777 |
+------+-------+-------+

 まずは単純に

「全レコードを表示させその後 money が 1000 以上のレコードを表示する」

というストアドプロシージャを作ってみましょう。

単純に SQL を書くと

 select * from member_lists; 
select * from member_lists where money>1000;

ここまでは特に問題ないですね。

では、以上の内容のストアドプロシージャを作成し呼び出してみましょう。

 mysql> delimiter //
mysql> create procedure select_money01()
-> begin
-> select * from member_lists;
-> select * from member_lists where money>1000;
-> end
-> //
Query OK, 0 rows affected (0.49 sec)
mysql> delimiter ;

まずはデリミタを変更します。

変更しないとストアドプロシージャを作成中に ‘;’ でSQL 文を中断されてしまいます。

ストアドプロシージャの本体は begin から end までの間に記述をします。

中身は使い慣れているSQL文ですね。

そして無事ストアドプロシージャを作り終わったら

最後にデリミタを元に戻しておきましょう。

では、せっかく作ったのだから呼び出してみないとですよね。

mysql> call select_money01();
+------+-------+-------+
| id | name | money |
+------+-------+-------+
| 1 | hoge | 1000 |
| 2 | hoge2 | 2840 |
| 3 | hoge3 | 4789 |
| 5 | hoge5 | 1960 |
| 4 | hoge4 | 6840 |
| 6 | hoge6 | 840 |
| 7 | hoge7 | 784 |
| 8 | hoge8 | 1504 |
| 9 | hoge9 | 777 |
+------+-------+-------+
9 rows in set (0.00 sec)

+------+-------+-------+
| id | name | money |
+------+-------+-------+
| 2 | hoge2 | 2840 |
| 3 | hoge3 | 4789 |
| 5 | hoge5 | 1960 |
| 4 | hoge4 | 6840 |
| 8 | hoge8 | 1504 |
+------+-------+-------+
5 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

呼び出しをするときには call を使います。

ばっちり動作しますね!

しかし、今のままでは汎用性のないストアドプロシージャになってしまいますよね。

それでは少し手を加えてみましょう。

  mysql> delimiter //
mysql> create procedure select_money02(m int)
-> begin
-> select * from member_lists;
-> select * from member_lists where money>m;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

money の値を引数で指定できるようにしてみました。

では早速実行。

 mysql> call select_money02(2000);
# 全レコード表示結果は省略

+------+-------+-------+
| id | name | money |
+------+-------+-------+
| 2 | hoge2 | 2840 |
| 3 | hoge3 | 4789 |
| 4 | hoge4 | 6840 |
+------+-------+-------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

今回は 2000 で指定してみました。

PHP PEAR::Net_UserAgent_Mobileで携帯端末判別

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。cloverです。

PHPで利用する事ができるライブラリ(パッケージ)を提供しているサービスで「PEARライブラリ」というサービスがあります。

そのPEARライブラリの中で、「これ、ちょっといいなぁ」というものを見つけました。

 『Net_UserAgent_Mobile』というPEARライブラリです。

 『Net_UserAgent_Mobile』は、携帯端末の情報(キャリア・機種・識別番号)を取得し、判別することのできるライブラリです。

私の環境はPHP5なのですが、PHP4でも使えるライブラリです。(もちろんPEARがインストールされていないと使えないのですが…)

まずは、インストール

# pear install -f Net_UserAgent_Mobile

※「-f」が必要な理由は、このライブラリがまだbeta版だからです。

※もしかしたら、この時点でWarningが出ることもあります。私の場合は、PEARライブラリのチャネルが古いと言われたので、

 # pear channel-update pear.php.net

を実行しました。(本当は先にやらなきゃいけないらしいですw)

 とりあえず、これでインストール完了!

使い方は、まずライブラリを使いたいとこに

require_once(‘Net/UserAgent/Mobile.php’);

どんなメソッドが使えるかは、ソースを見てもらった方が早いのですが、例えば携帯でのアクセスか、PCからのアクセスかを判断するisMobileを使うとこんな感じで書きます。

// インスタンス作成

$agent = Net_UserAgent_Mobile::isMobile();

$test = ”;

 if($agent){ echo (“モバイルテスト”);

 } else { echo (“PCテスト”);

}

他にも、各キャリアの判別を行うisDoCoMo()、isVodafone()、isEZweb()などもあります。 PEARの公式サイトを見るとまだbetaですが、いろいろ使ってみても面白いかなって思います!

Ruby on Railsでruby-debugを使ってデバッグしよう

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは、KBMJの中平@railsエンジニアです。

今回はruby on railsのデバッグ方法を紹介しようと思います。

以前、aptanaでrailsをデバッグ実行するという記事を書いたのですが、そもそもコンソール上でのデバッグ方法を書いてないなと思ったので書きたいと思います。

いろいろなruby on rails のデバッグ方法はあると思いますが、今回は個人的に便利なデバッグな方法だと思ってる

 ruby-debugというライブラリを利用してのruby on railsのデバッグ方法を説明いたします。

ruby on rails のバージョンによって導入・利用方法が若干違いますので、分けて説明いたします。

まずRails1系の場合を書きます。

debuggerを利用するデバッグ方法


1.gem install ruby-debug

2.development.rbに

 『require ‘ruby-debug’ 

  Debugger.start 

 の2行を記述

3.デバッグしたいソースコードの場所に

  『debugger』、viewの場合は『 <% debugger %> 』

 と記述する。

4.webrickを起動(ruby script/server)して、アプリ実行


5.debuggerと書いたところでアプリが勝手に止まる(一時停止)ので


6.webrickを動かしているコンソールでデバッグ用コマンドをたたく

  • デバッグのコマンド一例
  • l[ist] ソースの表示。
  • var l[ocal] ローカル変数一覧表示。
  • pp 変数名 変数の表示。
  • f[rame] コールスタック表示
  • s[tep] ステップイン実行
  • n[ext] ステップオーバー実行
  • c[ont] 実行再開

コマンドをたたくことにより変数の一覧や実際の値を見れたり、ステップ実行してプログラムの動きを確認することができます。

その他にもデバッグ用コマンドはありますので、以下のサイト(ruby リファレンス)を参考にしてください。

http://www.ruby-lang.org/ja/man/html/debug.html

webrickじゃなくてmongrel使ってるよという人のために

mongrelをそのまま起動しても、デバッグできないので、mongrelを使ったデバッグ方法も記述します。

1.config/debug.rb とか適当なファイルを新しく作る

2.新しく作ったファイルに

  『require ‘ruby-debug’
  Debugger.start

  の2行を記述

3.mongrelを起動させる時に

以下のコマンドでmongrelを起動させると、mongrelでもdebuggerを使ってruby on railsのデバッグができるようになります。

mongrel_rails start -S config/debug.rb

4.debuggerと書いたところでアプリが勝手に止まる(一時停止)ので


5.アプリを動かしているコンソールでデバッグ用コマンドをたたく

この方法が便利なのは、デバッグを動かすスクリプトを別ファイルにしているのでデバッグをうごかしたくないときは、

monbrel_rails start 

で実行すればデバッグをしないので、ruby script/serverで動かす方法よりデバッグする・しないの切り替えが楽です。

(注意:デバッグコードは後でちゃんと消したほうがいいと思う)

Rails2.0以上の場合

rails2系は ruby-debugが正式にサポートされていますので、簡単にデバッグすることができます。

1.gem install ruby-debug 2.デバッグしたいソースコードの場所に

  『debugger』、viewの場合は『 <% debugger %> 』

 と記述する。

3.アプリをデバッグモードで起動(ruby script/server -u)して、アプリ実行

4.debuggerと書いたところでアプリが勝手に止まる(一時停止)ので


5.アプリを動かしているコンソールでデバッグ用コマンドをたたく

rails2系だとデバッグ起動オプションがあるので、rails1系を使うよりかなり楽にデバッグできますね。

ちなみにruby script/server したときにmongrelをいれてたらmongrelで起動します。 

ruby-debugを利用してデバッグ作業を行うと、ruby on railsのデバッグが簡単になると思いますので、ぜひ皆さんも試してみてはいかがでしょうか?

Firefox + Greasemonkey + AutoPagerize でページ閲覧時のストレスを軽減しよう

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

みなさま、はじめましてえーきち。。です。

このブログではprogramに特化した話題より

有益なtipsや各種ツールの話題をつらつら書いていこうと思います。

そんな内容ですので

みなさま気楽に目を通していただければと思います。

今日紹介するのは「firefox」+「Greasemonkey」+「AutoPagerize」を使った

ページ閲覧時のストレス軽減tipsです。

googleなど何らかのページを検索+表示した際には

通常、ページ下部まで移動したあと”次へ”や”2ページ目”を押下し遷移する必要がありますが

これを使うとページ下部に、先に読み込んだ次の候補のページ、を表示してくれるものです。

では詳細を

firefox:http://mozilla.jp/firefox/
firefoxはブラウザソフトですね。
カスタマイズが非常に強力なブラウザですが詳しい説明は省きます。

greasemonkey:https://addons.mozilla.org/ja/firefox/addon/748
greasemonkeyはfirefoxのアドオン。
各種javascriptなどと組み合わせてwebページを体裁をととのえたりできます。
 firefoxで上記のURLにアクセス、
 ページ内のインストールボタンを押すと
 インストールの許可を求めてきますので許可(インストール)します。
 その後firefoxの再起動。
greasemonkey"だけ"では特に何ら変化はありません。


AutoPagerize:http://userscripts.org/scripts/show/8551
AutoPagerizeはgreasemonkey用のスクリプトで
今回の紹介した機能を実現するメインのものです。
 上記のURLにアクセス、
 右側のinstallをクリックしてインストールします。

これでgoogleやyahoo、ニコニコ動画などでスクロールボタン一つで
快適にページを閲覧することができます。

AutoPagerizeを見るとわかるように

http://wedata.net/databases/AutoPagerize/items.json

のファイルに書かれたsiteinfoを読み込んでいるのですが

何らかの原因で上記サイトが落ちてるとも限りません。

ですのでミラーサーバを用意してくれる親切な方々もいてますので

そこも登録しておきましょう。

firefox:[ツール]-[Greasemonkey]-[ユーザスクリプトの管理]
AutoPagerizeを"編集"、テキストエディタは任意で、、、

31行目あたりに
var SITEINFO_IMPORT_URLS = [
    'http://wedata.net/databases/AutoPagerize/items.json',
]
とあるのでこれを

var SITEINFO_IMPORT_URLS = [
    'http://wedata.net/databases/AutoPagerize/items.json',
---*ここから
    'http://ss-o.net/databases/AutoPagerize/items.json',
---*ここまで追加
]

もしくは

var SITEINFO_IMPORT_URLS = [
    'http://wedata.net/databases/AutoPagerize/items.json',
---*ここから
    'http://utatane.appjet.net/databases/AutoPagerize/items.json', 
---*ここまで追加
]

としましょう。

さらに、ここに登録されてないがよく見るサイトや

自社関連のサイトも使えるようにしたくなりますし

またすべてのミラーサーバが使えない場合も考え

ローカルに記載する方法が以下となります。

これも先ほどと同じく
firefox:[ツール]-[Greasemonkey]-[ユーザスクリプトの管理]
AutoPagerizeを"編集"、テキストエディタは任意で、、、

※例としてgoogleを登録
var SITEINFO = [
---*ここから
    {
        url:          'http://.*google.+/',
        nextLink:     'id("nav")//td[last()]/a',
        pageElement:  'id("res")/div',
        exampleUrl:   'http://www.google.com/search?q=nsIObserver',
    },
---*ここまで追記
]

以上、長くなりましたが紹介となります。

エンジニアに限らずみなさまに使っていただけるtipsですので

みなさまぜひ試してください。

アクセス解析で見るユーザビリティ -目的のコンテンツへの道筋を整えよう!-

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。アクセス解析チームの大山です。

アクセス解析を行うことで、ユーザの様々行動履歴を追うことができます。

ユーザにはそれぞれの目的があります。

制作側はそれぞれの目的までの道筋を用意していると思いますが、

思惑通りの動きをしてくれるユーザはそういません。

結果、多くのユーザは目的ページにもたどり着かず離脱しているのではないでしょうか。

【?】なぜ制作側が用意した道筋を辿ってくれないの・・・?

【!】道中にユーザビリティへの配慮が足りていないページの存在が考えられます。

【?】そこはどこ・・・?

【!】アクセス解析を使った問題ページ発見方法と改善案をお教えします!

 ※ ユーザの行動履歴を追うことの重要性はコチラ

   「アクセス解析の重要性 時代はAIDMAからAISCEASへ」

目的のコンテンツへの道筋を整えよう!

■問題ページ発見方法

「滞在時間が長いページの離脱率を調べよう!」

①まずはアクセス解析ツールで滞在時間の長いページをピックアップ。

 ※ユーザの目的となるページやコンバージョンの発生するページは

  じっくり見てもらう必要があるので除外。

②ピックアップしたページの離脱率を調べましょう。
③ピックアップしたページを実際に数人で閲覧し目的達成までの
 各ページの時間を計ってみます。
④製作者が必要とした滞在時間とユーザの滞在時間を比較し、
 問題ページを洗い出しましょう。

「滞在時間が長いページ=人気ページ」と思いがちですが、

本当は迷子になって立ち止まっているだけかもしれません。

立ち止まっても、目的への道筋を見つけられるのであれば問題視することはありません。

けれど立ち止まって、元の位置に戻ることもできず帰ってしまうユーザが多いページがあれば、

そこが問題ページです。

■GoogleAnalyticsでの見方

図)「コンテンツ」にある「上位のコンテンツ」をクリック。デフォルトではページビューの多い順に

  並んでいます。ページビューが多く平均ページ滞在時間に注意するべし。

  離脱率も同時に見れます。

図)滞在時間の長いページを確認するには「平均ページの滞在時間」をクリックすると、

  滞在時間でソートされます。

■道筋を整えるための改善案

問題ページである理由と合わせて、改善策を考えてみましょう。

・ユーザが立ち止まる理由

①トップページに戻れない

②今どこにいるのかわからない

③カテゴリ名称が分かり辛い

①トップページに戻れない

トップページはリンク数が多いのが一般的であることから、ほとんどのユーザは

戻れば何とかなると思う傾向があります。

トップページにすら戻ることができないとわかった瞬間、ユーザはどれほどガッカリするでしょうか。

場合によっては離脱の原因にもなりかねません。

すぐにトップページに戻れる手段があることを、どのようなユーザにも分かりやすくする

伝える必要があります。

経験が少ないユーザほど次のような行動特性があるといわれています。

・検索エンジンの表示結果と同様にページの上部に必要な情報があると思っている

・スクロール行為になれていない

また通常は左上から下に向かって移動し、気になるものがあると右方向へ移動することが

多いと言われています。

よく、左上にトップページリンクがありますよね。これは上記理由に当てはまることから

正しい手段であり、また一般化していることから、有効な方法であると考えられます。

トップページに戻れない→左上にトップページリンクを置くべし!

 図)多くのユーザに見られる視線。左上から下に向かって移動し、

  気になるものがあると右方向へ移動する

②今どこにいるのかわからない

今どこにいるのかわからず、とりあえず離脱を考えるユーザも少なくありません。

サイトの階層と現在いるページの位置がすぐにわかる「パンくずリスト」が有効です。

また、パンくずリストは関連商品などに誘導するためのナビゲーションとしても利用できます。

最近の消費者行動に見られる比較検討に大きく貢献できる方法であることが考えられます。

※消費者行動の移り変わりについてはコチラ

  「アクセス解析の重要性 時代はAIDMAからAISCEASへ」

 図)パンくずリストはサイトの階層と現在いるページの位置がすぐにわかる

③カテゴリ名称が分かり辛い

リンクの存在に気づいてもリンク先の想像が付かず次の行動移せないケースもあります。

単にカテゴリ名だけではで理解しにくいことが理由として挙げられます。

例えば「生活雑貨」であればその下に「キッチン用品」「バス用品」等のサブカテゴリと

説明を沿えたテキストリンクを付けると有効であると考えられます。

また機能別・ブランド別など複数のカテゴリ分類を併用すると目的のものが探しやすくなります。

どうでしょうか。

自身のサイトと当てはまる部分があれば幸いです。

<ひとりごと>

最近、甥が生まれました。

おばちゃんになってしまいました。

でも甥は超スーパーミラクル可愛いので

「おばちゃん」と呼ばれても許します。

■アクセス解析担当者の記事

+—————————————————————————–+

+—————————————————————————–+

最近人気な記事