ホーム ブログ ページ 59

PostgreSQLで、テーブルのFILLFACTORがいくつに設定されているか、確認するにはどうすれば?

0

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

こんにちは、O2 です。

以前、migrate で、FILLFACTORを設定する投稿をしてみましたが

そもそも、本当に設定されているの?

どうやって確認するの?

などと、質問あると思いますので、それを確認する方法を、ちょっぴり紹介

※性能評価の確認ではないです。

こんな感じのSQLで確認できるんです。

select reloptions from pg_class where relname = ‘テーブル名’;

実際に、DBに接続して確認してみましょう。

select relname, reloptions from pg_class where reloptions is not null;

上記を実行してみると、全体のテーブルでのFILLFACTORの内容が確認できるんです。

       relname         |   reloptions
————————+—————–
users                  | {fillfactor=90}
albums                | {fillfactor=90}
photos                 | {fillfactor=90}
(3 rows)

PostgreSQLのHOT機能を活用するためのmigrateでFILLFACTOR設定してみる

0

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

こんにちは、O2 です。

HOT を使える環境か、確認するモジュールを前回公開してみましたが

今回は、migrate 時に、 FILLFACTORを設定してみましょう。

たとえば、以下の様してみると、users テーブルのFILLFACTORを90%に設定することができるよ。

class PostgresHot < ActiveRecord::Migration

  require ‘dbcheck’

  def self.up
    if DBCHECK.enable_hot
      ActiveRecord::Base.connection.execute(‘ALTER TABLE users SET (FILLFACTOR=90);’)
    end
  end

  def self.down
    if DBCHECK.enable_hot
      ActiveRecord::Base.connection.execute(‘ALTER TABLE users SET (FILLFACTOR=100);’)
    end
  end
end

なぜ、 enable_hotでチェックするかというと、

