ホーム ブログ ページ 57

【テーマ: 背景に透過PNGを使ってデザインの幅を広げる】

0

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

【テーマ: 背景に透過PNGを使ってデザインの幅を広げる】

【使用するモノ: Photoshop css javascript】

それでは早速やってみます。

(1)headerにてalphafilter.jsを読み込みます。

(2)該当のdivに、class=”alphafilter”を付与します。

(3)つぎにcssにて、該当のIDにスタイルシートを指定します。

#base_cont {
width:890px;
margin: 0 auto;
padding: 0 10px;
text-align: left;
background: url(../images/common/parts/bg-wra.png) repeat-y left top;
}
その後、IE6用に指定。
* html #base_cont { /* for ie6 */
width:890px;
margin: 0 auto;
padding: 0 10px;
text-align: left;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader (src=”../images/common/parts/bg-wra.png”, sizingMethod=”image”);
}

以上、「背景に透過PNGを使ってデザインの幅を広げる」でした。

が、ほかのjavascriptで動かなくなるものが発生する時があるので、使用するときはよほど必要な時のみにしたほうがいいと思われます。

rubyでパスワードを自動生成するプログラムの紹介

0

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

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

今回はrubyでパスワード生成する方法を書きたいと思います。

これは、私がユーザー登録のプログラム作成時などで、自動的にランダムな文字列のパスワードを生成する際に使っているrubyのパスワード生成コードを紹介いたします。

みなさんの参考になれば幸いです。

rubyのソースコードは以下になります。
  pass_size = 12
  a = (‘a’..’z’).to_a + (‘A’..’Z’).to_a + (‘0’..’9′).to_a
  password = Array.new(pass_size){a[rand(a.size)]}.join

簡単にソースコード説明いたしますと

まず、パスワード生成に使用する文字を配列に格納します。(今回は英数字)

それを、パスワード登録で必要な文字数分(ここでは12文字)配列からランダムに一文字ずつ取得し、

別配列に入れた後、 それを文字列に変換しているだけの単純なプログラムになります。

パスワード生成はいろいろやり方はあると思いますが、

これはrubyでの一例になりますので、参考にしていただければと思います。

ActiveRecordでupdated_atを更新せずにテーブルを更新させる

0

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

こんにちは。KBMJの本多です。

今回はテーブルの更新日付を変更することなくテーブルの中身を変更する方法を紹介します。やり方は以下の通り。

例:)変更するテーブル名が「tables」、Model名が「Table」の場合

table = Table.find(:first, (中略))
(tableの中身を修正)
table.record_timestamps = false ←※
table.save

一括で変更する場合は

tables = Table.find(:all, (中略))
tables.each do |table|
  (tableの中身を修正)
  table.record_timestamps = false ←※
  table.save
end

このように、データの保存前におまじないをかけるだけです。
バッチ等でテーブル内のデータを修正したいけど、更新日付を変えたくない時に使ってみてください。

GOOD RAILS!!

mongrelのinstallと設定と起動の方法

0

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

ども、rick No.15です。
今回はmongrelの
・install方法
・設定方法
・起動方法
・停止方法
なんかを紹介します。

mongrel install

$ gem install mongrel
$ gem install daemons
$ gem install mongrel_cluster

mongrel設定

$ vim config/mongrel_cluster.yml
——————————
# portの数を変えたいときは
user: test
cwd: /var/www/test # ソースの場所
port: “3000” # ここでportの番号を変更する
environment: production
group: test
pid_file: log/mongrel.pid
servers: 5 # ここでportの数を変更する
—————————————

起動

$ mongrel_rails cluster::start

停止

$ mongrel_rails cluster::stop

再起動

$ mongrel_rails cluster::restart

