2012-12-27

状態監視ツールmuninのインストール手順

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
SoftwareDesignでlinuxの状態監視ツールのmuninを紹介していて興味を持ってみたのです。


この本で紹介されている手順では、最新版ではズーム機能がうまく動きませんでした。

環境は、CentOS6にmunin2.0.8を入れることを前提とします。

また10.10.10.20のマシンの状態を10.10.10.10で監視するとします。

以下が手順です。


[監視される側(10.10.10.20)]
yum --enablerepo=epel install munin-node

vi /etc/munin/munin-node.conf
以下を環境にあわせて登録
host_nameに監視される側のホスト名を
allowに監視する側のIPアドレスを書きます。
---------------------------
host_name munin.sample.jp
allow ^10\.10\.10\.10$
---------------------------

chkconfig munin-node on

service munin-node start

vi /etc/httpd/conf.d/status.conf
-----------------------------------
<IfModule mod_status.c>
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
</IfModule>
-----------------------------------

service httpd configtest
service httpd graceful

ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/
ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/
ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/

service munin-node restart





[監視する側(10.10.10.10)]
yum --enablerepo=epel install munin
yum --enablerepo=epel install munin-cgi

vi /etc/munin/munin.conf
以下の変更を行う
[munin.sample.jp]
は監視される側の情報です。addressにIPアドレスを記載します。
------------------------------------
cgiurl_graph /cgi-bin/munin-cgi-graph

[munin.sample.jp]
address 10.10.10.20
use_node_name yes
------------------------------------

#以下はいらないかもしれないです。
chown -R munin.apache /var/log/munin
chmod 775 /var/log/munin
chown -R munin.apache /var/www/html/munin
chmod -R 775 /var/www/html/munin
mkdir /var/lib/munin/cgi-tmp
chown munin.apache /var/lib/munin/cgi-tmp
chmod 775 /var/lib/munin/cgi-tmp
mkdir /var/lib/munin/spool
chown munin.munin /var/lib/munin/spool
chmod 755 /var/lib/munin



これでOKです。お手軽です。便利です。

2012-12-16

ActiveScaffoldでも楽観的ロックは使えるようです

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsで楽観的ロックを使うためにはテーブルにlock_versionというinteger型のカラムを追加してあげればOKなのです。

詳しくは、以下が参考になります。
http://rubyonrails.gachinko.org/2012/11/

ActiveScaffoldもlock_versionというカラムがあればきちんと楽観的ロックを利用してくれます。
1点だけ注意する点としては、更新するカラムを限定している場合時でもlock_versionを更新対象に含めてあげることを忘れてはいけないのです。


ちなみに、このブログでactive_scaffoldに関しての情報を他にも乗せています。
ActiveScaffoldの小ネタのまとめ

2012-12-11

windowsでrubyプログラムを配布するにはocraが便利

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyでちょろちょろっとプログラムを書いたから活用してもらいたいなぁとか思ったときです。

rubyを使っている人ならいいのですが、プログラマーでない人にくばるとなるとwindows環境でruby実行環境があることは期待できません。

そんなときはocraが便利です。
rubyスクリプトとruby実行環境をまとめてexeファイルにしてくれます。
gem install ocra
でインストールできます。

exeを作るのも
ocra aaa.rb
みたいにexe化したいスクリプトをわたせばexeファイルを生成してくれます。
以下が参考になります。
http://myruby.seesaa.net/article/124126159.html

他にもexerbもあるのですが、1.9ではocraがよいようです。
以下が参考になります。
http://aoitaku.xrea.jp/logue/2012/04/12/to_distribute_ruby_application/

exe化するときは若干気をつけたほうがよいことがあります。
ocraは実行時にどこかにファイルを展開して実行しています。

なので配布したexeファイルと同じフォルダに設定ファイルを読み込ませるみたいな動きはうまく動きません。
なので設定ファイルの変わりに実行時の引数と渡すようにしてbat側に設定を入れておいてbatの中で引数つきで実行させるとよいです。

またexeファイルと同じフォルダにログでも出力しようかなぁと思ったときも、同じフォルダに出力されずに思わぬところに出力されます。
なのでファイル出力の変わりに標準出力に出力してbat側でファイルに保存させればよい感じです。



2012-11-29

ハニワLED

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
LEDをリューターで削って黒マジックで塗ってみた。


2012-11-03

rubyでicalendar形式のファイルを読み込んでgoogleカレンダーに登録する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
スケジュールソフトで他のソフトと連携できるようにするためにicalendar形式でデータを出力できるものがあります。
そのファイルをgoogleカレンダーで取り込むことができます。
以下に具体的に説明があります。
http://support.google.com/calendar/bin/answer.py?hl=ja&answer=37118

これと似たようなことをrubyでやる方法です。

条件としては、以下のような感じです。
・icalendarのデータを取り込むための他のデータが入っていない専用のgoogleカレンダーが一つ必要
・取り込む際に、一定期間の登録済みデータを削除する
・単純な繰り返し予定は登録可能