実は、共有のテストサーバ-には、postgreSQL が、8.3 以下が入っていたりするんです。(^^;;

不正アクセス検知(構成編)

0

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

今回、不正アクセスの検知について、ご紹介します。

不正アクセスの検知方法は、いろいろありますが、ネットワーク型の検知ソフトのため、他のサーバに対するパケットに対しても検知するので、各サーバに検知ソフトを導入しなくても良いからです。
 

不正アクセス検知方法

~snort+Oinkmaster+SnortSnarf+swatch~・snort:ネットワーク型の不正アクセス検知ソフト。パケットに対して、不正なパケットをログ(もしくはDB)に保存する
Oinkmaster:snortのシグネチャ(ルールファイル)を更新(cronで設定することで自動更新します)
SnortSnarf:snortで検知した不正アクセスに対して、ブラウザで閲覧
swatch:不正なパケットをログより、必要なログに対して、メールやビープ音で通報

デメリット

・導入しているサーバに接続しているL2switchがミラーポートの機能がないとネットワーク型になりません。
 (L2switchのメーカによっては、ミラーポート機能があっても、ミラーポートを設定したポートに対して、
 アクセスができないことがあるので要注意!)
・ SnortSnarfをcronで稼動する際は、メモリをかなり使用するため、注意してください。
  (目安 メモリ1GB:1時間に1回、メモリ512GB:1日に1回)

[Java]無名クラス

0

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

無名クラスとは匿名クラスとも呼ばれており、

名称の通り、名前を持たない一時的なクラスのことです。

 (抽象)クラスを継承したり、インターフェースを実装したりして作成を行います。

 記述方法は以下の通り

赤色の部分が無名クラスと呼ばれる部分です。

リストの中身をソートするための順序付けを定義するインターフェースを実装しています。

public class JavaTest {
public static void main(String[] args) {
		List<Test> list = new ArrayList<Test>();
list.add(new Test(3,"boo"));
list.add(new Test(2,"foo"));
list.add(new Test(4,"woo"));
list.add(new Test(1,"goo"));

System.out.println(list);
Collections.sort(list, new Comparator<Test>() {
public int compare(Test o1, Test o2) {
return o1.id.compareTo(o2.id);
}
});

System.out.println(list);
}
}

class Test {
public Test(Integer id,String name) {
this.id = id;
this.name = name;
}

public Integer id;
public String name;
@Override
public String toString() {
return id + ":" + name;
}


}

無名クラスを使わずに書くと以下のようになります。


public class JavaTest {
public static void main(String[] args) {
List<Test> list = new ArrayList<Test>();
list.add(new Test(3,"boo"));
list.add(new Test(2,"foo"));
list.add(new Test(4,"woo"));
list.add(new Test(1,"goo"));

System.out.println(list);
Collections.sort(list, new ListComparator());
System.out.println(list);
}
}

class Test {
public Test(Integer id,String name) {
this.id = id;
this.name = name;
}

public Integer id;
public String name;
@Override
public String toString() {
return id + ":" + name;
}


}

class ListComparator implements Comparator<Test> {
public int compare(Test o1, Test o2) {
return o1.id.compareTo(o2.id);
}
}

コード量に大して差はないのですが、
比較の条件が近くにありコードが見やすくなっています。

他にもいろいろな利点があったりします。

一時的に一部のメソッドを上書きして使用したい場合などの重宝したりします。

(テストを行う際にモックを作成する代わりに疑似データを返すように上書きするなど)

簡単にですが今回はここまでに・・・。

MySQLを診断してチューニングポイントを教えてくれるツール「MySQLTuner」の紹介

0

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

MySQLを診断してチューニングポイントを教えてくれるツール「MySQLTuner

このツールのCentOS5.3へのインストールを実施してみます。

MySQLTuner」のインストールから、使用方法を紹介します。

このツールはMySQLを診断し、設定値をどのように書き換えたらいいか教えてくれます。 (全部これに頼るというよりは参考程度のようですので、注意が必要です)

インストールは簡単。 任意のディレクトリにスクリプトをダウンロードし、実行権限を与えるだけです。

# wget http://mysqltuner.com/mysqltuner.pl

# chmod +x mysqltuner.pl

実行方法は以下の通りです。

# ./mysqltuner.pl

>> MySQLTuner 1.0.0 – Major Hayden

>> Bug reports, feature requests, and downloads at http://mysqltuner.com/

>> Run with ‘–help’ for additional options and output filtering [!!] Successfully authenticated with no password – SECURITY RISK!

——– General Statistics ————————————————–

[–] Skipped version check for MySQLTuner script

[OK] Currently running supported MySQL version 5.0.45-log

[OK] Operating on 64-bit architecture

——– Storage Engine Statistics ——————————————-

[–] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster

[–] Data in MyISAM tables: 51M (Tables: 77)

[–] Data in InnoDB tables: 63M (Tables: 103)

[OK] Total fragmented tables: 0

——– Performance Metrics ————————————————-

[–] Up for: 7d 1h 1m 2s (121K q [0.200 qps], 120K conn, TX: 103M, RX: 9M)

[–] Reads / Writes: 100% / 0%

[–] Total buffers: 6.1G global + 34.2M per thread (100 max threads)

[OK] Maximum possible memory usage: 9.4G (59% of installed RAM)

[OK] Slow queries: 0% (0/121K)

[OK] Highest usage of available connections: 41% (41/100)

[OK] Key buffer size / total MyISAM indexes: 3.9G/106.2M

[OK] Query cache efficiency: 84.6% (269 cached / 318 selects)

[OK] Query cache prunes per day: 0

[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 4 sorts)

[!!] Temporary tables created on disk: 47% (18 on disk / 38 total)

[OK] Thread cache hit rate: 99% (41 created / 120K connections)

[OK] Table cache hit rate: 62% (10 open / 16 opened)

[OK] Open file limit used: 0% (15/8K)

[OK] Table locks acquired immediately: 100% (58 immediate / 58 locks)

[OK] InnoDB data size / buffer pool: 63.6M/2.0G

——– Recommendations —————————————————–

General recommendations:

Variables to adjust:

    max_connections (> 100)

    wait_timeout (> 20000)

    interactive_timeout (> 20000)

    query_cache_size (> 100M)

だらだらと結果が返ってきますが、「Recommendations」以降におすすめの 設定値が出力されます。(文中の[!!]箇所は改善が必要な箇所のようです)

私が実施したMySQLバージョン、搭載メモリーは以下の通りです。

 MySQLversion 5.0.45  搭載メモリー16GB

おすすめの設定値を参考に、「my.cnf」を書き換え、再び「./mysqltuner.pl」 の実行を繰り返していくと、チューニングの手助けになりそうです。

[python]プロトタイプをcursesで

0

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

みなさんはプログラムのアイデアが浮かんだとき、ロジックはできたのに、それを表現するUIが書けなくて悩んだ事はありませんか? GUIは手間がかかるし、文字だけだと味気ない。 そんなときにはcursesです。

cursesはターミナル上の操作を行うライブラリです。 windowの様に画面に枠を書いたり、文字に色を付けたりなどが簡単にできる様になっています。GUIほどきれいなものはできませんが、ただの文字よりは洗練されたUIが作れます。 今回はpythonでターミナルUIを使ったチャットプログラムをつくってみました。 ソースはこちら。chat.py

python2.6.1で動作確認しています。

使い方は$ python chat.py -s

でサーバ起動、$ python chat.py

でクライアント起動です。 起動すると下図のような画面が表示されます。

枠線と色がついただけですが、けっこう見栄えがすると思いませんか?

さて、cursesを使うときのきもの部分をちょっと解説します。

class CursesWindow():

  def __init__(self,host=”):

    locale.setlocale(locale.LC_ALL,”)

    curses.wrapper(self.loop,host)

コンストラクタで、curses.wrapperを呼び出しています。

このラッパーがなかなかのやり手で、必要な初期化処理をしてくれた上に、 例外が発生したときにターミナルの状態を復元して終了してくれます。 これをせずに、cursesを使ったプログラムが例外で落ちると、ターミナルに文字を打ち込んでも表示されなくなったりして、大いに困ります。

localeの設定は日本語の表示で必要らしいです。よくわかりませんが、おまじない。

wapperに渡しているloopはメイン処理を行う関数です。 中でループをまわしてチャットの受信、送信処理を行っています。

準備はこれで終わりです。なんと簡単!。

あとはloop関数にわたってきたWindowオブジェクトを使って、枠線を書いたり文字を書いたりします。

このようにcursesを使うとGUIには劣るものの、そこそこ見栄えのいいUIがさらっと作れます。皆さんもぜひ一度お試し下さい。

高さの違う2つの要素を縦中央に並べる(垂直方向にセンタリングする)方法

0

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

上の画像のような高さの違う2つの要素を、縦中央に並べる方法をご紹介します。
サンプルでは画像とテキストですが、テキスト同士、画像同士でも 同じことができます。

確認ブラウザ IE6~8、FF2、3

まずはXHTML<div id=”box”>
    <span class=”item_l”><img src=”sample.jpg” width=”171″ height=”173″ alt=”sample” /></span>
    <div class=”item_r”><p>何かに使おうと思って描いたイラストです。<br />ネットワークっぽいイメージ。</p></div>
</div>

次はCSS.item_l {
  display: -moz-inline-box;
  display: inline-block;
  vertical-align: middle;
}

.item_r {
  display: -moz-inline-box;
  display: inline-block;
  vertical-align: middle;
}

/*IE6用ハック*/
* html .item_l,
* html .item_r {
  display: inline;
  zoom: 1;
}

/*IE7用ハック*/
*:first-child+html .item_l,
*:first-child+html .item_r {
  display: inline;
  zoom: 1;
}

p {
  width: 300px;
  line-height: 130%;
  margin-left: 20px;
}

Firefox2対しては「display: -moz-inline-box;」という独自のプロパティで対応。
IE6、7に対しては「display: inline;」に「zoom: 1;」とすることで
inline-block扱いになります。

また、「display:inline-block」内のブロック要素の幅を指定しないと、
その親要素に幅を指定していてもはみ出してしまいます。
サンプルの場合は右側のテキストのP要素に幅を指定しています。

囲う要素が多くて少々見辛いですが、結構使うシーンがあると思いますので
参考にしてみてください。

railsでの環境使い分け production.rb development.rb

0

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

こんにちはtacchiです。

今回はrails開発でよくやる環境の使い分けを書きます。

短い記事ですが、お付き合い下さい。

KBMJで開発を行う場合、production、developmentは次のようなシーンで 利用されます。

本番環境:production

個人の開発環境:development

では、テストサーバとかどうすんの?

とかの疑問が浮かぶと思うんですが、このようにしてます。

本番環境:production

個人の開発環境:development

テストサーバ:stagingでは、staging環境の構築手順を記載します。

まずはプロジェクト生成

rails hogehoge

create

create app/controllers

create app/helpers

create app/models

create app/views/layouts

create config/environments

create config/initializers

create config/locales …

staging作成

以下のようなhogehogeプロジェクトが作成されます

-rw-r–r– 1 tacchi staff 10011 8 4 11:10 README

-rw-r–r– 1 tacchi staff 307 8 4 11:10 Rakefile

drwxr-xr-x 6 tacchi staff 204 8 4 11:10 app

drwxr-xr-x 9 tacchi staff 306 8 4 11:10 config

drwxr-xr-x 2 tacchi staff 68 8 4 11:10 db

drwxr-xr-x 3 tacchi staff 102 8 4 11:10 doc

drwxr-xr-x 3 tacchi staff 102 8 4 11:10 lib

drwxr-xr-x 6 tacchi staff 204 8 4 11:10 log

drwxr-xr-x 11 tacchi staff 374 8 4 11:10 public

drwxr-xr-x 11 tacchi staff 374 8 4 11:10 script

drwxr-xr-x 8 tacchi staff 272 8 4 11:10 test

drwxr-xr-x 6 tacchi staff 204 8 4 11:10 tmp

drwxr-xr-x 3 tacchi staff 102 8 4 11:10 vendor

staging.rbの作成

cp config/environments/production.rb config/environments/staging.rbdatabase.ymlの編集 デフォルトで以下のようなconfig/database.ymlが作成されますので編集します。

# SQLite version 3.x

# gem install sqlite3-ruby (not necessary on OS X Leopard)

development:

  adapter: sqlite3

  database: db/development.sqlite3

  pool: 5

  timeout: 5000

# Warning: The database defined as “test” will be erased and

# re-generated from your development database when you run “rake”.

# Do not set this db to the same as development or production.

test:

  adapter: sqlite3

  database: db/test.sqlite3

  pool: 5

  timeout: 5000

production:

  adapter: sqlite3

  database:

  db/production.sqlite3

  pool: 5

  timeout: 5000

staging追加

staging:

adapter: sqlite3 #この辺りは、postgresql、mysqlなどお好きなように

database: db/production.sqlite3 #ここも同上

pool: 5

timeout: 5000

最後の仕上げ

これで、migrate流せばよいだけですねrake db:migrate RAILS_ENV=staging

補足(script/consoleを実行する場合)

ruby script/console -e staging

補足(passengerを使う場合)

apacheのconfの以下を変更(すでにpassengerの記述がある前提)RailsEnv production   ⇒ RailsEnv staging

findコマンドのmtimeオプションについて

0

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

find コマンドの -mtime オプションを指定することで最後にデータが修正された日時で検索することができます。
日時の指定方法も色々あるのですが、個人的にわかりづらかったので以下のパターンだとどのような結果になるのか、実際に動かしてみることにしました。


試すパターン
find -mtime 日数
find -mtime +日数
find -mtime -日数

結果からいうと、
find -mtime -3 3日(72時間)前〜現在
find -mtime 3  3日(72時間)前〜4日(96時間)前
find -mtime +3 4日(96時間)前〜過去
こうなります。


とりあえず、確認用のファイルを適当に作って試してみます。
touch -t 07140000 0714.txt
touch -t 07130000 0713.txt
touch -t 07120000 0712.txt
touch -t 07110000 0711.txt
touch -t 07100000 0710.txt
こんな感じで空のファイルを5つ作成しました。
ls
0710.txt  0711.txt  0712.txt  0713.txt  0714.txt

touch の -t オプションでタイムスタンプを設定しています。
設定できているか確認してみます。

atime(最後にファイルにアクセスした時刻)
% ls -alu
total 8
drwxr-xr-x  2 sk sk 4096 2009-07-14 11:34 ./
drwxr-xr-x  7 sk sk 4096 2009-07-14 11:29 ../
-rw-r–r–  1 sk sk    0 2009-07-10 00:00 0710.txt
-rw-r–r–  1 sk sk    0 2009-07-11 00:00 0711.txt
-rw-r–r–  1 sk sk    0 2009-07-12 00:00 0712.txt
-rw-r–r–  1 sk sk    0 2009-07-13 00:00 0713.txt
-rw-r–r–  1 sk sk    0 2009-07-14 00:00 0714.txt

mtime(最後にファイルを変更した時刻)
% ls -al
total 8
drwxr-xr-x  2 sk sk 4096 2009-07-14 11:32 ./
drwxr-xr-x  7 sk sk 4096 2009-07-14 11:29 ../
-rw-r–r–  1 sk sk    0 2009-07-10 00:00 0710.txt
-rw-r–r–  1 sk sk    0 2009-07-11 00:00 0711.txt
-rw-r–r–  1 sk sk    0 2009-07-12 00:00 0712.txt
-rw-r–r–  1 sk sk    0 2009-07-13 00:00 0713.txt
-rw-r–r–  1 sk sk    0 2009-07-14 00:00 0714.txt

ctime(最後にファイルを変更した時刻)
% ls -alc
total 8
drwxr-xr-x  2 sk sk 4096 2009-07-14 11:32 ./
drwxr-xr-x  7 sk sk 4096 2009-07-14 11:29 ../
-rw-r–r–  1 sk sk    0 2009-07-14 11:32 0710.txt
-rw-r–r–  1 sk sk    0 2009-07-14 11:32 0711.txt
-rw-r–r–  1 sk sk    0 2009-07-14 11:32 0712.txt
-rw-r–r–  1 sk sk    0 2009-07-14 11:32 0713.txt
-rw-r–r–  1 sk sk    0 2009-07-14 11:32 0714.txt

大丈夫そうですね。

ではさっそく以下を試してみます。
ちなみに実行したの7月14日のお昼頃です。
find ./ -mtime -3
find ./ -mtime 3
find ./ -mtime +3

結果。
find ./ -mtime -3
./
./0714.txt
./0713.txt
./0712.txt

find ./ -mtime 3
./0711.txt

find ./ -mtime +3
./0710.txt

図にまとめるとこんな感じでしょうか。

ではもうひとつ。
同様の操作をdaystartオプションを付与して試してみます。
find ./ -daystart  -mtime -3
find ./ -daystart  -mtime 3
find ./ -daystart  -mtime +3


結果。

find ./ -daystart  -mtime -3
./
./0714.txt
./0713.txt
./0712.txt

find ./ -daystart  -mtime 3
./0711.txt

find ./ -daystart  -mtime +3
./0710.txt

結果は同じですが、0時を基準にするので、図にするとこのようになります。

 図にするとよりわかりやすいですね。以上になります。

gemをユーザディレクトリにインストール

0

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

新しく書き込みを行います。
今後、記事を書きますので、宜しくお願い致します。
今回は、gemをユーザディレクトリ以下に設置する方法をメモします
rubygemsをダウンロードし、同封されているsetup.rbを

ruby setup.rb --prefix=~/gems

のように、インストールディレクトリを指定しセットアップを開始します。 次に、.bashrcなどにGEM_HOMEとRUBYLIBのPATHを指定すれば準備が整いました。

export GEM_HOME=~/gems
export RUBYLIB=~/gems/lib

これでユーザごとに異なるgemや複数のバージョンを扱えるようになります。

ブラウザのデフォルトスタイルをリセットする

0

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

こんにちは、maiです。今回はコーディングでデザイン用にcssを書き出す前の下準備のお話。

ただhtmlを書いただけでも、見出しは大きかったり、
リストには黒い丸が表示されたり、strongは太字になったりemは斜体になったり、
そのすべてはブラウザがもともと持っているstyleです。

まあ…正直邪魔ですよね。
リストのマークは黒丸じゃなくて画像で作った矢印にしたいし…とか。

そんなとき、いちいち
list-style: none;
なんて書くのはめんどくさいことこの上ない。
1カ所だけならいいんですけどね。

 なので、もう最初からなかったことにしたいstyleはリセットしてしまいましょう。
↓に実際に使ってるリセット用cssを一気に公開です。

/* Universal selector */
* {
margin:0;
padding:0;
position:static;
}

/* Text(Heading) */
h1, h2, h3, h4, h5, h6 {position:static;}

/* Text(Block) */
address, blockquote, div, p, pre {
font-style:normal;
font-weight:normal;
position:static;
}

/* Text(Inline) */
abbr, acronym, br, cite, code, dfn, em, kbd, q, samp, span, var {
position:static;
border:none;
font-style:normal;
font-weight:normal;
}
strong {
position:static;
border:none;
font-style:normal;
font-weight:bold;
}

/* Hypertext */
a {text-decoration: none;}

/* List */
ul, dl, dt, dd {
list-style-type:none;
font-style:normal;
font-weight:normal;
position:static;
}
ol {list-style-type:none;}

/* Image */
img {
border:0;
vertical-align:top;
}

/* Scripting */
noscript, script {
font-style:normal;
font-weight:normal;
position:static;
}

/* Etc. */
hr, table, form, fieldset, del {
font-style:normal;
font-weight:normal;
position:static;
}

ーーーーーーーーーーーーーーーーーーーーーーーーーここまで

これを使うと、見出しも段落もリストもなにもかも、
何一つ変化のないテキストとして表示されるので、
ここに適宜必要なstyleを追加していきます。

リセット用のcssは1つのファイルにまとめておくと、
使い回しがきいて非常に便利になります。

swfmillのインストール(makeのところ)でエラーがでた

0

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

最近Flash Liteを使うことになり、動的なFlash Lite作成のために、swfmillを入れることになりました。

インストールして、いざmake!というところで、エラーがでましたので、
その解決方法をご紹介します。

==============================
インストール環境:Ubuntu 9.04
swfmill:0.2.12
gcc:4.3.3
==============================

  1. swfmillをダウンロードします。
    # wget http://swfmill.org/releases/swfmill-0.2.12.tar.gz
    # tar xzf swfmill-0.2.12.tar.gz
    # cd swfmill-0.2.12
  2. ビルドします。
    # ./configure
  3. makeします。# make
    Making all in src
    make[1]: ディレクトリ `/usr/local/src/swfmill-0.2.12.2/src’ に入ります
    make  all-recursive
    (省略)
    swft_css.cpp: In function ‘void parse_color(std::string, CSSColor*)’:
    swft_css.cpp:25: warning: format ‘%x’ expects type ‘unsigned int*’, but argument 3 has type ‘unsigned char*’
    swft_css.cpp: In function ‘void swft_unit(xmlXPathParserContext*, int)’:
    swft_css.cpp:197: error: ‘strcmp’ was not declared in this scope
    make[3]: *** [libswft_la-swft_css.lo] エラー 1
    make[3]: ディレクトリ `/usr/local/src/swfmill-0.2.12.2/src/swft’ から出ます
    make[2]: *** [all-recursive] エラー 1
    make[2]: ディレクトリ `/usr/local/src/swfmill-0.2.12.2/src’ から出ます
    make[1]: *** [all] エラー 2
    make[1]: ディレクトリ `/usr/local/src/swfmill-0.2.12.2/src’ から出ます
    make: *** [all-recursive] エラー 1

    エラーになってしまいました。残念です。

    調べてみましたところ、gcc 4.2以前とgcc 4.3のバージョンの違いに問題があるようでした。
    yamcha 0.33 が fedora 9 (gcc 4.3) で make できない、そんなとき エラーを出しているファイルに #include <string.h>を追加しないとだめなようです。
    (gccをバージョンダウンさせてもよさそうです。)
    というわけで、swft_css.cppに書き込みます。
     何回か同じエラー(でもエラーを出しているファイルは変わっている)が出ますので、
    エラーを出しているファイルに次々と#include <string.h>を加えてmakeしていきます。
    最終的には通ります。
    これで入りました。
  4. make installします。
    # make install

確認してみます。$ swfmill

swfmill 0.2.12.2
     XML-based SWF (Shockwave Flash) processing tool

入りました。

keepalivedの設定

0

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

どうもメガネです。16回目です。

「keepalived」とはIPVS※を冗長化してるものです。
※IPVSとはロードバランサを中心に、リアルサーバーのクラスタとして
  バーチャルサーバーを構築することで、エンドユーザーからは1つのサーバー
  として見えるようにすることです。1~4はLBサーバで行います。
5~は実サーバで行います。

1 ipvsadmのインストール
実際の操作はこのipvsadmを利用することになります。
#yum install ipvsadm

2 keepalivedのインストール
RPMを使用するので適当に用意してください。
#rpm -ivh keepalived-1.1.13-6.i386.rpm

3 設定ファイルの変更
#vi /etc/keepalived/keepalived.conf

以下の場合

VIP 10.0.0.100
ソースIP 10.0.0.101
ソースIP 10.0.0.102

############################################################
virtual_server 10.0.0.100 80 {
  delay_loop  3
  lvs_sched   rr
  lvs_method  DR
  protocol    TCP
  real_server  10.0.0.101 80 {
    TCP_CHECK {
      connect_timeout 30
    }
  }
  real_server  10.0.0.102 80 {
    TCP_CHECK {
      connect_timeout 30
    }
  }
}
vrrp_instance vip_test {
  state BACKUP
  interface eth0
  virtual_router_id 1
  priority 100
  virtual_ipaddress {
    10.0.0.100 dev eth0
  }
}
############################################################

4 keepalivedの起動
#/etc/init.d/keepalived start
 VIPが応答することを確認します。
#ping 10.0.0.100

実IPが10.0.0.101と10.0.0.102サーバで以下のループバックの設定を行います。

5 ループバックの設定

############################################################
DEVICE=lo:0
IPADDR=10.0.0.100
NETMASK=255.255.255.255
NETWORK=10.0.0.0
BROADCAST=10.0.0.255
ONBOOT=yes
############################################################

#ifup lo:0

6 ARPへの対応
#vi /etc/sysctl.conf

############################################################
##最終行に以下を追加
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
############################################################

#sysctl -p

以上で終了です。

Apacheの負荷状況をモニタリングするツール「apachetop」

0

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

TOPコマンドのようにapacheログからモニタリングできる「apachetop」
このツールのCentOS5.3へのインストールを実施してみます。

インストール方法はいくつかありますが、rpmでインストールしてみました。
(「yum install apachetop」もあります)

# wget http://centos.karan.org/el4/extras/stable/i386/RPMS/apachetop-0.12.5-2.el4.kb.i386.rpm
# rpm -ivh –nodeps apachetop-0.12.5-2.el4.kb.i386.rpm

これでインストールは終わりです。
利用方法は下記のようなので、実行してみます。

書式:apachetop -f アクセスログのファイル名

# apachetop -f /usr/local/apache2/logs/access_log
apachetop: error while loading shared libraries: libreadline.so.4: cannot open s
hared object file: No such file or directory

エラーになりました。
エラー解消のため、シンボリックリンクを張ります。
(エラーにならなければこの設定は飛ばしてください)

# cd /usr/lib
# ln -s libreadline.so.5.1 libreadline.so.4

再び実行
すると、下記が立ち上がりました。

last hit: 05:33:53         atop runtime:  0 days, 00:01:00             05:33:54
All:          346 reqs (   6.1/sec)        152.7K ( 2742.5B/sec)     451.8B/req
2xx:       9 ( 2.6%) 3xx:     337 (97.4%) 4xx:     0 ( 0.0%) 5xx:     0 ( 0.0%)
R ( 30s):     105 reqs (   3.5/sec)         35.1K ( 1197.9B/sec)     342.2B/req
2xx:       6 ( 5.7%) 3xx:      99 (94.3%) 4xx:     0 ( 0.0%) 5xx:     0 ( 0.0%)

 REQS REQ/S    KB KB/S URL
   11  0.61   7.2  0.4*/projects/activity/test
   10  0.33   0.0  0.0 /stylesheets/application.css
   10  0.33   0.0  0.0 /javascripts/dragdrop.js
   10  0.33   0.0  0.0 /javascripts/effects.js
   10  0.33   0.0  0.0 /javascripts/prototype.js
   10  0.33   0.0  0.0 /stylesheets/jstoolbar.css
   10  0.33   0.0  0.0 /javascripts/application.js
   10  0.33   0.0  0.0 /javascripts/controls.js
    6  0.33   0.0  0.0 /images/feed.png
    5  0.28   0.0  0.0 /images/attachment.png
    3  0.14   0.0  0.0 *
    2  0.10   5.7  0.3 /projects/show/test
    2  0.10   0.0  0.0 /images/time.png
    2  0.07   0.0  0.0 /images/22×22/projects.png
    2  0.07   0.0  0.0 /
    1  1.00  22.2 22.2 /projects/test/issues
    1  1.00   0.0  0.0 /images/true.png

リクエストされたURL等が参照できます。
デフォルトの設定ですと、直近の30秒のものがモニタリングされ、5秒置きに再描画します。
実行時のオプション指定で、モニタリング時間、描画時間等の調整が可能です。
例.直近60秒のログをモニタリングし、10秒置きに再描画

apachetop -f /usr/local/apache2/logs/access_log -T 60 -d 10

apachetop実行時に指定できるコマンドは下記の通りです。
※ターミナル上で”apachetop -h”を入力すれば参照できます。

# apachetop -h
ApacheTop v0.12.5 – Usage:
File options:
  -f logfile  open logfile (assumed common/combined) [/var/log/httpd/access_log]
              (repeat option for more than one source)

URL/host/referrer munging options:
  -q          keep query strings [no]
  -l          lowercase all URLs [no]
  -s num      keep num path segments of URL [all]
  -p          preserve protocol at front of referrers [no]
  -r          resolve hostnames/IPs into each other [no]

Stats options:
  Supply up to one of the following two. default: [-T 30]
  -H hits     remember stats for this many hits
  -T secs     remember stats for this many seconds

  -d secs     refresh delay in seconds [5]

  -h          this help

Compile Options: -HAVE_KQUEUE -HAVE_FAM -ENABLE_PCRE
Polling Method: stat

また、apachetop実行中に使用できるコマンドは下記の通りです。
※apachetop実行中に”h”を入力すれば、参照できます。

ApacheTop version 0.12.5, Copyright (c) 2003-2004, Chris Elsworth

ONE-TOUCH COMMANDS
d          : switch item display between urls/referrers/hosts
n          : switch numbers display between hits & bytes or return codes
h or ?     : this help window
p          : (un)pause display (freeze updates)
q          : quit ApacheTop
up/down    : move marker asterisk up/down
right/left : enter/exit detailed subdisplay mode

SUBMENUS:
s:  SORT BY: [the appropriate menu will appear for your display]
        r) requests  R) reqs/sec  b) bytes  B) bytes/sec
        2) 2xx   3) 3xx   4) 4xx   5) 5xx

