2013-05-30

windows7に子供用アカウントを作成する。そして無料でできるだけの安全対策をしてみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
そろそろ子供にパソコンを使うのを許可しようかなぁと思ってみたわけです。

前提としては、以下のような感じです。
・PCは親と共用。アカウントを子供用と大人用のものを作って利用することにする。
・利用できるのはwebだけで学校の調べものとかはできるようにする。他のソフトは状況を見て考える。
・利用できるブラウザはIEにする。なんとなく子供用の安全対策がしやすそうなので・・・

というわけで、
大人用アカウントとして管理者権限を持つotona

子供用アカウントとして標準アカウントのkodomo
を作ります。
一応、アカウントの作り方は、以下が参考になります。
https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?rid=5&PID=3608-2280

行ったことを列挙しまくってみます。

(1)windows7のペアレンタルコントロールをかける
http://windows.microsoft.com/ja-JP/windows7/What-can-I-control-with-Parental-Controls

ここで設定したのは、以下のようにしました。
制限時間:設定しない
ゲーム:レーティングのないゲームを禁止する。全年齢対象のものを許可。
特定のプログラムの許可:基本的に何も設定しない

特定のプログラムの許可で基本的には、何も設定しないのですが、全ユーザで自動で起動するものがいくつか存在します。
自動起動するプログラムを確認するには、子供用アカウントでログインすると自動起動するプログラムが起動できずにメッセージを表示することでわかります。

自動起動するプログラムがわかったら、個別にどんなプログラムか調べて、地道に許可します。
許可したものの例としては、ウィルス対策ソフトなどです。

調べた結果、別に全ユーザで起動する必要がない気がするものに関しては、アンインストールしたり、msconfigで起動をとめてしまいます。
msconfigの使い方は以下を参考にしてください。
http://support.microsoft.com/kb/2168138/ja


(2)子供用デスクトップを最小限のアイコンだけにする
デスクトップには全ユーザ共通に表示されるものがあります。
それは、
C:\Users\Public\Desktop
にあります。
ここで本当に全員に表示させてもよいものだけを残し、それ以外は大人用アカウントのデスクトップに表示させることにします。
不要なものは、上記フォルダから
C:\Users\otona\Desktop
に移動します。


(3)スタートメニューのプログラムも最小限のものだけにする
スタートメニューも全ユーザ共通で表示されるものがあります。
それは、
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
にあるので、本当に必要なものだけを残して、
不要なものは大人用のスタートメニューのフォルダ
C:\Users\otona\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
に移動します。


(4)IEのコンテンツアドバイザーを有効にする
http://windows.microsoft.com/ja-jp/windows7/using-content-advisor-to-help-block-inappropriate-web-content
大人用アカウントでIEのコンテンツアドバイザーを有効にします。
これはPC全体に効く気配なので大人にも効いてしまいます。
大人はchromeを使うのでよしとすることにします。

コンテンツアドバイザーの設定としては、以下のような感じにしています。
規制:すべて一切禁止
全般:規制されていなWebサイトを表示するにチェック

全般のほうは、これのチェックをいれないと見れなすぎるので、とりあえず入れておきます。


(5)子供用のブラウザのホームをyahooキッズにする
子供用アカウントでログインして、ホームをyahooキッズにする。
yahooキッズのURLは以下です。
http://kids.yahoo.co.jp/

そして、yahooあんしんねっとを利用するために
yahooキッズのサイトから子供用のyahooアカウントを一つ作成する。


(6)yahooあんしんねっとのインストールと設定
作業は、まず大人のアカウントで行います。
yahooあんしんねっとは以下のURLです。
http://anshin.yahoo.co.jp/

まずは管理者用として大人のyahooアカウント(取得済み前提)を登録します。
そして、管理対象となる(5)で作成した子供用のyahooアカウントを登録します。

そしてインストールを行います。
インストールは大人用アカウントで行います。
途中、yahooアカウントを求められたら大人用のyahooアカウントを登録します。

インストールが完了したら、(1)で行ったペアレンタルコントロールの許可するプログラムに以下を追加します。
C:\Program Files (x86)\Yahoo!JP\browser
ycommon.exe
ycommonlow.exe
C:\Program Files (x86)\Yahoo!JP\Parental Controls
ypc.exe
YPCFilter.exe