sample.icsファイルを読み込む場合は以下のような感じです。
gclapi
icalendar
vpim
simple-rss
が必要ですのでgemでインストールしてください。

# -*- encoding: utf-8 -*-

require 'rubygems'
require 'date'
require 'gcalapi'
require 'icalendar'
require 'simple-rss'
require 'vpim/icalendar'

GACCOUNT = "googleアカウント"
GPASSWD  = "googleアカウントのパスワード"
GCALNAME = "データ登録するgoogleカレンダーの名前"
DEL_TERM = 31 #登録済みデータを削除する期間

service = GoogleCalendar::Service.new(GACCOUNT,GPASSWD)
g_cals = SimpleRSS.parse( service.calendars.body ).entries

gcal_link = nil
g_cals.each do |c|
  if c[:title].encode('utf-8','utf-8') == GCALNAME
    gcal_link = c[:link]
    break
  end
end

gcal = GoogleCalendar::Calendar::new(service, gcal_link)

today  = Date.today
endday = Date.today + DEL_TERM

conditions = {}
conditions['start-min'] = today
conditions['start-max'] = endday
gcal.events(conditions).each do |e|
  e.destroy!
end

f = open("sample.ics")
ics = f.read
f.close

ical = Icalendar::parse(ics,true)
ical.events.each do |ie|
  if ie.recurrence_rules?
    fs = Time.parse(ie.dtstart.to_s.sub(/\+.*/, ''))
    fe = Time.parse(ie.dtend.to_s.sub(/\+.*/, ''))
    diff = fe -fs
    Vpim::Rrule.new(fs,ie.recurrence_rules.first.orig_value).each(endday.to_time) do |time|
      ge        = gcal.create_event
      ge.title  = ie.summary
      ge.st     = time
      ge.en     = time + diff
      ge.allday = ge.st.hour == 0 and ge.st.min == 0 and ge.en.hour == 0 and ge.en.min == 0
      ge.save!
    end
  else
    ge        = gcal.create_event
    ge.title  = ie.summary.encode("utf-8") 
    ge.st     = Time.parse(ie.dtstart.to_s.sub(/\+.*/, ''))
    ge.en     = Time.parse(ie.dtend.to_s.sub(/\+.*/, ''))
    ge.allday = ge.st.hour == 0 and ge.st.min == 0 and ge.en.hour == 0 and ge.en.min == 0
    ge.save!
  end
end


GACCOUNT
GPASSWD
GCALNAME
を利用する環境にあわせて変更すれば利用できるはず。

以下のサイトを参考にさせていただきました。
https://github.com/wtnabe/ical2gcal
http://www.func09.com/wordpress/archives/168

2012-10-28

タカラトミーの「夜空におえかき」がキニナル

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

タカラトミーの「夜空におえかき」というのがキニナルのです。
ものとしては、いろんな色が出るライトのようです。
これと専用の無料のiphoneアプリを使って簡単におしゃれな光で描いた絵の写真が撮れてしまうようです。

専用のアプリでなくても長時間露出できれば絵はできるとは思いますが、アニメーションなども簡単にできるようです。

詳しくは、以下を。
http://www.takaratomy-arts.co.jp/specials/oekaki/

ぜひandoridのアプリも出してもらいもんです。

2012-10-22

twitterを利用した簡易読書録を作る方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
twitterを利用して私がやっている簡易な読書録の作り方をまとめてみます。

簡単に言ってしまえば、ツィートに「#読んだ」とハッシュタグをつけるだけです。

さらに自分のつけた「#読んだ」のツィートを見れるようにするために
を利用します。

これで以下のような感じの簡易な読書録ができあがります。

私の場合は、書名とamazonへのリンク(詳しい情報はamazonさんにおまかせ)を入れています。

この書名とamazonへのリンクを入れるために私が作ったandroidアプリ
を利用しています。

BARCOTTERは、バーコード情報をカメラで読み取るか入力することでamazonで検索を行い書名などの情報を取得してtwitterなどに取得した情報を渡すアプリです。
詳しくは、以下をご覧ください。


実際の読書録を作る際の流れは以下のような感じです。

①BARCOTTERを立ち上げます。

②カメラがついていれば読取を押してカメラを起動してバーコードを読み取ります。バーコードが読み取りにくいときはフラッシュをつけたりすると読み込みやすくなるようです。
カメラがない場合は、「BARCODE or ISBN」の欄に直接バーコードを入力します。
また、「後にテキストを追加の部分」に「#読んだ」と入れておきます。


③共有を押します。(設定で読み取り後自動で共有を実行できます。)共有すると共有するアプリを選択できるのでtiwtterを選択して、適当にメモを追加してツィートします。

これでOKです。

ちゃんとした読書録を作りたい場合は、以下にいろいろな読書記録のサイトが紹介されているので参考になります。
http://matome.naver.jp/odai/2129578537652781601