t:  TOGGLE SUBDISPLAYS ON/OFF:
        u) urls  r) referrers  h) hosts

f:  MANIPULATE FILTERS:
        a) add/edit menu c) clear all  s) show active (not done yet)
        a:  ADD FILTER SUBMENU
                u) to urls  r) to referrers  h) to hosts

モニタリングを終了したい場合は”Ctrl + c”で抜けてください。


どのURLに対してアクセスが多い等、リアルタイムに確認したい場合に使えそうですね。

apacheでアクセス制限をしてみよう その2

0

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

こんにちは。タジです。

今回は前回の続きで、apacheのもう一つのアクセス制限である、IP制限について解説したいと思います。
IP制限とはその名の通り、アクセス元のIPを指定し、該当するIP以外からの接続は403エラー(権限がありませんというエラー)を返すようにする設定です。

では実際に設定してみましょう。

やり方は、apacheの設定ファイル内の、ディレクトリやロケーションのディレクティブ内に、以下のように記述します。

Order deny,allow

Deny from all

#localhost

Allow from 127.0.0.1

#gateway

Allow from 192.168.1.1

上記はアクセスがあった際、サーバ内で自身を参照した時と特定のゲートからのみ接続を許可するという設定です。

Allowを追加することで、客先や監視会社など、IPを追加することが可能です。 この書き方は、.htaccessに書いた場合でも同じになります。