yahooあんしんねっとは利用しているPCすべてに影響します。
yahooアカウントでログインしないと何もできないです。
なので大人用アカウントは大人用yahooアカウントでログインします。これで特に制限は受けません。
子供用アカウントは、子供用yahooアカウントでログインします。これで制限がかけられます。

制限かけている内容は、今はデフォルト設定にしています。

ひとつyahooあんしんねっとを使って困ることが起きていて
choromが起動する際に
エラー:Google Chromeで問題が発生しました。今すぐ再起動しますか?
と出て、何回かchromeを再起動しないと利用できないです。

yahooあんしんねっとを無効にすると問題なくなるので、yahooあんしんねっとが影響していると思えます。
まずは子供用の設定を優先して我慢することにしています。


無料でできるのは、こんな感じだと思います。

正直、有料のものを利用する方がよいと思います。
カスペルスキーがセキュリティソフトとしては評判がよさげです。ペアレンタルコントロールの機能もあるようです。

2013-05-29

rubyで数値配列の最小値、最大値、平均値、最頻値、中央値を求める

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyの数値配列からいろんな値を求めてみます。

以下の配列があるとします。

a = [1,2,2,3,4,7,9]

最小値
a.min
=>1

最大値
a.max
=>9

平均値
a.inject(0.0){|r,i| r+=i }/a.size
=>4.0
以下、参照
http://d.hatena.ne.jp/unageanu/20080115/1200392571

最頻値
a.max_by {|value| a.count(value)}
=>2
以下、参照
http://www40.atwiki.jp/spellbound/pages/2089.html

中央値
a.size % 2 == 0 ? a[a.size/2 - 1, 2].inject(:+) / 2.0 : a[a.size/2]
=>3
以下、参照
http://www40.atwiki.jp/spellbound/pages/2085.html

2013-05-24

rails3.2でサブディレクトリにデプロイしたら画像が出なかったとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
やっと、少しずつrailsの3.2を使うようになってきました。

assetがまだ慣れていないです。

以下のような感じでスタイルシートで画像を利用するにしてみました。

div.actions a.new {
  background-image: image-url('add.png');
}

開発環境では問題なく利用できていたので
本番環境にデプロイしてみました。

デプロイ先は、
/app
のようにサブディレクトリの下です。

本番環境では利用する際に

bundle exec rake assets:precompile

とassetをプリコンパイルして、いざ試してみたら画像が表示されません。

コンパイルされたスタイルシートをみたら以下のようになっていました。

div.actions a.new {
  background-image:url(/assets/add.png)
}

/appが現れていません!

で調べてみたら、以下のようにRAILS_RELATIVE_URL_ROOTをつけてプリコンパイルすればOKでした!

bundle exec rake assets:precompile RAILS_RELATIVE_URL_ROOT=/app

ちゃんと無事に/appが現れました。

div.actions a.new {
  background-image:url(/app/assets/add.png)
}

2013-05-09

railsでDATAと__END__みたいなやつ使ってみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyでは一つのファイルにプログラムとデータを一緒に記述できます。

以下のような感じです。

DATA.each_line do |l|
  puts l
end

__END__
aaa
bbb
ccc

__END__以下がデータを記述したファイル扱いになって、DATAで取り出せます。

これをrailsのmigrationでテーブルをcreateしたの時の初期データセットに利用してみようと思ったわけです。

こんな感じです。

class CreateHoges < ActiveRecord::Migration
  def self.up
    create_table :hoges do |t|
      t.column :c1 ,:string
      t.column :c2 ,:string
      t.column :c3 ,:integer
    end
    DATA.each_line do |line|
      d = line.split(",")
      h = Hoge.new
      h.c1 = d[0]
      h.c2 = d[1]
      h.c3 = d[2]
      h.save!
    end
   end

  def self.down
    drop_table :hoges
  end
end

__END__
aaa,bbbb,111
ccc,dddd,222


でも、これを実行しようとしたらDATAなど知らないよ!とエラーが出てしまいました。

