ホーム ブログ ページ 66

Rubyでどう書く?:RubyでWord文書を作成する

0

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

KBMJがZDnetで連載している記事を紹介します。コメントなどありましたらそちらでお願いします。

Rubyでどう書く?:RubyでWord文書を作成する 三浦義太郎(KBMJ)

RubyでPDFが作成できるなら、Wordだってできちゃうだろう――そんな試みです。

問題

第5回目のテーマは第2回「RubyでPDF履歴書を作成する」の変奏です。

第2回はRubyでPDF文書を作成するというお題でしたが、Microsoft Word文書を作成したいということも多いと思います。

というわけで、今回はRubyでWord文書を作成してみたいと思います。

回答例

require 'rdoc/template'
template = TemplatePage.new IO.read('name.xml')
File.open("result.xml", 'wb') do |f|
template.write_html_on(f, {'name' => $*[0]})
end

簡単すぎですね。

解説

今回のミソは、Word 2003から使えるようになったXML文書を使用しているところです。

元の文書は「name.xml」で、これはWord(筆者の環境では2007)で作成したものです。そのため、レイアウトはWordで行うことが可能です。

あとは文字を置き換えたい部分を「%name%」としてあげて、XML文書形式で保存します。

Wordで文書の元が作れるのが大きなメリットですね。

プログラムの実行は

ruby [作成したプログラム] [%name%に置き換えたい文字列] 

で、プログラムと同じフォルダにresult.xmlというファイルが作成されます。

開いてみると「%name%」が置き換えたい文字列になっているはずです。

最後に――

WordのXML文書は、無償で提供されている2003以降のWordビューワを導入することで閲覧できるので、対応したバージョンのWordを持っていなくても大丈夫です。

この機会に社内文書の作成などにRubyを導入してみてはどうでしょうか(まあ、Rubyじゃないとできないというわけじゃないですが……)。

mysqlでレコードの中身を一括置換する方法

0

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

おひさしぶりです。

新人のカツオです。

今日からKBMJでは新卒の研修も一段落し、

エンジニアは私服出勤なのです。

というのはさておき、

今日はmysqlでレコードの項目を一括置換する方法をご紹介したいと思います。

というわけでmysqlでテーブルの中身を一括置換するコマンドです。

UPDATE テーブル SET カラム=REPLACE (カラム,"置換させたい文字列","置換したい文字列");

簡単なSQLですねー。

これでばっちり置換できます。

本日はこれでおしまいです。

ではでは。 また

Edge Railsの最新情報

0

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

以下の投稿は、 Riding Railsの記事を筆者が独断で翻訳したものです。

誤訳の指摘や、コメント歓迎します。

http://weblog.rubyonrails.org/2008/7/6/living-on-the-edge-3

最近はあまりedge Railsに注目すべきことがありませんので、 Railsのコミットログを見ていただいて、指摘していないバグやマイナーチェンジを確認してください。ActionPackの書き直しやマルチスレッ ディングが少し進行中であり、ActiveModelでも少し作業をしています。ただ、まだなにも具体的ではありません。

script/serverにThinをサポートします

script/serverはThinの有無をチェックして利用します。Thinをプロダクションサーバで利用している場合は非常に便利です。developing時にも役にたちます。動作させるにはconfig.gem に ’thin’を追加する必要があります。

このパッチはfluxinの方から提供されました。

複数のテーブル上の状況がhashで指定することができます

Pratik氏は小さなとても便利な変更をActiveRecordにコミットしました。特定の状況を融合されたテーブルのhashに指定することができます。例で示したほうがわかりやすいと思います。

Anime.all(
:joins => :character,
:conditions => {
:active => true,
:characters => { :gender => 'female' }
}
)

 ActiveRecordクエリは全ての”active”なアニメの中の”female”なキャラクターを探すことができます。

同じappでDBを使い分ける

0

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

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

今回は、railsで同じappの中で、違うDBを使う方法を説明します。

例えば、アドレスをhttp://192.168.0.2/test1と打った時とhttp://192.168.0.2/test2と打った時にデータの内容が違うということです。

どうやってやるかというとmongrelのポート番号で分けます。

まず、database.ymlの設定を行います。

test1:

adapter: postgresql

database: test1

username: postgres

password: PostgreSQLのパスワードを入力する。

encoding: utf-8       

test2:

adapter: postgresql

database: test2

username: postgres

password: PostgreSQLのパスワードを入力する。

encoding: utf-8

次にMigrateします。

$ rake db:migrate RAILS_ENV=test1

$ rake db:migrate RAILS_ENV=test2

mongrel_clusterの設定をします。

mongrel_cluster1.yml,mongrel_cluster2.ymlを作成する。

# vi mongrel_cluster1.yml
 
 user: ユーザ名
 group: グループ名
 cwd: アプリケーションの絶対パス
 port: 3000
 environment: test1
 servers: 3
 
 
# vi mongrel_cluster2.yml
 
 user: ユーザ名
 group: グループ名
 cwd: アプリケーションの絶対パス
 port: 3003
 environment: test2
 servers: 3

ディレクトリを作る。

# mkdir /etc/mongrel_cluster

作ったディレクトリにmongrel_cluster1.yml, mongrel_cluster2.ymlを移動させる。

# cp mongrel_cluster1.yml /etc/mongrel_cluster/
# cp mongrel_cluster2.yml /etc/mongrel_cluster/

自動起動用スクリプトを/etc/init.d以下にコピー

 # cp /usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/
resources/mongrel_cluster /etc/init.d/mongrel_cluster
 # vi /etc/init.d/mongrel_cluster

を編集する。

#PID_DIR=/var/run/mongrel_cluster      #コメントアウト
#USER=mongrel                          #コメントアウト

自動起動に登録する。

# chkconfig --add mongrel_cluster
# chkconfig mongrel_cluster on

つぎにhttpd.confの設定をします。

# vi /usr/local/apache2/conf/httpd.conf

ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
  Order Deny,Allow
  Allow from all
</Proxy>
RewriteEngine On
#RewriteRule ^/test1(.*)$ balancer://cluster1%{REQUEST_URI} [P,QSA,L]
#RewriteRule ^/test2(.*)$ balancer://cluster2%{REQUEST_URI} [P,QSA,L]
RewriteRule ^/test1(.*)$ balancer://cluster1%{$1} [P,QSA,L]
RewriteRule ^/test2(.*)$ balancer://cluster2%{$1} [P,QSA,L]
 