今回はここまでです。

それではまた次回。

不要なCSSを洗い出せるRuby製のツール

0

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

 こんにちは。

 KBMJでRuby on Rails を使ったweb開発に携わっているyoppiといいます。

 今回はRuby製の不要なCSSを洗い出せるツールをRailsのプロジェクトで使う場合の説明をさせていただこうと思います。

 Ruby製の不要なCSSを洗い出せるツールは、css-redundancy-checkerというものです。

 ツールといっても1つのrubyファイルなだけで、セットアップといってもSubversionのリポジトリからチェックアウトするだけです。サイトにも書いてありますが、hpricotが必要なので入っていなければ、インストール(gemで入れるのが簡単です)する必要があります。

 Railsプロジェクトのscripts/css-redundancy-checkerというところにチェックアウトしたとすると、Railsプロジェクトのルートディレクトに移動して、以下のような感じで実行できます。(下記の例は、public/stylesheets/common.cssで不要な項目をチェックしたい場合です)。ちなみに、ローカル環境の場合は、script/server等でサーバーを起動しておく必要があります。

 ruby script/css-redundancy-checker/css-redundancy-checker.rb public/stylesheets/common.css check_urls.txt

【実行結果例】

Parsing all html files within check_urls.txt for selectors in public/stylesheets/common.css...
-------------
Parsing http://localhost:3000/
Parsing http://localhost:3000/users
Parsing http://localhost:3000/users/show/1
・・・-------------
The following selectors are NOT used in of the html files in check_urls.txt
-------------
#main.sub・・・

 check_urls.txtには、チェックしたいページのURLを1行ごとに書いてあります。(ちなみにファイル名は、.txtで終わっていれば何でも大丈夫です)