明確な理由は、よくわからなかったのですがDATAと__END__を利用するのは一つのファイルで完結するようなものに限ったほうがよさそうです。
以下が参考になりました。
http://d.hatena.ne.jp/yarb/20120927/p1

そして調べていたら、以下のような感じにすればOKでした。

class CreateHoges < ActiveRecord::Migration
  def self.up
    create_table :hoges do |t|
      t.column :c1 ,:string
      t.column :c2 ,:string
      t.column :c3 ,:integer
    end
    data = File.read(__FILE__).split('__END__').last
    data.each_line do |line|
      line.chomp!
      next if line.size == 0
      d = line.split(",")
      h = Hoge.new
      h.c1 = d[0]
      h.c2 = d[1]
      h.c3 = d[2]
      h.save!
    end
   end

  def self.down
    drop_table :hoges
  end
end

__END__
aaa,bbbb,111
ccc,dddd,222


以下が参考になりました。
http://matthewtodd.org/2008/04/22/rails-tip-2-faking-data-in-tests.html

そもそもrailsでテーブルを追加した時の初期データセットってどうするのが普通なのかしらん?


2013-05-08

railsでテンプレートが存在するかどうかチェックする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsでテンプレートが存在しているかどうかを調べる方法です。

app/views/test/aaa.html.erb
が存在するかどうか調べるには以下のような感じです。

lookup_context.exists?('aaa', 'test')


そして部分テンプレート
app/views/test/_bbb.html.erb
が存在しているかどうかを調べるには以下のような感じです。

lookup_context.exists?('bbb', 'test', true)


以下が参考になりました。
http://qiita.com/items/80078311dd019e56cff2

2013-05-04

railsの部分テンプレートのspec

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsを利用していて、いつもviewのspecがあまいので、ちょっとだけ強化してみようと思ってみたのです。


部分テンプレートの内容を確認するspecってどう書くのかな?
とか思ったわけですが、以下のような感じでOKでした。

spec/views/user/_form.html.erb_spec.rb

require 'spec_helper'

describe '/user/_form.html.erb' do
  before do
    render :partial => 'user/_form'
  end
  it "必要要素をレンダリングする" do
    rendered.should have_selector('form.register') do |form|
      form.should have_selector("input#password")
    end
    rendered.should contain("登録してください")
  end
end


そして、その部分テンプレートを利用していることをチェックするspecは以下のような感じです。

describe 'user/create.html.erb' do
  it "部分テンプレート_formをレンダリングする" do
    render
    rendered.should render_template(:partial => "_form")
  end
end


cucumberの利用もあまいので、ちゃんと活用したいなぁと思う今日この頃です。

2013-05-03

railsのモデルを分割する。ついでにspecも。

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsを利用していると、どうしてもメインに利用するモデルが大きくなってしまいます。

でモデルを分割する方法です。

調べてみたところ以下の2つの方法があるようです。

 ・クラス拡張(オープンクラス)を利用
  以下が参考になります。
  http://morizyun.github.io/blog/concerned-with-many-model/
 ・モジュールを利用
 以下が参考になります。
 http://qiita.com/items/f2ae316dc8e98b4ff82a
 http://qiita.com/items/e8733784402636c9b1fc

具体的な方法をそれぞれ参照先を見てください。

どちらが主流なのかは、よくわからなかったのですが、私はクラス拡張の方を利用しました。

クラス拡張の方が大きくなったモデル分割するには変更が若干少なくて済みそうな気がするというのが理由です。

最初からモデルが大きくなることを見越しているならばモジュールを使ったほうがよさそうな気もします。

そして、そんな大きくなってしまったモデルのspecは輪をかけて大きくなっていると思います。
こちらの分割方法は以下のような感じです。

spec/model/order_spec.rb
を分割するとします。

以下のような感じで分割するファイルを格納するディレクトリとファイルを作成します。

mkdir spec/models/order
vi spec/models/order/validate_spec.rb

作成したファイルに、普通にspecを書けばOKです。

rake spec
を実行すると、作成したディレクトリの下の*_spec.rbも勝手に発見してくれます。

分割、方法はモデルの分割とあわせてもよいと思いますし、特に肥大化しているメソッドのテストだけ切り出すとかでもよいかもしれないです。