<Proxy balancer://cluster1>
 BalancerMember http://192.168.0.2:3000 loadfactor=10
 BalancerMember http://192.168.0.2:3001 loadfactor=10
 BalancerMember http://192.168.0.2:3002 loadfactor=10
</Proxy>
 
<Proxy balancer://cluster2>
 BalancerMember http://192.168.0.2:3003 loadfactor=10
 BalancerMember http://192.168.0.2:3004 loadfactor=10
 BalancerMember http://192.168.0.2:3005 loadfactor=10
</Proxy>

以上で設定は終わりです。

ブラウザでhttp://192.168.0.2/test1とhttp://192.168.0.2/test2と打って正常にアクセスできれば完了です。

Rubyでどう書く?:重複したRSSをまとめる

0

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

KBMJがZDnetで連載している記事を紹介します。コメントなどありましたらそちらでお願いします。

Rubyでどう書く?:重複したRSSをまとめる 高瀬裕一(KBMJ)

「ネットの話題を追いかけるために、はてブのホッテントリやlivedoor クリップの人気ページをRSSで取得しています。でも、重複していることも多いんです。助けてください」(32才 男性・家事手伝い)――よろしい、ならばRubyで書こう。 

第4回目のテーマは「重複したRSSをまとめる」と題しまして、Rubyで複数のRSSから重複したエントリを除去する問題を出します。

問題

 最近、はてなブックマークやlivedoor クリップなど、ユーザーが外部のサイトを集めて、その結果を出力するサービスが増えてきました。

 ただ、一部のサイトを見ているだけで話題を追うことができるので便利なのですが、同じURLが複数のRSSにあり「もうこれは見たのに……」という事も多いですよね。

 そこで今回は、複数のRSSを一つのRSSとして出力するプログラムを問題にします。

仕様

  • RSSのURLは、コマンドラインから引数として1個以上与えられる。
  • 結合した結果のRSSのタイトルおよび説明は、各引数のタイトルをつなげたものとする。
  • 結合した結果のRSSのURLは第一引数のURLとする。
  • フィードのリンク先が同一のものを同じフィードとして扱う。
  • 出力順は第一引数のものを順に出力し、その後第二引数、第三引数のものを順に出力する(同じフィードとして扱うものは除外する)。
  • 重複したものは前の引数の内容を出力する。
  • 出力先は標準出力とする。
  • 出力するRSSのバージョンは2.0

回答例

 1 require 'rss'
  2
  3 rss_feeds = rss_urls = []
  4 title=""
  5
  6 ARGV.each do | rss_url |
  7   open(rss_url) do | http |
  8     response = http.read
  9     rss_results = RSS::Parser.parse(response, false)
 10    
 11     if rss_results && rss_results.channel && rss_results.channel.title
 12       title += " と " if title.size > 0
 13       title += rss_results.channel.title
 14     end
 15    
 16     rss_results.items.each do | item |
 17       unless rss_urls.include? item.link
 18         rss_urls << item.link
 19         rss_feeds << item
 20       end
 21     end
 22   end
 23 end
 24
 25 rss = RSS::Maker.make("2.0") do | writer |
 26   writer.channel.title = title || ""
 27   writer.channel.link = rss_urls[0] || ""
 28   writer.channel.description = title || ""
 29   rss_feeds.each do | feed |
 30     feed.setup_maker(writer)
 31   end
 32 end
 33
 34 puts rss.to_s

 試しに、livedoor クリップ 人気ページと、はてなブックマーク 人気エントリーを取得してみましょう。

ruby rss.rb http://clip.livedoor.com/rss/hot http://b.hatena.ne.jp/hotentry?mode=rss

 本記事を執筆時点では、実行結果は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</title>
    <link>http://clip.livedoor.com/rss/hot</link>
    <description>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</description>
08-06-23 22:52 $ ruby "test.rb" "http://clip.livedoor.com/rss/hot" "http://b.hatena.ne.jp/hotentry?mode=rss" | head -20
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</title>
    <link>http://clip.livedoor.com/rss/hot</link>
    <description>livedoor クリップ - 人気ページ と はてなブックマーク 最近の人気エントリー</description>
    <item>
      <title>Engineer25 すべてを楽しむ若きスーパーエンジニア達 第4回 cho45氏- ウェブキャリア</title>
      <link>http://www.web-career.com/contents/engineer25/4.html</link>
      <description></description>
      <dc:subject>interview</dc:subject>
      <dc:subject>ruby</dc:subject>
      <dc:subject>javascript</dc:subject>
      <dc:subject>program</dc:subject>
    </item>
    <item>
   ...中略...
    </item>
  </channel>
</rss>

解説

 本サンプルプログラムは、大きく3段階の処理になっています。

 第1段階(6行目から9行目)では、渡された引数を元に各ページにアクセスし、RSSを解析しています。

 第2段階(11行目から20行目)では、rss_feeds内にRSSを分解したフィードの内容を登録しています。

 今回は第一引数の出力内容を優先するので、順番を管理しやすいArrayに登録しました。そして、重複チェック用に、rss_urlsというArrayを作って、登録時にそこにurlを入れ、urlが既に登録されていないかチェックをしています。

 第3段階目(25行目から34行目)では、全RSSの取得を完了した後で、makeでRSSを再生成して出力しています。

最後に――

 今回のお題は主に自分が必要と感じるものを作ってみました。

 パーサが標準のライブラリにあるので特に手間無く作れましたが、もうちょっと実用度を上げようとすると、サーバが落ちている場合や、引数が間違えている場合などの例外処理を組み込むのも良いと思います。

 こんな風に作ってみたよという方が居られましたら、コメントやbuilderブログなどで教えていただきたいと思います。

TABLEに直接データを入れる便利な方法

0

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

どうもメガネです。3回目の投稿です。

今回は、データベースに直接データを入れる方法を紹介します。これを使えば、同じようなデータを何件も入れる時に役に立ちます。

create table test(id primary key , name text);

上のようなテーブルの構造の場合でかつidを指定しない場合現在の最大値に+1増えるような設定の場合

まず.sqlファイルを作ります。

$vi  test.sql

ファイルの中に

insert into test(name) values(‘fujishiro’);

Vim かviの場合コマンドモードでyy と押して 10000000000 + p と押せば百億のデータを入れられます。

ここからはRDBMSごとに違います。