【記述例】

http://localhost:3000/ http://localhost:3000/usershttp://localhost:3000/users/show/1・・・

 チェックしたいCSSが複数ある場合は、そのファイル分だけ、実行していくことになります。

 このツールだとローカル環境でもチェックできるがいいですね。Rails開発ならRubyも入っているので便利です。

 CSSファイルにに不要な項目が増えてきていると感じ始めたら、是非使ってみて下さい!

監視ツール Nagios

0

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

他のメンバーがすでに「munin」や「cacti」について
記事を投稿していますので、私は「nagios」について書いてみたいと思います。

■nagiosとは?
ネットワーク・サーバ監視のためのアプリケーションソフト。
オープンソースで開発をされ、自由に使用できる。

また各種プラグインも豊富であり
機器の生死確認以外にも、機器のリソース(memory使用量やHDD使用量など)についても
監視ができるなかなかの優れものです。

□入手先
Nagiosの公式HP
http://www.nagios.org/

他にも「yum」や「apt」でインストールが出来るようです。
今まで、centOSやdebianの環境で動くnagiosサーバを見たことありますが
ソースからコンパイルした場合とパッケージ管理からインストールした時の違いや
バージョンによるデフォルトに用意されているコンフィグファイルの違いなど
それぞれ違いがありますので、複数台用意する際は注意が必要です。