mongrelの数が一個だけでいい場合は
$ ruby script/server
———————————————————————————————-
./script/../config/boot.rb:26:Warning: Gem::SourceIndex#search support for String patterns is deprecated
=> Booting Mongrel (use ‘script/server webrick’ to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment…
———————————————————————————————-

と起動すればOK
webrick (毎回設定ファイルを再読込み)で起動したい場合は
$ ruby script/server webrick
———————————
=> Booting WEBrick…
~
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with –help for options
[2009-10-22 12:11:34] INFO WEBrick 1.3.1
[2009-10-22 12:11:34] INFO ruby 1.8.6 (2008-08-11) [universal-darwin9.0]
[2009-10-22 12:11:34] INFO WEBrick::HTTPServer#start: pid=684 port=3000
———————————

と起動すればOK
以上〜。

SQLiteの使い方

0

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

Rails2系からはデフォルトのデータベースになっている SQLiteについてです。 MySQLやPostgreSQLとはちょっと扱いが違います

SQLiteは常駐しているわけではなくファイル単位でデータを管理しています。 1ファイル1データベースでアプリケーションに組み込む形で使います。 起動は以下のコマンドでできます

sqlite3 dbname.db

dbファイルが存在しなければ新規に作成されます。 プロンプトがsqliteになるとSQL文が使えます。 以下はSQLite特有のドットコマンドになります。 ヘルプを見る

.help

利用しているデータベースのパスを表示

.databases

現在のデータベースのテーブル一覧

.tables

現在の設定を表示

.show

プロンプトの表示を変更(デフォルトはsqlite)

.prompt

Flashの変更の反映がうまくいかない時

0

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

サイトを作っていると、画像を変更したのに変更が反映されない!という事態に遭遇したことがある人も多いはず…。

その場合あわてずに更新ボタンを押せば大抵が解決したかと思います。

しかしFlashの場合は更新ボタンでは解決しないこともあるのです。

ネットワークの環境によってすぐに変更が反映される場合もあれば、されない場合もあります。

弊社からはすぐに確認が出来てしまうため、クライアント様から「変更が反映されていない」と連絡があって初めて気が付くということも…。

まずはキャッシュをクリアすれば解決します。

開発中などはそれでも問題はありませんが(少々手間ですが)本番運用に入るとそういうわけにもいきません。

(エンドユーザー様に「サイトの閲覧の際にはキャッシュをクリアしてください」なんてサイトはありませんよね…)

ファイル名を変更するという解決方法もありますが、 しかし運用上ファイル名を変更したくない場合もあるかと思います。

その場合便利なのがパラメーターです。

Flashファイル名の後に「?」とお好きな数値を付ければ、キャッシュを使用しないでフラッシュを読み込んでくれます。

そのフラッシュの利用箇所が一ヶ所なら、「hoge.swf?0123」といった感じ呼び出せばOK。

フラッシュを変更したら呼び出し元のタグを「hoge.swf?3210」のように変更してください。

もし呼び出し箇所が複数個なら、数時の部分をjavascriptなどでランダム(またはアクセス日付)を付けるように指定しておけば意識することなくフラッシュの変更が出来ます。…

SQL関数coalesceの使い方と読み方

0

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

こんにちは。KBMJの佐藤です。

今回はSQLのcoalesceという関数の使い方と読み方について解説します。

coalesceとは何か?

coalesce は、与えられた引数のうち、NULLでない最初の引数を返してくれます。データを表示する目的で取り出すシチュエーションなどで、NULL値の代わりにデフォルト値を使っている場合に便利です。CASE や NULLIF などを用いても同様の効果が得られますが、coalesce() を使えば、より完結に記述することができます。といっても実際に使ってみないとイメージがわかないと思いますので、以下、実験してみます。

coalesce実験用テーブル・レコード

以下のようなテーブル・レコードを用意しました。

SELECT c1, c2, c3 FROM test1s;
 c1  |   c2   |   c3   
-----+--------+--------
 AAA | BBB    | CCC
 DDD | (null) | FFF
 GGG | HHH    | (null)
(3 rows)

coalesceを使ってみる

では先ほど用意したテーブルに対して、coalesceを使ったSELECT文を発行してみましょう。

SELECT c1, COALESCE(c2, 'QQQ') AS c2, COALESCE(c3, 'QQQ') AS c3 FROM test1s;
 c1  | c2  | c3  
-----+-----+-----
 AAA | BBB | CCC
 DDD | QQQ | FFF
 GGG | HHH | QQQ
(3 rows)

NULL だった場所が QQQ に置き換えられていますね。

coalesceの読み方

coalesceの読み方はカタカナで書くと「コウアレス」に近いようです。

ではまた。

PostgreSQLでの正規表現検索

0

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

こんにちは、cloverです!

先日仕事で、ドコモのシークレットコードに対応する作業があったのですが、その際「電話番号(11ケタ)+シークレットコード(4ケタ)@ドコモ」の4ケタの部分以外の部分のマッチングが必要になりました。

LIKE検索では難しいかなぁと思って先輩に聞いてみたら、何とPostgreSQLには正規表現でのマッチングが出来るとのこと。

というわけで、ちょっと調べてみました~例えば、「090123456781234@ドコモ」というメールアドレスがあって、「09012345678xxxx@ドコモ(xxxxの部分は数値であれば何でもよい)」という条件で、マッチするデータがあるかを調べようとしたとき、
PostgreSQLでは「~(チルダ)」を用いて、正規表現検索を行います。

以下のような感じになります。

select count(*) from users where mobile_email ~ ‘09012345678[0-9]{4}@ドコモ’;

もちろんこれはRailsのfind文などでも使えるので、

User.find(:first, :conditions => [“mobile_email ~ ?”, ”09012345678[0-9]{4}@ドコモ’])

となります。

「\d(数値)や\w(英数字)」などの表現の書き方はまたちょっと違うみたいなので、そのあたりも駆使して使ってみたいと思います☆

透過PNGを使ったボタンの作成

0

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

透過PNGを使って色違いのグラデーションのついたボタンを作る方法を紹介します。
まず、Photoshop等でボタンの大きさに合わせて黒から透明のグラデーションをかけたものを作成します。

(レイヤーの不透明度を50%ほどにし、切り出す幅は横方向にリピートさせるため1pxにします)

そして、以下のように記述します。

XHTML

<a href=”#” class=”button1″>ボタン</a>
<a href=”#” class=”button2″>ボタン</a>
<a href=”#” class=”button3″>ボタン</a>

CSS

 .button1{
  background:url(button.png) #310202 repeat-x left bottom;
  color:#fff;
  padding:10px 20px;
  border :solid 1px;
}

.button2{
  background:url(button.png) #00074D repeat-x left bottom;
  color:#fff;
  padding:10px 20px;
  border :solid 1px;
}

.button3{
  background:url(button.png) #004D02 repeat-x left bottom;
  color:#fff;
  padding:10px 20px;
  border :solid 1px;
}

で表示させると

色違いのグラデーションがかかったボタンの完成。

背景色を変更するだけで簡単に色違いのボタンが作れます。

※IE6では透過PNG画像に対応していない為、別途対策が必要です。

Google Analtyicsのイベントトラッキング機能について

0

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

アクセス解析チームの中林です。
本日はGoogleAnalyticsイベントトラッキング機能について簡単にお話ししたいと思います。

■イベントトラッキングとは?

PVが「表示されたページの閲覧数」であることに対してイベントトラッキングは該当するボタンやリンクの「クリック数」となります。

■イベントトラッキングで可能になったこと
クリック数の計測が可能に! ※過去も仮想URLを付与することで、クリックを計測は可能でしたが   外部リンクやPDFに仮想URLを付与した場合、仮想のPV数が   増えてしまうといったことがあり、分析用のプロファイル作成が必要でした。

   仮想URLの設定方法は過去記事から→Google analyticsでPDFファイルをカウントする方法
イベントの詳細な分析が可能イベントトラッキング内で、「カテゴリー」、「アクション」、「ラベル」、「値」と設定できるので、より詳細な分析が可能となります。

■イベントトラッキングの記述方法・書式
イベント ※GoogleAnalyticsのトラッキングコードは、イベントよりも上位に記述する必要があります。

◇用語説明

    ● カテゴリー(必須項目)⇒ イベントごとのグループ名
    ● アクション(必須項目)⇒ ユーザーの行動、任意の文字列、
    ● ラベル        ⇒ URL、メモ等、任意の文字列、
    ● 値          ⇒ クリック時の値(数値)を設定できます。
     ※「値」はコンバージョンにおけるコンバージョンバリューのようなものです。

例えば下記のようなグローバルナビゲーションとローカルナビゲーションが同一URLのサイトがあったとします。
(例)KBMJ(http;//www.kbmj.com)同一URLのクリック計測

グローバルナビゲーションとローカルナビゲーションのクリック数を計測したいけれどリンクのURLにパラメータをあまりつけたくないサイト管理者も多いと思いますので、
グローバルナビゲーションとローカルナビゲーションのクリック数を計測する場合にイベントトラッキングを使用する例を記述してみます。

●グローバルナビゲーション(例)
onClick=”pageTracker._trackEvent(‘Top-page’, ‘inner-link’, ‘G_navi_solution’);” />

●ローカルナビゲーション(例)
onClick=”pageTracker._trackEvent(‘Top-page’, ‘inner-link’, ‘L_navi_solution’);” />

上記の例では
カテゴリーに、「どこのページ」か。アクションに、「内部リンク、外部リンクの区分け」ラベルに、「クリックした個所」を記述しています。
こうすることで、GoogleAnalyticsの「コンテンツ」>「イベントのトラッキング」でデータを取得することが可能となります。
これで、余計なパラメータをつけたり、仮想URLによるPV数の増加なく、どこが一番利用されているかということをGoogleAnalytics上で取得が可能となります。    あくまで、一例なのでもっと良いカテゴリーやアクションのラベルの設定があると思います。非常に便利な機能なので、ぜひぜひ使ってみてください。

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

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

vimのお気に入りプラグイン

0

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

vimにプラグインを入れてさらに便利に使いましょう!

中でも、コメントアウトのトグルができるプラグインなど、

お気に入りのプラグインをいくつか紹介してみます。

**svn-diff.vim

http://www.vim.org/scripts/script.php?script_id=978

svn commit時、コメント入力画面と共にsvn diffが表示されます。

mオプションを使わないでcommitし、SVN_EDITORがvimの場合に有効です

しっかりdiffしてもデバッグ行消し忘れ等よくありますが、

このプラグインがなければさらに忘れそうですので助かります。

EnhCommentify.vim

http://www.vim.org/scripts/script.php?script_id=23

拡張子別にコメントアウトをトグルします。

shift+vで範囲選択し、\cなどで実行できます。

erbファイルなどもトグれますので助かります。

qbuf.vim

http://www.vim.org/scripts/script.php?script_id=1910

シンプルなバッファ切り替えプラグインです。

以下のような感じで.vimrcに設定すると切り替えメニュが呼び出せます。

	let g:qb_hotkey = "<space><space>"
	

j/kで選んでEnterのような操作で切り替えができるので、

開いてるファイルが少なければ、とても早いです。

その時、改行が半角スペースになった

0

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

改行コードとは、まことにややこしきもの。
気付きし時には元の形を留めざる事、少なからずや。
あな、事件はクチコミの確認画面にて起こったのでございました・・・・・

以下、今回の検証環境です。

【機能】
・ASPサービスのクチコミ機能。ユーザのページにティッカーを埋め込むタイプ。
・入力フォームからクチコミを投稿し、確認画面を表示した後、データベースに保存する。

【仕様・条件】
1. ASPサービスである等の諸事情により、セッションは使わない。
2. データベースには、改行コードはタグ変換せずそのまま保存する。
3. フォームが送信された段階で、用意してあったERBテンプレートに入力内容を渡し、
  結果を確認画面用htmlとして保存。
4. 確認画面に遷移し表示要求が来たら、3で保存したhtmlの内容を確認画面として返す。

まあ、ごちゃごちゃ書きましたが、簡単に説明すると、
例えば、あらかじめ用意されている確認画面用のテンプレートは以下のようなものです。〜〜 表示部分 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
<table>
<tr>
<td>レビュー</td>
<td><%= (h @review).gsub(/\r\n|\n|\r/, “<br/>”) %></td>
</tr>
</table>
〜〜 フォーム部分 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
<form>
<input type=”hidden” name=”review” value=”<%= h @review %>”>
</form>

@reviewがユーザが入力/送信したレビューの内容です。
表示部分ではレビューの改行コードを<br>タグに変換して出力し、
フォーム部分では本登録用にhiddenで同じ内容を埋め込んでおきます。
このテンプレートに、送られてきた入力内容@reviewが渡され、rubyが実行された結果を
htmlとして保存。確認画面としてそのhtmlをユーザ側のページに返すという仕組みです。

そもそもこのやリ方がダメ!とかあるかと思いますが、
今回はあくまでこの方法でやる場合の検証なので、あしからず。
ていうか、やりたいんで。これで。

さて、この方法で確認画面を表示すると、表示の方はきちんと改行されて表示されました。
で、そのまま投稿ボタンを押して送信し、「投稿ありがとうございました」の完了画面が
出たので、いざ投稿された内容を確認してみると・・・・・
あれ?改行コードが半角スペースになってるぞ?

フォーム送信から確認画面を介さず直接データベースに叩き込んだところ、
その場合はきちんと改行コードのまま保存されてました。
てことは、確認画面にhiddenで埋め込んだところが怪しいっぽい。

html化された時点で改行コードがどうなってるのかは定かじゃありませんが、
いろいろ調べた結果、HTMLユニコード(10進)に変換すれば良さそうだと判明。
hiddenの箇所をこう変更してみた。<input type=”hidden” name=”review” value=”<%= (h @review).gsub(/\r\n|\n|\r/, ‘&#13;&#10;’) %>”>

これで再度投稿を試みたところ・・・・・
よし!ちゃんと改行コードとして保存されたぞ。

ちなみに、「&#13;&#10;」はwindowsの改行コードで、Mac、Unixはそれぞれ
「&#10;」「&#13;」になるそうです。
どうせ出力時に<br>タグに変換するため、データベースに保存する改行コードは
何でも良かったもので。

[Ruby] yield ってどんなもの?

0

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

ご無沙汰してます。トマトです。
自分自身もよくわからなかった、ruby の yield について
理解がてら説明してみます。

yield とは?

一言で行ってしまうと、 ブロックに処理を引き渡してくれる役割をもっています。
文字で書くと非常にわかりづらいので、
実際に動作を見てみましょう。。。

  def test
puts "#################"
puts "yield実行前"
puts "#################"
yield(1,2)
puts "#################"
puts "yield実行後"
puts "#################"
end

test do |x,y|
my_sum = x+y
puts "#{x}+#{y}=#{my_sum}"
end

こんな感じのコードを書いたとすると、 実行結果は下記の通りになります。

  #################
yield実行前
#################
1+2=3
#################
yield実行後
#################

実行結果を見る通り、yield を記述した箇所で
ブロックに処理を引き渡して実行しているのがわかります。
上記はすごく単純な例になりますが、少しでも理解の助けになればと思います。

Tempfileを使ってリソースを有効活用

0

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

とあるテーブルのいくつかのカラムをTSVファイルに書き出し、
ダウンロードするという処理が重かったので
Tempfile等を使って少し軽くした。

※Tempfileの説明はリファレンスを参照。
http://www.ruby-lang.org/ja/man/html/tempfile.html

Before


# 細かい処理は省略。
# あくまで例なので、connection.executeでやればいいじゃんというのは無しで。。。
# Item は Model Class。

def download
 colnames = Item.column_names

 buf = String.new
 buf << colnames.join("¥t")
 buf << "¥n"

 Item.all.each do |item|
   buf << colnames.map do |col| item[col] end.join("¥t")
   buf << "¥n"
 end

 send_data(buf, :filename => "items.tsv")
end

これだと、Itemのサイズが数百万レコード等、巨大な場合、
Item.all と buf 辺りでメモリを大量に消費しそう。

Item.allだと一度に全てのItemのインスタンスを保持するが、
別に上記処理の場合、小分けしても問題ないね。
# yieldとか使って1行ずつ読み込んだ方がさらにいいかも?

そもそもファイルを生成し、最終的に出力するのだから、
一時的な情報(buf)は、メモリではなくファイルに書き出し、
そのファイルをそのまま渡した方がリソースを有効活用できる。

という訳で↓

After


DEV_NUM = 1000

def download
 colnames = Item.column_names

 temp = Tempfile.new('items')
 temp.puts colnames.join("¥t")

 for i in 0..Item.count/DEV_NUM
   Item.all(:limit => DEV_NUM, :offset => i*DEV_NUM).each do |item|
     temp.puts colnames.map do |col| item[col] end.join("¥t")
   end
 end

 temp.close
 send_file(temp.path, :filename => "items.tsv")
end

処理速度は余り変わらないものの、
取りあえず、メモリ馬鹿食いでプロセスが落ちる事は無くなった。

よかったよかった :)

P.S.
残されたファイルの消去は。。。cronで削除かなぁ

list-style-imageを使わずにリストマーカーに画像を使う

0

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

こんにちは、maiです。

今回は初心に返って、ごく簡単で使いどころが多い「リストマーカーを画像にする」について。

リストマークを画像にする場合、
list-style-imageというプロパティが既にありますが、
これを使うとちょっとズレたりしちゃうのでデザインとしてちょっと…ということがあります。
そういうズレを防ぐためにも、リストマークを画像にする時は
backgroundで入れてしまいましょう。

具体的にはこんな感じ↓

◆list-style-imageを使った場合

 cssの記述自体は簡単ですが、テキストに対して上ズレしちゃってます。

li { list-style-image: url(../list-mark.png); }

◆backgroundを使った場合

cssはlist-style-imageに比べてちょっと記述が増えますが、位置をバッチリ調整できます。
天地の位置をcenterに指定することで、細かく指定しなくてもほぼ中央に配置することができます。
左のpaddingは画像の幅+余白の3pxを取り、上下のpaddingは今回はlist-style-imageを使った場合の余白にあわせて調整しました。

li {
    padding: 1px 0 2px 23px;
    background: transparent url(../list-mark.png) no-repeat left center;
}

◇リストのテキストが長くなってしまうとき

上記の記述だと、テキストが長くなったときにリストマークの位置がliの高さに対して中央になってしまうので
テキストが2行以上になりそうな時は、単位em(1em=1文字分の長さ)を使って調整します。

li {
    padding-left: 23px;
    background: transparent url(../list-mark.png) no-repeat left 0.1em;
}

emを使うことで,フォントサイズを変更する必要が出たときに
画像の位置を調整し直す手間を減らすことができます。

PostgreSQL 8.3 以降からの postgresql.conf を、サーバースペックによるデフォルト値を設定し、パフォーマンスチューニングする

0

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

こんにちは、O2 です。

今回は、postgresql の設定ファイル(postgresql.conf) に関しての、私が最近設定している

デフォルト値を公開しようと思います。

実際、インストール直後の設定では、「ロースペックのマシン環境でも動作する」設定の為

最近のサーバースペックにあった、デフォルト値を記述してみようと思います。

とは言っても、私が扱っている最近のサーバーのメモリは、8GB、16GB、32GB で、さらに

PostgreSQL 8.3以降を使用しているので、PostgreSQL 8.3以降での、メモリ3パターンでの

デフォルト値を紹介します。

注意.あくまでも、私が割り出したデフォルト値ですので、どのように使用するかによってチューニングは

必要になりますので、参考にご使用ください。

説明の前に

 PostgreSQL 8.2 以降かな?(間違っていたらだれか指摘してね)、設定値関して

 shared_buffers などのメモリ設定が、MB(メガバイド)や、GB(ギガバイト)という単位で

 設定できるようになっている為、設定しやすくなっています。

共通

 max_connections = 200

  log_destination = ‘stderr’

  logging_collector = on

  log_directory = ‘/var/log/postgresql’

  log_filename = ‘postgresql-%Y-%m-%d.log’

  log_min_messages = info

  log_error_verbosity = verbose

  log_line_prefix = ‘%t:%r[%p-%v]’

  log_autovacuum_min_duration = 0

  autovacuum = on

  log_lock_waits = on   deadlock_timeout = 30s

メモリ:8GB の場合

  shared_buffers = 2GB

  work_mem = 32MB

  wal_buffers = 512KB

  checkpoint_segments = 16

  random_page_cost = 3.0

  effective_cache_size = 2GB

メモリ:16GB の場合

  shared_buffers = 3GB

  work_mem = 32MB

  wal_buffers = 512KB

  checkpoint_segments = 16

  random_page_cost = 3.0

  effective_cache_size = 3GB

メモリ:32GB の場合

  shared_buffers = 8GB

  work_mem = 64MB

  wal_buffers = 512KB

  checkpoint_segments = 32

  random_page_cost = 3.0

  effective_cache_size = 8GB

※今回の設定は、サーバーをDB専用にした場合を想定して書いてます。

Merbを使ってみる

0

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

こんにちは。T氏です。

最近は、ようやくRailsの開発にも慣れてきました。

慣れてくると、Rails以外のフレームワークも使ってみたいな、なんて思ったりします。

そこで、以前から気になっていたMerbのインストールから起動までをご紹介したいと思います。

まずはインストールからです。

*ここでは、rubyとgemはインストール済みを前提とさせて頂きます。

merbのインストール

  # 約50個近くインストールされるので注意 
$ sudo gem install merb
Password:
Building native extensions.  This could take a while...
Successfully installed addressable-2.0.2
Successfully installed extlib-0.9.12
Successfully installed data_objects-0.9.12
Successfully installed dm-core-0.9.11
.....
.....
.....
Successfully installed merb-1.0.12
  # デフォルトはsqliteなので、
# mysql を使いたい方はこちらをインストール
$ sudo gem install do_mysql
  # postgresを使いたい方はこちらをインストール
$ sudo gem install do_postgres

これでインストールは完了です。

次にプロジェクトを作成してみましょう。

プロジェクトの作成もコマンド一つで行えます。

  $ merb-gen app test-merb
Generating with app generator:
[ADDED] Rakefile
[ADDED] app/controllers/application.rb
[ADDED] app/controllers/exceptions.rb
[ADDED] app/helpers/global_helpers.rb
[ADDED] app/models/user.rb
[ADDED] app/views/exceptions/not_acceptable.html.erb
[ADDED] app/views/exceptions/not_found.html.erb
[ADDED] autotest/discover.rb
[ADDED] autotest/merb.rb
[ADDED] autotest/merb_rspec.rb
[ADDED] config/database.yml
[ADDED] config/dependencies.rb
[ADDED] config/environments/development.rb
[ADDED] config/environments/production.rb
[ADDED] config/environments/rake.rb
[ADDED] config/environments/staging.rb
[ADDED] config/environments/test.rb
[ADDED] config/init.rb
[ADDED] config/rack.rb
[ADDED] config/router.rb
[ADDED] public/javascripts/application.js
[ADDED] public/stylesheets/master.css
[ADDED] merb/merb-auth/setup.rb
[ADDED] merb/merb-auth/strategies.rb
[ADDED] merb/session/session.rb
[ADDED] .gitignore
[ADDED] public/.htaccess
[ADDED] tasks/doc.thor
[ADDED] public/javascripts/jquery.js
[ADDED] doc/rdoc/generators/merb_generator.rb
[ADDED] doc/rdoc/generators/template/merb/api_grease.js
[ADDED] doc/rdoc/generators/template/merb/index.html.erb
[ADDED] doc/rdoc/generators/template/merb/merb.css
[ADDED] doc/rdoc/generators/template/merb/merb.rb
[ADDED] doc/rdoc/generators/template/merb/merb_doc_styles.css
[ADDED] doc/rdoc/generators/template/merb/prototype.js
[ADDED] public/favicon.ico
[ADDED] public/images/merb.jpg
[ADDED] public/merb.fcgi
[ADDED] public/robots.txt
[ADDED] tasks/merb.thor
[ADDED] spec
[ADDED] gems

Rails経験者なら、見た事があるようなファイルが生成されていますね。

最後にルートディレクトリに移動して、merbの起動をしてみましょう。

起動は下記のコマンドで行えます。 

  $ merb

しかし、ここで一点注意が必要です。

私の環境では実行時に下記のエラーが出ました。

   ~ 
~ FATAL: The gem data_objects (= 0.9.11, runtime), [] was not found
~  

どうやら見つからないようです。

これは、設定ファイル(config/depencies.rb)を見ると、

下記の記述がありますので修正する必要があります。

   #do_gems_version   = "0.9.11"
do_gems_version = "0.9.12" # gem list --local | grep data_objectsでバージョンを確認

これで、改めて起動すると無事に立ち上がります。

今日はmerbのインストールから起動までご紹介致しました。

ご覧いただき、ありがとうございました。

rails2.2のbutton_to_function

0

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

rails2.2にてformの入れ子ができないようで、でもどうしても1formに複数ボタンがあり、 複数アクションにしたい場合はどうすればよいか。 調べましたところ、button_to_functionを使いましたら、jsでディレクトリの指定ができるようです。ただ、button_to_functionは名前通りbuttonですのでフォームをsubmitする必要がない時、使えると思います。詳しくはrailsのapiドキュメントをご参照いただければと思います。…

Andorid開発環境構築

0

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

今回はAndroidアプリの開発環境構築しましたので手順を投稿します。

OSはmac10.5です。

大きく分けて下記2項目を行いますが,すでにeclipseの環境が
ある前提で話を進めていきます。

・ android仮想デバイスのインストール
・ eclipseにandroid開発用のプラグインをインストール

1,android仮想デバイスのインストール
   下記よりandroids sdk をダウンロード
    http://developer.android.com/intl/ja/sdk/1.5_r3/index.html
    
    任意のディレクトリに展開(今回はアプリケーションフォルダに展開しました)
    パスを通す
    $export PATH=$PATH:/Applications/android-sdk-mac_x86-1.0_r2/tools

    次にAndroid Virtual Deviceの作成
    $android create avd –name myroid  –target 3
        –name のあとには デバイスの名前
        (–target 1 なら Andorid1.1)
        (–target 2 なら Andorid1.5)
        (–target 3 なら Andorid1.5をベースにGoogleApls)

     今作成したデバイスの起動
    $emulator -avd myroid
   
2,eclipseにandroid開発用のプラグインをインストール
   
   ここからはeclipse上で作業を行いプラグインをインストールします。
   Eclipse 用 ADT プラグインのインストール、eclipseのバージョンによって
   違うようです。(eclipse3.5がリリースされていたので3.5で構築をしました。
   ちょっと重い気がしますが問題なく動作しております)

   eclipseのバージョンが3.3の場合
      → https://dl-ssl.google.com/android/eclipse/
   eclipseのバージョンが3.4の場合
      → https://dl-ssl.google.com/android/eclipse/

   Android DDMSとAndroid Development Toolsにチェックを入れインスール
   eclipseの再起動を行えばプラグインが反映されます。

今回は開発環境構築を行いましたので、次回の投稿ではサンプルをご紹介できればと思います。

Ethnaの動作イメージ。

0

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

Ethnaがどんな動作をしているか追っていきましょう!

  1. クライアントはControllerクラスにアクセスする。
  2. アクセスされたControllerクラスは、クライアントのリクエストに対応する処理が定義されているAction Class(という名前の)オブジェクトを生成し、実行します。
  3. Action Classオブジェクトは処理(バリデーションやDBとのやりとり等)を実行し、結果をControllerオブジェクトに返します
  4. ControllerオブジェクトはAction Classが返した結果に対応するビューオブジェクトを生成します
  5. ビューオブジェクトはHTMLをクライアントに対して表示する

Model・View・Controllerとは?

MVCとは、処理の中核を担当する「Model」、表示・出力を担当する「View」、入力を受け取ってその内容に応じてViewとModelを制御する「Controller」のことで、

この3つの要素を用いてシステムを実装する方式をMVCモデルと呼びます。

Ethnaでは、このModelに含まれる箇所が、Actionclassになります。

といった感じで、それぞれの役割を切り離すことで、仕様変更の影響を受けにくいし、機能ごとの役割が明確化されるんですね。

画像があれば、理解しやすいと思うんですが、用意できなくてスミマセン、、…

MacでOracle Instant Clientを利用する

0

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

先日Snow Leopardが発売されて、私もアップグレードしてみました。OSの起動、停止が早くなり、とても満足です。ただ…

問題もあって、残念ながら以前書いた記事(http://doruby.kbmj.com/8y/20090505/Mac_OS_X_Leopard__Oracle_)のインストール方法が使えなくなってしまいました。原因はSnow LeopardのJavaのバージョンとLeopardのJavaのバージョンが違うためぽいです。ごにょごにょしたら解決しそうですが、今回はさっぱりあきらめて、Railsで単にローカルマシンから別サーバのOracleへつなぐところまでをやってみました。

MacPortsから

	%port search oracle-instantclient
	oracle-instantclient @10.2.0.4.0 (databases)
	    Oracle database connection libraries
	

上記をインストールします。ただし、そのままインストールしようとしても駄目で、instantclientのzip自体は自分でダウンロードしてくる必要があります。

http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/intel_macsoft.html

上記から”instantclient-basic-10.2.0.4.0-macosx-x64.zip “と”instantclient-sdk-10.2.0.4.0-macosx-x64.zip”をダウンロードし、/opt/local/var/macports/distfiles/oracle-instantclientへ配置してください。

その上でインストールを行います。

	% sudo port install oracle-instantclient
	

これはあっけなく終わる筈です。で、実際Railsから接続する為に activerecord-oracle_enhanced-adapter (1.2.1) などもgem からインストールする必要があるのですが、実際の接続に使う ruby-oci8 1.0.6(200909時点stable最新)もインストールします。

このインストールですが、先ほど入れたoracle-instantclientのありかをきちんと教えてあげないといけないです。なので

	% export DYLD_LIBRARY_PATH=/opt/local/lib/oracle
	% gem install ruby-oci8 -v 1.0.6 -- --with-instant-client
	

DYLD_LIBRARY_PATHを設定した上で、ruby-oci8にinstantclientを使うオプションをつけてインストールする必要があるみたいです。

これで無事別サーバのOracleなどに接続できる筈です。

最近人気な記事