PostgreSQLの場合

そのファイルがあるディレクトリでpsqlでログインします。

=#\i test.sql

以上です。

MySQLの場合

そのファイルがあるディレクトリ

$mysql –u root –p < test.sql

以上です。

これを使えば簡単にDBのパフォーマンスを下げられるのでテストの時便利です。

社内SNSをiPhoneで快適に見るためのCSSを書いてみた

0

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

KBMJの佐藤です。 ついにiPhoneが日本国内で発売されますね。

時間がない人のための、「WWDC 2008 基調講演」が5分でわかるハイライト

アップル – iPhone

昨日はジョブズの講演に関する情報を リアルタイムで最初から最後までネットでチェックしていました。

興奮さめやらず、今日は昼食をデスクでとりながら、 社内SNS(SNS構築パッケージ「SNSエンジン」にて構築)を iPhoneのSafariに最適化する実験を行なってみました。

実験機材として使用したのはiPod touchです。

iPhoneのSafariはPCサイトも表示できるけど…

iPhoneのSafariはPCサイトも表示できるのですが、 iPhoneの画面はPCに比べて小さいこともあり、 そのまま快適に閲覧できるとは限りません。 PCのブラウザで表示した内容がそのまま縮小されて表示されるようなイメージになります。

iPhoneでは指先でリンクをクリックする必要がありますので 操作もしづらくなります。

いくつかの解決策があるのですが、 今回はiPhoneのSafari向けにCSSを作成することにしました。

iPhone向けのCSSを書く

HTMLからiPhone向けのCSSを参照するには、以下のようにします。<meta name=”viewport” content=”width=device-width, user-scalable=no” />

user-scalableをnoに設定すると、2本指による拡大・縮小などができなくなります。 ここは考え方にもよるのですが、拡大・縮小の操作を無効化することによって、 上下にスクロールするだけで閲覧可能な、 見やすいiPhone向けサイトを作成することができます。
<link media=”only screen and (max-device-width:480px)”
    href=”small-device.css” type=”text/css” rel=”stylesheet”>
<link media=”screen and (min-device-width:481px)”
    href=”not-small-device.css” type=”text/css” rel=”stylesheet”>

などとすることによって、PC向けとiPhone向けでCSSを切り替えられるようです。

iPhoneらしいデザインのCSSを書く

今回はiPhoneらしいデザインのCSSを記述しました。 iPhoneの設定画面などのデザインと合わせることによって、 統一感のあるサイトを作成できます。

画像の表示

基本はiPhoneの画面幅に合わせた解像度で表示すると良いでしょう。 Safari上で画像ファイルのURLを指定して表示した場合は 2本指による拡大縮小ができます。 コンパクトデジカメなどで撮影した高解像度の画像も表示できるようです。

iPhoneに最適化したサイトのメリット

iPhoneの売りであるタッチ操作によって、非常に快適にサイトを閲覧することができるようになります。

サイト表示にかかる時間は回線状態によって変化?

iPhone 3GではHSDPAなどによる高速なデータ通信が可能になると思われますが、 無線LANにて接続した場合に比べて通信速度は遅くなることが予想されます。 よって、iPhone向けのサイトでユーザービリティを追求すると CSSによる表示切り替えだけではなく、 場合によってはHTMLや画像の情報量削減が必要かもしれません。

Safari上にて回線接続状態を取得してHTMLなどの情報量をコントロールできれば良いのですが、 この辺の細かい仕様については更なる調査が必要です。

さいごに

いかがでしたでしょうか?

今日は各地のソフトバンクショップでiPhoneの予約が殺到したと聞きます。 私もiPhone 3G 16GBを2台ほど予約確保しました。

日本国内の携帯市場でiPhoneがどれだけのシェアを押さえられるのかはまだまだ未知数ですが、 iPhoneで見やすいサイトというのは今後確実にニーズが出てくるかと思います。

次回はもう少し踏み込んだ内容で、iPhoneに関する技術記事を書きたいと思います。

RSSの購読をお忘れなく!!

個人ブログ : 拡張現実ライフ

dmgファイルの作り方

0

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

初めまして、もじら組組長ことたろちゃんです。はてなではid:smellmanで通っております。もっともメインのハンドルネームはbtmだったりするのですが、最近smellmanの方が有名だったりしてちょっとへこみ気味です。

さて、今回はMacOSXでよく使われているdmgファイルの作り方について説明をしたいと思います。

まず、dmgファイルを作成する手順を簡単にまとめてみましょう。

  1. 空のdmgファイルを作成し、マウントする
  2. マウント先にファイルをコピーする
  3. マウントを解除する
  4. dmgファイルを配布用DMGファイルに変換する。

まずは空のdmgファイルを用意するのですが、その前に必要なディスク容量を計測しておきましょう。ディスク容量を計測する手っ取り早い方法は du -sk を使う方法です。このコマンドではキロバイト単位でファイルが利用している容量がわかります。$ du -sk /Applications/My\ App.app
42464    /Applications/My App.app

今回は42464kbで大体42MB必要だという事がわかります。実際空のディスクを作る際には少し多めにディスク容量を設定します。今回は50MBを取りましょう。

空のdmgファイルを作成するには以下のコマンドを入力します。$ hdiutil create -size 50m -type UDIF -fs HFS+ -volname “My App” -layout NONE myapptest.dmg
…………………………………………………………………….
created: /Users/tmatsuzawa/tmp/disk/myapptest.dmg

これで空のdmgファイルが作成されたので、マウントをしましょう。マウントを行うには hdid コマンドを利用します。$ hdid myapptest.dmg
/dev/disk1                                                 /Volumes/My App

これで/dev/disk1に/Volumes/My App というボリュームがマウントされた事になります。もちろんFinderからも閲覧可能です。

あとはマウント先にファイルをコピーをするのですが、Finderごしに行うと.DS_storeファイルが生成されてしまうので、 ditto コマンドを使ってコピーをしましょう。また、リソースフォークを含めるように -rsrcFork オプションを追加します。$ ditto -rsrcFork /Applications/My\ App.app /Volumes/My\ App/My\ App.app

次にhdiutil eject コマンドでマウントを解除します。$ hdiutil eject disk1
“disk1” unmounted.
“disk1” ejected.