■インストールについて
 OS        =    CentOS 5.3 (selinuxは今回停止をしています)

 nagiosの種類    =    nagios-3.0.6 (執筆時の最新安定版)
 

□必要なモジュールやソフトを確認

<参照>
http://nagios.sourceforge.net/docs/3_0/about.html#requirements
1. A web server (preferrably Apache)
2. Thomas Boutell’s gd library version 1.6.3 or higher (required by the statusmap and trends CGIs)


「1」のwebサーバについては当たり前というところでしょう。
その他に「gd」を必要とするようですのでインストールされいなければ
インストールをしておきます。

例)
# yum -y install httpd gd gd-devel

また、この他にもソースをコンパイルする際にCのコンパイラが必要となりますので
「gcc」あたりもインストールされていなければ、インストールをしておきます。

例)
# yum -y install gcc glibc glibc-common


□インストールを開始
・nagiosユーザの追加、パスワードの設定

useradd -m nagios
passwd nagios


・nagiosの制御に関係するグループを追加、ユーザーの追加を行う

groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd apache(webサーバの実行ユーザ!)


・ソフトとプラグインをダウンロードしてくる
cd /usr/local/src/
wget  http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.6.tar.gz
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz


・nagiosのコンパイル・インストール
tar zxvf nagios-3.0.6.tar.gz
cd nagios-3.9.6
./configure –with-command-group=nagcmd
make all
make install
make install-init        (起動スクリプトのインストール)
make install-config        (コンフィグファイルのインストール)
make install-commandmode    (各種コマンドのインストール)
make install-webconf        (webサーバ向けのコンフィグをインストール)


・ベーシック認証用のパスワードファイルを作成
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
(パスワードを聞かれるので入力をする。)


■プラグインのインストール
監視の際に使うコマンドが定義されたプログラムファイルをインストールします。

・ソフトとプラグインをダウンロードしてくる
cd /usr/local/src/
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz


・プラグインのコンパイル・インストール
tar zxvf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11
./configure –with-nagios-user=nagios –with-nagios-group=nagios
make
make install


これだけ。
あとは「/usr/local/nagios/libexec/」に「check-***」がという実行ファイルが大量にあれば成功。