ちなみにBARCOTTERで判別できるのは、本だけではなくCDやDVDなども判別できます。
なので読書録だけでなく音楽録や映画録などに応用もできたりもしますよ。

2012-10-13

railsでsend_fileするときに日本語ファイル名を指定するとchromeでたまに文字化けする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsでファイルダウンロードさせるためにsend_fileを使うときに日本語ファイル名でダウンロードさせるとき、私は以下のようにしていました。

filename = "今後の予定.xls".encode("cp932")
send_file(f, :filename => filename)

cp932でencodeしているのは、utf-8でおくるとIEが文字化けしていたので、そうしています。

普段は、chromeでも特に問題がありません。
しかし、たまに文字化けが出ていました。
上記のファイル名の場合は「予」の部分で文字化けがおきてしまいます。

これの原因は、たぶん以下のサイトで書いてあることが影響している気配です。
https://sites.google.com/site/fudist/Home/grep/damemoji

で対策として以下のようにするようにしました。

filename = ERB::Util.url_encode("今後の予定.xls")
send_file(f, :filename => filename)

これで問題なくIEでもchromeでも文字化けしないようになりました。

以下が参考になったサイトです。

http://kiita-it-blog.seesaa.net/article/253744186.html



2012-10-02

お好きなYoutubeムービーをAndroidのホームにショートカットとして登録する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
お好きなYoutubeムービーをAndroidのホーム画面にショートカットとして登録していつでもワンタッチで見れるようにする方法です。

まずYoutubeアプリで登録したいムービーを検索します。
ちなみにロングブレスダイエットの方法を検索してみました。

そして目的のムービーを表示します。

設定ボタンを表示して、URLをコピーします。

ここで一度Youtubeアプリを終了して、ブラウザを立ち上げてコピーしたURLを貼り付けます。

Youtubeで見るように選択します。常にこの操作で私用するにチェックを入れてもよいです。

目的のムービーが表示されることを確認します。

そして、またブラウザに戻ります。ブラウザ上部を触ってURL入力バーを出してタブボタンを押します。

設定を表示して、履歴を表示させます。

今日の履歴を表示して、Youtubeムービーを長押しします。

ブックマークに保存を選択します。

ラベルを好きなものして、追加先を「ホーム画面」にします。

するとホーム画面にショートカットが作成されています。これでワンタッチでムービー見れるようになったわけです。アイコンがちょっと気に入らないのですが、よしとしましょう。

2012-10-01

ActiveScaffoldでpaper_trailの履歴情報を表示する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ActiveRecordの履歴情報には、
paper_trail
がよさげと先日ご紹介させていただきました。
ActiveRecordの変更履歴を保存するにはpaper_trailがよさげ


そのpaper_trailで保存された履歴情報をActiveScaffoldで表示する方法です。

Blogモデルで履歴情報を残すようにして、Blogモデル用のActiveScaffoldで履歴情報をネストして表示できるようにする例です。

ActiveScaffoldでnestを利用するには、has_manyで関係が明示されていないとダメっぽいので
まずはBlogモデルの履歴表示用のBlogVersionというモデルを作ります。
以下のような感じです。

# -*- encoding: utf-8 -*-
class BlogVersion < Version
  def method_missing(action)
    unless self.reify.attributes.keys.index(action.to_s).nil?
      self.reify[action]
    else
      super
    end
  end
end

paper_trailにより作成されたVersionモデルを継承します。
そしてmethod_missing内でBlogモデルが持つattributeと同じものを利用できるようにします。
厳密にはidとcreated_atだけはVersionのものになってしまいます。

そしてBlogモデルで以下のようにします。

# -*- encoding: utf-8 -*-
class Blog < ActiveRecord::Base
  has_many   :blog_versions, :foreign_key => "item_id"
end

versionsテーブルでblogsのidを保持するのはitem_idになるのでforeign_keyに指定します。


コントローラー側です。
まずは、BlogVersion用のものです。

class BlogVersionController < ApplicationController
  active_scaffold :blog_versions do |config|
    config.label = "変更履歴"
    config.actions.exclude :create, :update, :delete, :search
    config.columns = [:entry,
                      :auther,
                      :updated_at]
  end
end

新規追加、変更、削除はできないようにしておきます。
そして表示するカラムは明示します。

Blog用のものは以下のような感じです。

# -*- encoding: utf-8 -*-
class BlogController < ApplicationController
  active_scaffold :blogs do |config|
    config.label = "ブログエントリ"
    config.columns = [:entry,
                      :auther,
                      :created_at,
                      :updated_at]
    config.nested.add_link(:blog_versions, :label => '変更履歴')
  end
end

ここのnestedでblog_versionsを指定することで各ブログエントリ毎の変更履歴を表示することができるようになります。



ちなみに、このブログでactive_scaffoldに関しての情報を他にも乗せています。
ActiveScaffoldの小ネタのまとめ