最後に配布用のdmgファイルに変換します。変換には hdiutil convert を利用します。 -format オプションで生成するイメージの形式を指名します。 UDZO では zlibを使って圧縮されたリードオンリーなディスクイメージとなります。$ hdiutil convert -format UDZO -o myapp.dmg myapptest.dmg
イメージ作成エンジンを準備中…
ディスク全体 (Apple_HFS : 0) を読み込み中…
…………………………………………………………………….
  (CRC32 $4482ED93:ディスク全体 (Apple_HFS : 0))
リソースを追加中…
…………………………………………………………………….
経過時間: 2.096s
ファイルサイズ:18126020 バイト、チェックサム:CRC32 $555590C7
処理されたセクタ数:102400、87361 圧縮されました
速度:20.3M バイト/秒
節約率:65.4%
created: /Users/tmatsuzawa/tmp/disk/myapp.dmg

ファイルが作成できたら myapp.dmg を試しにマウントしてみましょう。$ open myapp.dmg

中身が正常に表示されていていれば成功です。あとはこのファイルを自由に配布する事ができます。

will_paginageを使ってみた

0

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

rails2.0に移行したらpaginateがつかえなくなりました。

なので、代わりとなるwill_paginateというプラグインを使ってみます。

まずプラグインのインストールから
プロジェクトフォルダ内で、

# script/plugin install svn://errtheblog.com/svn/plugins/will_paginate
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate/test
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate/test/helper.rb
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate/test/console
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate/test/database.yml
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate/test/boot.rb
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate/test/lib
A    /home/sakuma/workspace/test/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb



— Mislav
すごい勢いで、いろいろ入いりました。