■nagiosの起動
・ウェブサーバを再起動をする(省略)

・コンフィグファイルの構文にミスがないか、確認を行う
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

errorやwarningが「0」であればOK。
もしもおかしい場所があれば教えてくれるので、大変便利なコマンドです!

・nagiosの起動
/etc/init.d/nagios start


http://??.????.??/nagios/
アクセスして確認してみましょう!


———————–

基本的なnagiosのインストールは以上です。
このほか、nagiosのコマンドにPATHを通したり
「chkconfig」コマンドを使用、naigosの自動起動の設定など
行った方が良いでしょう。

また、今回はselinuxは停止した環境で構築を行いましたが
selinuxを使用されている場合

chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
chcon -R -t httpd_sys_content_t /usr/local/nagios/share/

このような感じで、設定をしておく必要があるかと思われます。

QRコード【大きさを決める】

0

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

みわです。
本日もQRコードについて書こうと思います。
「QRコードの大きさについて!」QRコードは、白と黒のポチポチでできています(笑
このぽちぽちの数と大きさが、QRコード全体のサイズを決めます。
ポチポチは、「セル」っていいます。

1)数で大きくする
単純ですが、縦横に使うセルの数を増やせば、QRコードそのもののサイズは大きくなります。
→「バージョンを大きくする」といいます。

2)ポチポチの大きさを変える
1辺あたり10個のセルであっても、セルそのもののサイズが大きくなれば、QRコードの大きさも大きくなります。
「拡大コピー」をイメージしていただけるとわかりやすいかと思います。
→「エレメントサイズを大きくする」といいます。

「QRコードが読み取れない(><」とき、基本的には2)の方法で拡大します。
理屈は単純です。
「新聞の字が細かくて読みにくいんだけど、拡大コピーを取ったら読みやすくなった!」ってことです。

そうはいっても、サイトのデザイン上「ここまでが限界」ってラインもあるでしょう。
その時は、1)の方法と併用して拡大します。

QRのサイズは、以下の方法で求めることが可能です。
セルのサイズ(エレメントサイズとも)×1辺あたりのセルの数
ただし、セルサイズはmmのため、出てくる値もmmになります。
htmlやcssではピクセルという単位を使ってますから、mm⇔ピクセルの単位変換が必要になります。
でもまぁ、目安という意味ではmmでも十分かと・・・。

前回の「余白を取る」ことと併せて、お使いください。
これでQRコードはばっちり読み取れるようになるはず!
ケータイサイトへの誘導などで、QRコードは便利に利用されることが増えてきました。
せっかく作ったなら、しっかり読みとってもらわないと誘導もできませんから、読み取ってもらえるようにしたいですね!

次回は、「QRコードが持てる情報と大きさについて」を説明しようと思います(たぶん)。

簡単、携帯flash待受時計をつくる

0

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

【テーマ: 簡単、携帯flash待ち受け時計をつくる】

【使用するモノ: flashLite1.1 photoshop】

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

(1)サイズ240px×400pxの新規flashファイルを作成します。

(2)適当に用意した背景を、ステージに読み込みます。

(3)ダイナミックテキストで、テキスト領域を3つ用意します。

   それぞれに以下の3つの変数名をあてます。

flash待ち受け時計制作

(4)Actionscript用のレイヤーを追加し、フレームを2つ用意します。

携帯待ち受けflashのActionscriptレイヤー

(5)フレーム1に下記のスクリプトを記入して時間を読みとってもらいます。

hour=fscommand2 (“GetTimeHours”) ;
minute=fscommand2 (“GetTimeMinutes”) ;
second = fscommand2(“GetTimeSeconds”);
if (minute<10) {
            minute=”0″ add minute
 }
if (second<10) {
            second=”0″ add second
 }

(6)フレーム2に、フレーム1を繰り返すように書きます。

gotoAndPlay (1);

(7)flashlite1.1で書き出して、完成です。

以上、「簡単、携帯flash待ち受け時計をつくる」でした。

とっても簡単なので、flashliteの初歩の初歩を学ぶのに良いのではと思われます。

ruby on railsでCAPTCHA(画像認証)を実装する。 simple_captcha編

0

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

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

今回はruby on railsでCAPTCHA(画像認証)を利用する方法です。
 * CAPTCHA(画像認証)とはgoogleやyahooなど会員登録をするときに表示される、ぐにゃぐにゃした文字の画像です。

CAPTCHAを実装するのはjavascriptとかrubyのプラグインも色々ありますが、

今回は ruby on railsプラグインのsimple_captchaを使用してみます。

 simple_captchaの特徴

  •    画像スタイルを選べる(ランダムも可能)
  •     認証する文字はアルファベットか数字かを選べる
  •   3レベルの画像の複雑さ(文字のぐにゃぐにゃ度合い)
  •     画像と文字はDB管理
  •     古い画像(一定時間認証されなかった画像)は自動的に削除

simple_captchaは、こちらのサイトで公開されています。
http://expressica.com/simple_captcha/

今回はsimple_captchaの使い方と、画像認証を行う時に物足りない部分をカスタマイズした方法も書こうと思います。

ます、インストールから
サイトを見ると使い方の手順が書いてあるのでその通りに実行します。
 

1.simple_captchaプラグインのインストール

ruby script/plugin install svn://rubyforge.org/var/svn/expressica/plugins/simple_captcha    
 もしくは直接ダウンロード
http://expressica.com/wp-content/plugins/wp-downloadMonitor/download.php?id=1

2.simple_captchaのセットアップ
 rails2系以上     
   rake simple_captcha:setup     
 

 rails1系
  rake simple_captcha:setup_old  
 
 続けて1系2系ともに
  rake db:migrate  

3.config/routes.rbの編集
    ActionController::Routing::Routes.draw do |map|  
     map.simple_captcha ‘/simple_captcha/:action’, :controller => ‘simple_captcha’  
    end    

4.app/controllers/application.rbの編集
   ApplicationController < ActionController::Base
    include SimpleCaptcha::ControllerHelpers
   end

つづいて、CAPTCHAを表示させたいアプリケーション側の編集です。
simple_captchaは、画像認証のチェックをcontrollerで行う方法とmodelで行う方法がございます。

まずcontroller側で認証させる場合

1. viewの編集
 画像認証をさせたいページに
   <%= show_simple_captcha %>  
 を追加
2. controllerの編集
 validateする個所に
if simple_captcha_valid?
 画像認証OKの処理を書く
else
 画像認証NGの処理を書く
end 
と書きます。



つぎにmodel側で認証する方法です。
  決まったテーブルを登録または更新する時に画像認証を行う事がほとんどですのでmodelに認証を持たせたほうが私は実装が楽だと思います。

たとえばuserモデル(会員登録など)で画像認証させる場合

1.viewの編集
<%= show_simple_captcha(:object=>”user”) %>
オプションの一例
:label => “画像の中の文字を入力してください”
captchaの説明文の変更
:image_style=>’simply_red’
画像の種類を決められます。
オプションを付けた例 
 <%= show_simple_captcha( :label => “画像の中の文字を入力してください。”,:image_style=>’simply_red’,:object=>”user”) %>

2. modelの編集
  class User < ActiveRecord::Basse  
    apply_simple_captcha :message => ” 画像に表示された文字を再入力してください。”, :add_to_base => true
  end  

オプションの
 messageとadd_to_baseはなくても使えます。
 これを付けると、デフォルトのエラーメッセージではなくmessageで指定した文字がエラーメッセージとして表示できます。

3. controllerの編集
 @user.valid? と書く部分を
 @user.valid_with_captcha?
 に
@user.save と書く部分を
@user.save_with_captcha
にします。

with_captcha?を付けることで画像認証が行われます。

これの便利な部分は他のところで
@user.saveとしたら、画像認証を行わないので
画像認証をするところと、しないところの切り分けが楽です。



これでrailsを起動しページ表示すると画像認証(CAPTCHA)が表示されます。


simple_captchのデフォルトじゃ物足りないのでカスタマイズしたこと

基本の使えるオプションなどは
vendor/plugins/simple_captcha/README
を見てください。
ベースの画像や画像の複雑さの設定方法が書かれています。

以下は自分がカスタマイズさせた方法を書きます。

問題1
simple_captchaのデフォルトだと入力したアルファベットの大文字小文字を区別しない

対応 vendor/plugins/simple_captcha/lib/simple_captcha_active_record.rb
の49行目あたりの
–          if captcha && captcha.upcase.delete(” “) == simple_captcha_value(captcha_key)

+          if captcha && captcha.delete(” “) == simple_captcha_value(captcha_key)
とし upcaseをとってしまう。

問題2
ランダムの文字数や英数字を混ぜたものを使いたい
vendor/plugins/simple_captcha/lib/simple_captcha_action_view.rb

def generate_simple_captcha_data(code)
で文字を生成しているので好きに書き換えてしまう

たとえばこうすると大文字小文字アルファベット+数字 のランダム6文字
 a = (‘a’..’z’).to_a + (‘A’..’Z’).to_a + (‘0’..’9′).to_a
 value= Array.new(6){a[rand(a.size)]}.join

*日本語はさすがに文字化けでした・・・

問題3
6文字以上の文字が使いたい
vendor/plugins/simple_captcha/assets/migrate/create_simple_captcha_data.rb
のマイグレートファイルでlimit=>6に指定されているので
無理に6文字以上にするとDB側ではじかれますので、
ここの数字を変えるか、マイグレーションファイルを追加して好きな文字数にするとよいです。

6文字以下はsimple_captcha_dataテーブルの変更はいりません。

以上です。

まとめ

simple_captchaを使えば 画像認証(CAPTCHA)が簡単に素早く実装ができます。
 10分もあれば導入が可能ですのでお試しください。
それと、プラグインのソースがきれいに書かれていますのでカスタマイズがしやすいと思います。

注意
*画像認証(CAPTCHA)は最近は破られる可能性があるという事ですので、スパムの対策に過信はしないほうがよいと思います
 次回は、画像認証以外の方法でスパムロボット対策方法を書けたらいいかなと思います。

apacheでアクセス制限をしてみよう その1

0

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

こんにちは。タジです。

今回は、apacheでのアクセス制限についてです。

ページにアクセスした際、IDとPassを聞かれることがあると思います。

いわゆるBasic認証というものです。


Basic認証は、ディレクトリ(<Directory /usr/local/apache/htdocs>)や、ロケーション(< Location /admin>)などのディレクティブで使います。

この設定は.htaccessというファイルに記述することもありますが、apacheの設定ファイル(httpd.conf)に書くこともできます。

書き方は比較的簡単です。

まず、認証に使うIDとPassを作ります。
作成には、apacheに付属しているhtpasswdコマンドを使用します。

htpasswd -c <ファイルを置く場所> <ID>

上記コマンドを使用すると、直後にパスワードの作成を求められます。
入力したパスワードは、ファイルを置く場所として指定された場所に、保持されるようになります。
htpasswdコマンドの-cというオプションは、ファイルを新規作成するためのオプションで、ユーザを追加する場合は付けないようにしてください。
(-cをつけると再度ファイルが新規作成されてしまいます。)

Basic認証では、IDとPassは特定のファイルに保存されるため、ファイルを置く場所と、使用するIDをコマンドの引数として渡す必要があります。
置く場所はどこでも構いませんが、外部から見えない方が望ましいです。

次に、apacheの設定ファイル内に、以下のように書きます。

<Location /admin>
AuthName "enter id and pass"
AuthType Basic
AuthUserFile /usr/local/apache2/conf/.htpasswd
Require valid-user
</Location>

AuthName:該当のページにアクセスした際に出てくる文言を設定します。
AuthType:認証のタイプを選択します。Basic認証以外にも、ダイジェスト認証などがあります。
AuthUserFile:パスワードを設定したファイルをフルパスで指定します。
Require:対象となるユーザを設定します。基本的にはvalid-userにしておけば、全てのユーザでパスが聞かれるようになります。

また、ディレクトリのディテクティブとロケーションのディテクティブの両方を使ったり、Requireでユーザを個別指定することで、初めにアクセスした際にIDとPassを聞かれ、さらに内部で特定のページにアクセスした際にIDとPassを聞かれるような構造にすることもできます。

例えば、require userA useB userCというディレクティブ1と、require userAというディレクティブ2があったとすると、はじめにディレクティブ1にアクセスした時に皆IDとPassの入力を求められ、userAとしてアクセスした人以外はディレクティブ2にアクセスした際に再度ディレクティブ2に設定されたIDとPassを入力する必要が出てきます。

今回はここまでです。

それではまた次回。

最近人気な記事