controllerを修正します。
paginateしたいアクションに
以下を追加(#は以前のpaginate)
# @pages, @items = paginate(:items, :per_page => 3)
@items = Item.paginate(:page=>params[:page], :per_page=>3)

※ “:page”は表示したいのページのパラメーターです。
  現在表示されているページパラメーターはparams[:page]で取ってこれます。

書き方的には
Model名.paginate(:page=>params[:page], 以下前と同様)

て感じでしょうか。

viewも修正します。
表示方法は、以前と同様、
<% for item in @items %>
  <%=h item.name %> <%=h item.body %><br />
<% end %>
でいけます。
ページを表示させるリンクには
<%= will_paginate(@items) %>

を付けます。

こんな感じにpaginateできました。画面が小さくて見づらいですが。。。

案外簡単。

google先生によると、
Item.paginate_by_user_idとか
@items.page_count(総ページ数の取得)とかもできる模様。
いろいろ試せます。
 

PHP携帯電話の機種情報取得

0

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

こんばんは、O2です。

PHPにて機種情報を取得する方法に関して記述します。

以下のように書いてある参考サイトがあり、そのまま使用していましたが!!
$mobObj = Net_UserAgent_Mobile::singleton();
$serialNumber = “”;
switch( true )
{
  case ($mobObj->isDoCoMo()):
  case ($mobObj->isVodafone()):
    if( method_exists( $mobObj, “getSerialNumber” ) )
      $serialNumber = $mobObj->getSerialNumber();
    break;
  case ($mobObj->isEZweb()): // ezwebかどうか
    if( isset( $_SERVER[‘HTTP_X_UP_SUBNO’] ) )
      $serialNumber = $_SERVER[‘HTTP_X_UP_SUBNO’];
    break;
  default:
    break;
}


どうも、ドコモ端末の場合!!
FOMAとFOMA以外の端末では取得方法が判明$mobObj = Net_UserAgent_Mobile::singleton();
$serialNumber = “”;
switch( true )
{
  case ($mobObj->isDoCoMo()):
  if( $mobObj->isFOMA() ){
    if( method_exists( $mobObj, “getCardId” ) ){
      $serialNumber = $mobObj->getCardId();
    }
  }else{
    if( method_exists( $mobObj, “getSerialNumber” ) ){
      $serialNumber = $mobObj->getSerialNumber();
    }
  }
  break;
  case ($mobObj->isVodafone()):
    if( method_exists( $mobObj, “getSerialNumber” ) )
      $serialNumber = $mobObj->getSerialNumber();
    break;
  case ($mobObj->isEZweb()): // ezwebかどうか
    if( isset( $_SERVER[‘HTTP_X_UP_SUBNO’] ) )
      $serialNumber = $_SERVER[‘HTTP_X_UP_SUBNO’];
    break;
  default:
    break;
}

リファラでアクセス制限をしてみた。(apache)

0

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

こんにちはカツオです。

入社してもう2ヶ月経とうとしています。

早い。

毎日怒られてます。

今日は 

rubyとはちょっと違うのですが

本日はリファラーによるアクセス制限について紹介します。

仮にbookmarks.hahaha.co.jpというサイトを

リファラを使って制御したいと思います。 

まず設定を書くhttp.confファイルを探します。

/usr/local/apache2/conf/httpd.conf

とかにあることが多いんじゃないでしょうか

そのファイルを開くと

VirtualHostとか色々設定してあるところのなかに 

<Location />
    SetEnvIf Referer "^http://bookmarks.hahaha.co.jp" check
    Order allow,deny
    Allow from all
    Deny from env=check
</Location>

と書き足してください。

これによってサイトの全ページにおいて

bookmarks.hahaha.co.jpからのアクセスを禁止しています。

赤字を自分が制御したいサイトのURLを書いてください。

自分はこれでアクセスは制御できるかなーと思ったら

なんでかわからないけど

普通にアクセスしたときにスタイルシート等が適応されなくて、

レイアウトが崩れてしまいました。 

仕方がないので、
パブリックに対してアクセスする権利を与えました。
これがなくて僕の環境では画像とCSSが表示されなかったです。
        ↓

<Directory /home/testtest/public>
     Order allow,deny
       Allow from all
       Options None
       AllowOverride None
</Directory>

これでちゃんと表示するようになりました。

色々設定してみたんですが

自分がやったときネット調べながらやっても

なぜか上手くいかなかくて

今回ロケーションで設定したのですが

もっといい方法はあるかもしれませんね。

あったら教えてください。

ではでは

また。 

Rubyでどう書く?:Rubyで特定URLの画像パス一覧を表示する

0

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

KBMJがZDnetで連載している記事を紹介します。コメントなどありましたらそちらでお願いします。

Rubyでどう書く?:Rubyで特定URLの画像パス一覧を表示する  牧野裕之(KBMJ)

第3回目のテーマはRubyである特定のURL上にある画像パス一覧を表示する方法について解説したいと思います。

問題

 あるWebサイトをブックマークする際に、そのURLで表示されている画像の一覧から1つの画像を選択した上でブックマークしたいという要望を受け取ったとします。

 そこで、画像選択用のサムネイル表示のために、URL上に表示されている画像URLの一覧を配列として提供したいのですが、どのようなメソッドで提供すべきでしょうか?

 ここでは、ごく簡単ではありますが正規表現を使って画像URL一覧の取得を行ってみます。

仕様

・画像ファイルは「jpg, jpeg, gif, bmp, png」を取得する
・URIスキームが「http」の場合のみ画像を取得する

回答例

require 'open-uri' 
require 'resolv-replace'
require 'timeout'
class ImageUrl
# 特定のURL上の画像パス一覧を取得する
def self.get_image_urls(url)
begin
timeout(1) {
begin
uri = URI(url)
if uri.scheme == "http" #httpsでは画像を取ってこない。
tmp_images = uri.read.scan(/img.+src=[\"|\']?([\-_\.\!\~\*\'\(\)a-zA-Z0-9\;\/\?\:@&=\$\,\%\#]+\.(jpg|jpeg|png|gif|bmp))/i)
images = []
tmp_images.each { |img| images << URI.join(url, img[0]) }
images.uniq
end
rescue => exception
case exception
when OpenURI::HTTPError # 404エラー
puts "ページが見つかりません。"
when URI::InvalidURIError # 入力エラー
puts "URLが入力されていません。"
# 他にもエラークラス別に処理を加えるなら以下のように追加
# when エラークラス名
# エラー時の処理
else # その他のエラー
puts exception.to_s + "(#{exception.class})"
end
end
}
rescue TimeoutError
# Timeout時の処理
puts "読み込みに時間がかかりすぎたため、処理を終了しました。"
end
end
end
image_urls = ImageUrl.get_image_urls(ARGV[0])
puts image_urls

 試しにYahoo!JAPANから画像URL一覧を取得してみましょう。

ruby image_url.rb "http://yahoo.co.jp/" 

 本記事を執筆時点では、実行結果は以下のようになります。

http://k.yimg.jp/images/clear.gif
http://k.yimg.jp/images/top/sp/cgrade/logo.gif
http://k.yimg.jp/images/top/searchbox/s_p.gif
http://k.yimg.jp/images/new.gif
http://k.yimg.jp/images/top/calender.gif
http://k.yimg.jp/images/top/sp/cgrade/icon_point.gif
http://k.yimg.jp/images/top/sp/cgrade/icon_login.gif
http://k.yimg.jp/images/premium/top2/cam_searchpoint_50x50_01.gif
http://k.yimg.jp/images/top/sp/qr.gif
http://k.yimg.jp/images/top/sp/cgrade/dot.gif
http://k.yimg.jp/images/mlb/y_top/matsuzaka_02.jpg

解説

 本サンプルプログラムでは、以下の順序で処理を実行しています。

1.URL読み込み

 ruby1.8.2からは、URI.parse(“http://…”)をURI(“http://…”)と書けるようになっているため、後者の書き方に合わせました。

2.URIスキーム判定

 URIスキームがhttpの場合のみ画像を抽出したいので、判定文を加えました。open-uriはSSLで自己証明証を使用しているURLにはアクセスできないため、残念ながらhttpsは該当URIスキームからは外しました。

3.読み込んだソースから正規表現で画像URI抽出

 正規表現により正しい画像URLのみを抽出します。

4.重複削除し、値を返す

 URLによっては同じ画像を何度も呼んでいる場合があるので、Array#uniqで画像パスの重複したものを削除した後に、値を返します。

 また、本プログラム作成時に以下の二点に気を付けました。

1.正規表現にオプション「i」をつける

 読み込むソースによっては、タグ・属性・拡張子が大文字で記述されている可能性があるので、大文字小文字を無視するオプションが必要になります。

2.エラー(URL未入力、404、タイムアウト)への対処

 例として、URLの入力が無かった場合、404レスポンスが返ってきた場合、タイムアウトの場合の三通りについて、個別の対応ができるように記述しました。ここでは、TimeoutErrorはStandardErrorのサブクラスではないため、rescueの際にはクラス名を明記しておく必要があることに注意してください。

 個人的な感想ですが、以下の点について工夫を加えれば本プログラムが改善できそうだと思いました。

1.画像URL取得に用いる正規表現

 よりスマートな正規表現に書き換えれば、理解しやすく変更も加えやすくなると思います(正直なところ、あまりきれいな正規表現では無いと思っています。申し訳ありません)。

2.CSS(スタイルシート)に記述されている画像URLの取得

 本サンプルプログラムでは、CSSに記述されている画像URLの取得までは網羅していません。

3.エラー処理

 本プログラムではエラーの種類による分岐までに留めていて、実際の処理に関しては記述しませんでした。要件によって、処理を書き加えるとよいでしょう。

4.httpsへの対応

 httpsのページであっても画像が取得できるように変えたほうが、本プログラムをより多くのページで利用できるでしょう。net/httpsを用いれば実現可能なようです。

最後に――

 簡単な問題・例文ではありましたが、いかがでしたでしょうか。

 本記事では、あるWebサイト上で用いられている画像のURL一覧を取得するという題目でご説明させていただきました。拙作ではありますが、少しでも皆さんのRubyへの理解の助けになれば幸いです。

 もっと良い書き方・方法があれば、コメントやbuilderブログなどで教えていただきたいと思います。

postgresでのユーザ権限付与(psql, grant)

0

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

おはようございます。tacchiです。

今日は、postgresでの権限付与について、話したいと思います。
スキーマ単位で権限付与できず、テーブル毎に権限付与しなきゃならないので、テーブル数が増えている場合のDBにユーザ作成して権限付与するのが面倒になってきますよね。
テーブルリストを作成してそのリストに対して、同じgrant文を流すスクリプトを組んだので、良ければ使ってみて下さい。
## grant.sh
#!/bin/sh

DBNAME=${1:?”enter dbname”}
DB_USERNAME=${2:?”enter db username”}
CREATE_USERNAME=${3:?”enter create username”}
COMMAND=${4:?”enter select or ‘select,update’ or ‘select,update,delete’ …”}

# –共通関数定義–
LIST=/tmp/table.lst

psql -U ${DB_USERNAME} -d ${DBNAME} -c “select relname from pg_class where relkind=’r’ and relnamespace=(select oid from pg_namespace where nspname=’public’ order by relpages desc);” -t -A > ${LIST}

# コマンド実行
while read line
do
echo psql -U ${DB_USERNAME} -d ${DBNAME} -c \”grant ${COMMAND} on $line to ${CREATE_USERNAME}\;\”
psql -U ${DB_USERNAME} -d ${DBNAME} -c “grant ${COMMAND} on $line to ${CREATE_USERNAME};”
done < ${LIST}

# listファイル削除
rm -f ${LIST}

exit 0

使い方

./grant.sh dbname db_username create_username ‘select’
./grant.sh dbname db_username create_username ‘select,update,delete’

う。。。 インデントが崩れてる。。。

railsの実行モードの設定 RAILS_ENV

0

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

おひさしぶりです。

初心者カツオです。

以前業務でとあるサイトの本番反映をしていたときに

ものすごい初歩的なのですがrailsの実行モードで

ひっかかったことがあります。

業務で本番サーバーにアップした後

maigrationしようとおもったけど

なぜかテーブルできない

[kbmj@cms tset]$ rake db:migrate(in /var/cms/test)
Rails Error: Unable to access log file. Please ensure that /var/cms/test/config/../log/development.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.

 

chmodとか書いてあるし

あぁ権限がないのかな?

と思ってsudoをつけてもなぜかテーブルがつくれない

 [kbmj@cms1 test]$ sudo rake db:migrate(in /var/cms/test)rake aborted!
No such file or directory - /tmp/mysql.sock

タイム連打も試してみたけど

ファミコンじゃないし意味がない(嘘)

で、ひとしきり焦った後

なんのことはなかったのが

railsではアプリケーションを動かすときに実行モードを指定するんだ。

ということなわけですね。

[kbmj@cms1 test]$ sudo rake db:migrate RAILS_ENV=production
(in /var/cms/test)== AddRecordToTestPages: migrating =======================================
== AddRecordToTestPages: migrated (0.0480s) ==============================

本番環境はたいていproductionモードで実行しているはずなのですが

実行モードのデフォルトは”development”モードなので

RAILS_ENV=production

ってな具合に指定してあげなければいけないのですねー

いやはや日々精進しなければ。

ドロップダウンに簡単にオートコンプリート機能を追加する方法

0

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

 こんにちは。

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

 今回は少し毛色を変えてAjaxな話題です。

 ライブラリを使って既存のドロップダウンに簡単にオートコンプリート(入力したテキストで始まる候補だけリストに表示させる)機能を追加する方法を紹介したいと思います。

 ライブラリはExt(今回のバージョンは2.1)を使います。

 今回読み込む必要があるのは、ext-base.js,ext-all.js,ext-all.css,xtheme-gray.css,combo.css、画像はExtのソースファイルのresources/images/default/layoutとresources/images/default/formを[DocumentRoot]/stylesheets/images/defaultへ配置しました。

 ドロップダウンは以下とすると <select id=”prefectures”>

<option value=”1″>北海道</option>
<option value=”2″>青森県</option>
<option value=”3″>岩手県</option>
<option value=”4″>宮城県</option>
・・・
<option value=”46″>鹿児島県</option>
<option value=”47″>沖縄県</option></select>

以下のコードを追加します。 (transformにドロップダウンのidを指定すればよい)<script type=”text/javascript”>
//<![CDATA[

function init(){
var converted = new Ext.form.ComboBox({
typeAhead: true,
triggerAction: ‘all’,
transform:’prefectures’,
width:135,
forceSelection:true});}
Ext.EventManager.on(window, ‘load’, init);

//]]>
</script>

 以上が、ドロップダウンにオートコンプリート機能が追加する手順です。

 とても簡単ですよね。

 導入するチャンスがあったなら是非試してみてください。

 Let’s ajax! 

Vimの自動補完

0

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

こんにちはメガネです。初です。 

今回はVimで開発していく上で便利な自動補完機能について触れてみようと思います。

自動補完機能とは、たとえばrと打つと下のように保管候補が表示されます。

test

Vimとは

http://ja.wikipedia.org/wiki/Vim

今回はLinux環境での設定で話して行きます。

ホームディレクトリに.vimというディレクトリ、その下にpluginというディレクトリを作成して

移動します。

 $ mkdir -p .vim/plugin

 $ cd .vim/plugin

移動できたらautocomplpop.vimをダウンロードします。

 $ wget http://www.vim.org/scripts/download_script.php?src_id=8656

ホームディレクトリに移動します。

 $ cd

 $ vim .vimrc

autocmd FileType ruby :set dictionary=/usr/share/vim/vim71/syntax/ruby.vim

上のコードを追加してください

これで拡張子が.rb,.rhtmlが自動的に補完されます。

監視ツールcactiについて

0

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

こんにちわ marumoru です。

今回監視ツールとしてcactiのインストールについてご紹介します。

サーバ監視をWEBブラウザで視覚的(グラフ等)にて確認できるものです。

他の監視ツールに比べると拡張性が優れているかと思います。

が、他監視ツールより初期導入がちょっとだけ大変かもしれません。

動かす為に必要なもの

Apache       1.3以降
PHP        4.1以降(4.3.6以降を推奨)
RRDTool     1.0.49以降
MySQL      3.23以降(4.0.20d以降を推奨)→別DBにできないことはない
Net-SNMP     最新版がなるべくよい

cactiをCentOS5にインストール

前提としてApache,PHPはインストール済みとします・・・・。yum –enablerepo=rpmforge install cacti

MySQLにcacti用のデータベースを作成mysqladmin -u root -p create cacti
mysql -u root -p cacti < /var/www/cacti/cacti.sql
mysql -u root -p mysql
GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY ‘cactiuser’;
flush privileges;

他PCからの閲覧を許可する場合には、以下を変更vi /etc/httpd/conf.d/cacti.conf
Alias /cacti/ /var/www/cacti/
<Directory /var/www/cacti/>
        DirectoryIndex index.php
        Options -Indexes
        AllowOverride all
        order deny,allow
        deny from all
        allow from 127.0.0.1
        allow from  XXX.XXX.XXX.XXX        許可したいIP追加
        AddType application/x-httpd-php .php
        php_flag magic_quotes_gpc on
        php_flag track_vars on
</Directory>

cacti側へMySQL設定を反映/var/www/cacti/include/config.php

→作成したDBにアクセスできるように編集する

WEBブラウザで設定

http://(インストールしたサーバアドレス)/cacti/ にブラウザアクセス
NEXT >>を選択
NEW Install >>を選択
SNMP Utility Version    NET-SNMP 5.x
RRDTool Utility Version    RRDTool 1.2.x を選択
FINISHをクリック

ログインしてみる http://(インストールしたサーバアドレス)/cacti/index.php 

ログイン画面にて、admin/adminを入力

パスワード変更を要求してくるので新パスワードを入力

これで、監視サーバの設定は完了です。

→yumでインストールした場合には、データ収集のcronは設定済みとなります。 /etc/cron.d/cacti
 */5 * * * *     cacti   php /var/www/cacti/poller.php &>/dev/null

Patchやプラグイン等により色々と拡張可能ですので

今回は、最低限のインストール方法でしたが 

次回は、patchやプラグイン追加と監視先サーバへのSNMPインストールを紹介できればと思います。 

サーバ監視ソフトウェア「ganglia」を使ってみる

0

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

こんにちわ、uです。

最近、社内で良い監視ツールが無いか色々試しています。

先日、その一つとしてgangliaというサーバ監視ソフトウェアを

試しに入れてみましたので簡易的ですが、インストールメモを残しときます。

■導入環境 

OS: 64bit Centos 5.1

■Installation
184 yum -y –enablerepo=rpmforge install rrdtool perl-rrdtool
186 cd /usr/local/src/
187 rpmbuild –rebuild ganglia-3.0.7-1.src.rpm
188 yum -y –enablerepo=rpmforge install libpng-devel libart_lgpl-devel rrdtool-devel freetype-devel
189 rpmbuild –rebuild ganglia-3.0.7-1.src.rpm
190 cd /usr/src/redhat/RPMS/x86_64/
191 rpm -vhi ganglia-gmetad-3.0.7-1.x86_64.rpm
192 rpm -vhi ganglia-gmond-3.0.7-1.x86_64.rpm
194 cd /usr/local/src/
195 rpm -vhi ganglia-web-3.0.7-1.noarch.rpm


■gmetadの起動
185 vim /etc/gmetad.conf
setuid_username “apache”
186 chown apache.apache /var/lib/ganglia/rrds
187 service gmetad stop
188 service gmetad start
190 service gmetad status
191 telnet localhost 8651

■gmondの起動
193 echo “any net 224.0.0.0/4 dev eth0” >> /etc/sysconfig/static-routes
195 /etc/init.d/network restart
196 netstat -rn
201 cp /etc/gmond.conf /etc/gmond.conf.org
202 vim /etc/gmond.conf
# 編集内容は以下参照
http://www.thinkit.co.jp/cert/article/0611/13/1/code4.htm
203 service gmond start
204 service gmond status
205 telnet localhost 8649

■gangliaの確認
http://localhost/ganglia
 

■参考文献

  • http://www.thinkit.co.jp/free/article/0611/13/1/ 

■感想

yumコマンドで一発終了というのは無理ですが、そんなに躓かずにインストールが出来ました。 

参考文献に書いてある通り、例えば100台のサーバのロード値だけをグラフに表したい等、複数台のサーバの特定の値を一度に表示させる時は非常に便利です。

ただし、ざっと使ってみた感じでは、先日の記事munin程の詳細な情報は取得できないみたいです。 

一長一短ですね。

Rubyでどう書く?:RubyでPDF履歴書を作成する

0

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

KBMJがZDnetで連載している記事を紹介します。コメントなどありましたらそちらでお願いします。

Rubyでどう書く?:RubyでPDF履歴書を作成する   高倉利明(KBMJ)

第2回目のテーマは「RubyでPDF文書を作成する」と題しまして、RubyでPDFの文書を作成する方法について解説したいと思います。

 問題

 Webアプリケーションを開発していると、「PDF文書を作成してほしい」との要望をクライアントから頂くことがあります。しかし、Rubyの実際のサービスでPDFを出力しているものはあまりありませんでした。

 ここでは以前、私が行った開発を元にノウハウを紹介したいと思います。

仕様

  • Ruby on Railsを使用(実際に必要になるケースはRoRプロジェクトがほとんどと考えました)
  • Rfpdfプラグインを使用(インストール方法はRoR Wiki 翻訳 Wiki – Rfpdfを参照)
  • 出力するフォーマットは図1のイメージ

図1 イメージ画像 図1 イメージ画像

回答例

class Resume

  class << self
    # PDF出力メソッド
    def output
      pdf = Pdf.new(“高倉 利明”, “タカクラ トシアキ”)
      file = File.open(“C:\\resume.pdf”, “wb”)
      file.write(pdf.generate)
    end
  end

  # pdf作成クラス
  class Pdf

    IC_SJIS = Iconv.new(‘SJIS’, ‘UTF-8’)

    def initialize(name, kana)
      # 出力データ
      @name, @kana = name, kana
      # マージン
      @lm, @tm = 10, 10
      # 基本となる罫線の横、縦サイズ
      @width, @height = 120, 20

      @pdf = FPDF.new
      @pdf.extend(PDF_Japanese)
      @pdf.AddSJISFont
    end

    # PDF(バイナリデータ)を作成
    def generate
      @pdf.SetMargins(@lm, @tm)
      @pdf.AddPage
      drow_format(@lm, @tm)
      drow_data(@lm, @tm)
      return @pdf.Output
    end

    # フォーマット描画
    def drow_format(left, top)
      @pdf.SetXY(left, top)
      setBoldLine
      @pdf.Cell(@width, @height, ”, 1)
      @pdf.SetXY(left, top)
      setThinLine

      # 氏名(フリガナ)欄
      @pdf.SetXY(left, top)
      @pdf.SetFont(‘SJIS’,”, 8)
      @pdf.Cell(20, 5, ic(‘フリガナ ’), ‘B’, 0)
      @pdf.Cell(@width – 20, 5, ”, ‘B’, 1)

      # 氏名欄
      y = @pdf.GetY
      setBoldLine
      @pdf.Cell(@width, 15, ”, ‘B’, 0)
      @pdf.SetXY(left, y)
      @pdf.SetFont(‘SJIS’,”, 8)
      @pdf.Cell(20, 5, ic(‘氏名 ’), 0, 2)
      @pdf.Cell(20, 10, ”, 0, 0)
      @pdf.SetXY(left + 20, y)
      @pdf.Cell(@width – 20, 15, ”, 0, 1)
    end

    # データ描画
    def drow_data(left, top)
      @pdf.SetXY(left, top)
      write_string(left + 25, top + 3, 10, @kana)
      write_string(left + 25, top + 13, 14, @name)
    end

    def write_string(left, top, font_size, string)
      @pdf.SetXY(left, top)
      @pdf.SetFont(‘SJIS’,”, font_size)
      @pdf.Write(0, ic(string))
    end

    def setBoldLine
      @pdf.SetLineWidth(0.3)
    end

    def setThinLine
      @pdf.SetLineWidth(0.1)
    end

    def ic(str)
      IC_SJIS.iconv(str)
    end

  end
end

 本ソースをresume.rbとしてRoRプロジェクトののmodelディレクトリに配置し、以下のコマンドを実行することで「C:\resume.pdf」で出力されます。ruby script/runner Resume.output

解説

本サンプルでは、

  1. マージン、枠の縦横サイズの初期化「initialize」「generate」
  2. 罫線などのフォーマットを描画「drow_format」
  3. 各項目の値を描画「drow_data」

 というステップにわけて処理をしています。

 RFPDFライブラリを使用する場合は、

  1. FPDF.newでオブジェクト生成
  2. 日本語が扱えるようにextendやAddSJISFontメソッドで指定
  3. AddPageメソッドでページを追加
  4. ページに表示する内容を描画
    • 座標:SetXY、SetX、SetY、GetX、GetYなどを利用
    • 文字フォント:SetFontで指定
    • 罫線サイズ:SetLineWidthで指定
    • 罫線:Cellメソッドで描画(第三引数に文字列を指定することで、同時に文字の描画も可能)
    • 文字:Writeメソッドで描画
  5. Outputメソッドでバイナリを出力

 という流れとなります。

 日本語を出力する際は、Iconvを使用してSJISに変換しています(ソースをUTF8で書いているため)。

 なお、RFPDFの詳しい使用方法は、FPDFのWebサイト「FPDF」を参考にしてください。

最後に──

 駆け足で説明しましたが、いかがだったでしょうか?

 実際のところ、RFPDFは1年近く更新されておらず、また日本語を扱う上でまだバグが見られるのが現状です。

 また、罫線などの枠線をプログラムで引いている関係上、直観的ではない作りになってしまうのが欠点です。

 もっと良い方法があれば、コメント (コメントはこちら)やbuilderブログなどで是非教えていただきたいと思います。

clearfixでfloat解除

0

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

こんにちは。
最近Rubyをあんまり触ってないmaiです。

あんまり触ってなくて、Rubyについてあまり語れるほどのことが無いので、
今日はstylesheetのちょっと役立つTipsをご紹介。

cssでfloatを使うと、画像やらボックスやらが親要素からはみ出しちゃうことがあります。
これを解消するには、親要素を閉じる前にfloatをclearで解除すればいいのですが、
空divでclearさせるのは無駄なソースだし美しくない。
そんな美学か美意識を持ってる人にお役立ちなのがclearfixというテクニックです。

———————————–
以下のclearfixはFirefox3でうまくいかないことがあります。
Firefox3にも対応したバージョンは
clearfix for Firefox3」で。
———————————–

御託を並べても仕方が無いので、さっくりとcssをご紹介。

.clearfix:after {
content: “.”;
display: block;
height: 0;
clear: both;
visibility: hidden;
}
 .clearfix {display: inline-block;}

このclearfixを、親要素に適用します。

<div id=”main” class=”clearfix”>
<p style=”float:left”>左の要素</p>
<p style=”float:right”>右の要素</p>
</div>

こんなカンジ。
これでid mainのdivは二つのpを内包しているように振るまいます。
空divをかかなくてよくなるので、ソース上ちょっとスッキリするのもいいところ。

もともと、floatは通常の流れから切り離された浮動体なので、
親要素がfloatしている要素の高さを考慮しなくなるのは仕様上正しいことなんですが、
レイアウトを組む身としては、clearfixがなくても、
floatしている要素の高さも認識してほしいなぁと思わないでもないです。

ちなみに、clearfixについては以下のサイトも参考になります。

 clearfixの決定版を作る -モダンブラウザ編-

SELinux無効にしてみる

0

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

SELinuxとはセキュアOSと呼ばれるものの一種。
簡単な解説は、はてなダイアリー。↓
http://d.hatena.ne.jp/keyword/SELinux

サーバーのセキュリティー的には素敵なSELinuxも、サーバー初心者にとっては、
アプリの起動を妨げたり、妨げたり、妨げたり・・・と少々ハードルの高いお方です。
というわけで、今回はSELinuxにおとなしくしていただこうと思います。環境はCeontOS5です。
rootユーザーで以下を行います。

とりあえずSELinuxの現状を把握します
# getenforce
Enforcing

Enforcingというものが出力された場合、SELinuxは有効になっています。
ちなみに、SELinuxには次の3つのモードがあります。

    * disableモード:SELinuxを完全に無効にする。
    * enforcingモード:ポリシーに違反するアクセスに対し、ログに書き出して拒否する。
    * permissiveモード:ポリシーに違反するアクセスに対し、ログに書き出して許可する。

とりあえず、今回はSELinuxを完全無効にしたいと思います。

SELinux完全無効化
/etc/sysconfig/selinuxというファイルを編集します。

# vi /etc/sysconfig/selinux

ファイルの中身はこんな感じです。
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing – SELinux security policy is enforced.
#       permissive – SELinux prints warnings instead of enforcing.
#       disabled – SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted – Only targeted network daemons are protected.
#       strict – Full SELinux protection.
SELINUXTYPE=targeted

6行目をSELINUX=disabledと変更します。

変更後はこんな感じになります。
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing – SELinux security policy is enforced.
#       permissive – SELinux prints warnings instead of enforcing.
#       disabled – SELinux is fully disabled.
SELINUX=disabled   #ここを変更しました
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted – Only targeted network daemons are protected.
#       strict – Full SELinux protection.
SELINUXTYPE=targeted

これで次回、システムを起動したとき、SELinuxは無効となります。

システム再起動# reboot

ちなみに、selinuxファイルの編集をしくじると、システム再起動時にカーネルパニックが起こり、
OSの再インストールという悲劇が起こりかねません。
編集するときはご注意ください。

最近人気な記事