2013-12-30

railsプラグインをrubygemsに登録してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsのgemプラグインを作ってみたのでrubygemsに登録をしてみたいと思います。

作ったrailsプラグインに関しては、
http://kingyo-bachi.blogspot.jp/2013/12/rails.html
を見ていただけたらと思います。

rubygemsに登録するためには、rubygemsにアカウントを作成する必要があります。
https://rubygems.org/sign_up
からサインアップしてアカウントを作ります。

アカウントを作成するとAPI Keyが払い出されます。
これを
~/.gem/credentials
に保存するとrubygemsに登録ができるようになります。

API Keyは
https://rubygems.org/profile/edit
にあります。
またこのページには~/.gem/credentialsを作成するコマンドが書いてあるので、それをコピーして実行します。
パスワードが聞かれるので、パスワードを入力すると~/.gem/credentialsが作成されます。

これで登録する準備はOKです。

実際に登録する手順は、
登録するrailsプラグインのディレクトリに移動して
rake release
で登録されちゃいます。

以下の登録されちゃいました。
https://rubygems.org/gems/rails_acclog2db



以下が参考になりました。
http://blog.kyanny.me/entry/2012/02/20/015129

railsのプラグインを作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsのプラグインを作ってみました。

実際に作った手順を簡単に記録しておこうと思います。

作ったのは、railsのアクセスログをdbに保存するというものです。
after_filterでlogsテーブルに記録をするというだけのものです。

とりあえず名前はrails_acclog2dbとします。
githubに実際に作ったものを置いてみました。
https://github.com/vivahiraj/rails_acclog2db


まずは雛形を作ります。

rails plugin new rails_acclog2db -T --skip-bundle --dummy-path=spec/dummy

それぞれのオプションは
-T:テスト用ファイルの作成をスキップ(後でrspecを利用するようにします)
--skip-bundle:コマンド直後にbundle installを実行しない
--dummy-path:作ったプラグインを試すためのrails環境の場所を指定

cd rails_acclog2db


続いてrspecの設定を行います。

vi rails_acclog2db.gemspec


rspec-railsとammeterを追加します。
ammeterはgeneratorのspecを作成する際に利用します。

関連するgemをvendor配下にインストールするように設定します。(必須ではないです)

mkdir .bundle
vi .bundle/config

内容は以下のような感じです。
------------------------------
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: "1"
------------------------------

gemをインストールします。

bundle install

rspec用のファイルを生成します。

cd spec/dummy
ln -s ../../spec
rails generate rspec:install
cd -
cp spec/dummy/.rspec .

spec_helperを修正します。

vi spec/spec_helper.rb




environmentの読込先を変更してammeter/initを追加します。


今回はログの記録先としてlogsテーブルに保存したいので、migrationとmodelをrails generateで実行できるようにするために専用のgeneratorを作成してみます。

まずはgeneratorでコピーするファイルを保存するディレクトリを作成します。
mkdir -p lib/generators/rails_acclog2db/install/templates

コピーするモデルを作成します。

vi lib/generators/rails_acclog2db/install/templates/log.rb

コピーするマイグレーションを作成します。

vi lib/generators/rails_acclog2db/install/templates/create_logs.rb

ジェネレーターを作成します。

vi lib/generators/rails_acclog2db/install/install_generator.rb

だいたいこんな感じがお決まりのようです。

ジェネレータのspecも作成してみます。

mkdir -p spec/generators/rails_acclog2db/install

vi spec/generators/rails_acclog2db/install/install_generator_spec.rb

specが成功することを確認してみます。
bundle exec rspec spec


実際にジェネレートできるかテスト用のrails環境で試してみます。
cd spec/dummy/
rails g rails_acclog2db:install

実際にmigrationもできるか試します。
rake db:migrate
rake db:migrate RAILS_ENV=test

cd ../../

作成されたLogモデルのspecも作ってみます。

mkdir spec/models
vi spec/models/log_spec.rb
specが成功することを確認してみます。
bundle exec rspec spec


つづいてメインの部分でlogを記録する部分です。
controllerにaccess_loggingと書いたら、そのcontrollerへのログを記録するようにしてみます。
sessionに:userが設定されていたら、きっと何かしらの認証がされたと思い込んで、それっぽい情報を保存するようにもします。

vi lib/rails_acclog2db/logging.rb

ActiveSupport::Concernをextendするとモジュールで取り込まれるclassメソッドとかインスタンスメソッドがちょっとすっきりかけるようです。

上記のファイルをrequireできるようにします。

vi lib/rails_acclog2db.rb 



実際にテスト用のrails環境のcontrollerに組み込んでみてspecを作成してみます。

まずはcontrollerを準備します。

cd spec/dummy
rails g controller welcome
touch app/views/welcome/index.html.erb

vi app/controllers/welcome_controller.rb



vi config/routes.rb



次にspecを作成します。
cd ../../

vi spec/controllers/welcome_controller_spec.rb

specが成功することを確認してみます。
bundle exec rspec spec


これが普通な作り方なのかはよくわからないのですが、こんな感じでできました。


以下が参考になりました。
http://guides.rubyonrails.org/v3.2.14/plugins.html
http://d.hatena.ne.jp/kouji0625/20130523/p1
http://d.hatena.ne.jp/kouji0625/20130524/p1

2013-12-28

gitの供用リポジトリの作り方

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
gitの共用リポジトリの作り方です。

用件としては、
・commitする人には認証をしてもらいたい
・でも認証なしでread onlyで使えるようにしたい
という感じのものです。

方法としては、commitはssh経由で行うようにしてread onlyはgitプロトコルでgit daemonで提供する感じになります。

環境はCentOS6です。

rootで実行します。

・git commitできるユーザが所属するgroupを追加
addgroup gitrepo

・commitできるユーザの登録
commitする人のアカウントを事前に作っておく必要があります。
そして上記のグループに追加します。
以下はユーザvivahirajにgit commitを許可する例です。
usermod -a -G gitrepo vivahiraj

・gitリポジトリ格納用ディレクトリを作成
mkdir /var/git

・公開用の認証なしでの利用ができるようにgitデーモンのインストール
yum -y install git-daemon

・gitデーモンの設定
vi /etc/xinetd.d/git
disableとserver_argsを変更します。
server_argsのほうでは、専用のリポジトリの指定したプロジェクトのみが公開されるようにするために--export-allと--user-pathをはずしました。
---------------------------------------------
#disable = yes
disable = no
#server_args = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose
server_args = --base-path=/var/git --syslog --inetd --verbose
---------------------------------------------

・xinetdの自動起動設定と再起動
chkconfig xinetd on
service xinetd restart

以上で器はできました。



で個別プロジェクトのリポジトリの作成方法は以下のとおりです。
以下ではsampleというプロジェクトを作っているものとします。

・プロジェクト用の供用リポジトリの作成
cd /var/git
mkdir sample.git
cd sample.git
git --bare init --shared
cd ..
chgrp -R gitrepo sample.git
認証なしで公開する場合は以下も実行
touch sample.git/git-daemon-export-ok



で、実際にクライアント側からソースの初期登録を行う例です。
別途クライアント側から実行するものとします。 
初期データとしてsampleディレクトリに登録するものがある場合です。
リポジトリがあるサーバをgit.server.comとします。

・初期登録
cd sample
git init
git add .
git commit -m "first commit"
git remote add origin ssh://git.server.com/var/git/sample.git
git push origin master



ついでなので、リポジトリからソースを取得して変更するときの例です。

・取得と変更
git clone ssh://git.server.com/var/git/sample.git sample
cd sample
適当に変更
git add .
git commit -m "change test"
git push origin master

ちなみにgitプロトコルで公開設定したリポジトリにgemを登録しておけば、
bundler利用の場合だったら以下のように指定することでgemインストールすることができます。

gem 'sample', :git => 'git://git.server.com/sample.git'






2013-12-25

WindowsでrubyをいじっていてSSLエラーがどうのこうの言われた場合の対処

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Windows環境でrubyを利用していて

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

みたなエラーが出た場合の対処です。

http://curl.haxx.se/ca/cacert.pem
をダウンロードして
c:\ruby
みたいな適当なところに保存しておきます。

そして、環境変数SSL_CERT_FILEを設定します。

Windows7の場合だったら
コントロールパネルから
システムとセキュリティ-システム-システムの詳細設定を選び
環境変数をクリックします。
そして、システム環境変数の新規をクリックして
変数名:SSL_CERT_FILE
変数値:C:\ruby\cacert.pem
としてOKとします。

これでOKです。

以下が参考になりました。
http://stackoverflow.com/questions/5720484/how-to-solve-certificate-verify-failed-on-windows

2013-12-24

rubyでGoogle Calendarをいじる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyでgoogleカレンダーをいじってみました。

コマンドラインからgoogleカレンダーをいじります。

google-api-clientを利用します。
なので
gem install google-api-client -v 0.6.4
gem install jwt -v 0.1.5
でインストールしておきます。
(※ここで記載している内容は0.6.4でないと動きません。またjwtも0.1.5より新しいのが入っていると動きません)

まずはGoogle Developers Consoleにプロジェクトを登録します。
登録したら「APIs & auth」の「APIs」で
Calendar API
を「ON」にします。

そして「APIs & auth」の「Credentials」でOAuth用のCLIENT IDを発行します。
「CREATE NEW CLIENT ID」でApplication typeを「Installed application」、Installed application typeを「Other」としてCLIENT IDを作成して、作成されたCLIENT IDとCLIENT SECRETを控えます。
(※ここいら辺も変更されていますが、似たような設定はできる感じです)

google-api-clientをインストールしたらgoogle-apiをいうコマンドが利用できるようになっているので、これを利用して一度OAuth認証を行います。
以下のような感じです。CLIENT_IDとCLIENT_SECRETは控えたもので置き換えてください。

google-api oauth-2-login --scope=https://www.googleapis.com/auth/calendar --client-id=CLIENT_ID --client-secret=CLIENT_SECRET

コマンドを実行するとwindows環境であればブラウザが開いてOAuthの許可を求められるので許可します。認証が完了するとホームディレクトリ(Windows7の場合は、C:\Users\mynameみたいなところの下)に.google-api.yamlが作成されるので、今回作成するプログラムを置く場所に移動しておきます。

このyamlファイルにOAuthでの認証情報が保存されているようなので、この情報を利用します。
でgoogleカレンダーをいじるrubyスクリプトは以下のような感じです。
カレンダー一覧から「仕事用」カレンダーを選び、今日から31日に以内のイベントをすべて削除して、イベントを二つ追加しています。


以下を参考にさせていただきました。
http://blogaomu.com/2012/09/16/ruby-script-using-google-calendar-api

2013-12-18

remiリポジトリからyumでインストールしたmysql5.5を5.6にyum updateする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
yumは依存関係をいい感じで解決してくれるので便利ですね。

ただmysqlとかはバージョンが古めのものがインストールされちゃう傾向があります。

なのでちょっと前まではmysqlの新しいバージョンを利用するためにremiリポジトリを使ったりしていました。
でもこちらも5.6には対応していないようです。

と思っていたらmysql公式のリポジトリができていたようです。
こちらを追加するとremiでインストールした5.5のmysqlを5.6にアップデートできます。

手順は以下のような感じです。

・rootになる
rootで作業します。
su -

・バックアップの作成
設定ファイルとデータベースを念のためバックアップします。
cp /etc/my.cnf .
mysqldump -u root --all-databases > mysql_dump

・mysql公式のリポジトリを追加
CentOS6では以下のような感じで追加します。
yum install -y http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm

CentOS5の場合は
http://dev.mysql.com/downloads/repo/
から以下のrpmをダウンロードします。
mysql-community-release-el5-5.noarch.rpm
インストールの前にmysqlレポジトリ用のgpgキーというものが必要になります。
http://dev.mysql.com/doc/refman/5.5/en//checking-gpg-signature.html
に記載されている
-----BEGIN PGP PUBLIC KEY BLOCK-----
から
-----END PGP PUBLIC KEY BLOCK-----
までの内容をmysql-gpg.txtみたいなファイル名のテキストファイルに保存して
rpm --import mysql-gpg.txt
とすることでキーの登録ができます。
その上でrpmでインストールします。
yum install -y mysql-community-release-el5-5.noarch.rpm

これ以降は、CentOS5でもCentOS6でも変わりません。

・mysql停止
mysqlをとめます。
service mysqld stop

・mysqlのアップデート
mysqlをアップデートします。
yum -y update mysql-server mysql-devel

・mysql起動
mysqlを起動します。起動に失敗する場合は/var/log/mysql.logなどのlogファイルを確認します。
mysql5.6になって利用できなくなった設定を/etc/my.cnfに書いていると起動に失敗したりします。
service mysqld start

・既存DBのアップデート
既存DBに更新処理をかけます。
mysql_upgrade


これで、もともとは入っていた
mysql-libs-5.5.31-1.el6.remi.x86_64
mysql-server-5.5.31-1.el6.remi.x86_64
mysql-devel-5.5.31-1.el6.remi.x86_64
mysql-5.5.31-1.el6.remi.x86_64
みたいなものが以下のように更新されました。
mysql-community-common-5.6.15-1.el6.x86_64
mysql-community-server-5.6.15-1.el6.x86_64
mysql-community-release-el6-5.noarch
mysql-community-client-5.6.15-1.el6.x86_64
mysql-community-libs-5.6.15-1.el6.x86_64
mysql-community-devel-5.6.15-1.el6.x86_64


参考にさせていただいたサイトは以下です。
http://d.hatena.ne.jp/akishin999/20131029/1383050569


2013-12-12

人が乗れるロボット「クラタス」がamazonで売っているらしい

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

人が乗ってパイロット気分が味わえるロボットのような、なんというかという感じの「クラタス」がamazonで売っていたので何かの間違いでこのページ経由で買ってくれる人が現れることを期待してリンクを張ってみました。

2013-12-11

A6サイズのAndroidタブレットって存在しないのですね

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ふとA6ノートと同じサイズのタブレットをいい感じのケースに入れて使うと良いような気がする・・・
と思ってA6サイズのタブレットを探してみたのですが、どうもないようです。

A6サイズ タブレット

で検索するとWACOMの違うタブレットばかりひっかかります。

WACOMでないものでもアップルのA6プロセッサーがひっかかったりして肝心な情報はありませんでした。

一番近いサイズがGaraxy Noteの初代のものが近い感じでしたが、幅が細い感じです。

A6サイズのタブレットって使いづらいのですかねぇ。

2013-12-09

ActiveRecordでjoinしたテーブルのカラムでwhere条件を指定するとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ActiveRecordで他のテーブルをjoinしたときに、joinした側のテーブルにあるカラムを条件として使いたいときに、以下のようにしていました。

Order.joins(:user).where("users.name='viva'")


で、mergeを使って以下のようにも書けるということを知りました。


Order.joins(:user).merge(User.where(:name=>'viva')


以下が参考になりました。
http://api.rubyonrails.org/classes/ActiveRecord/SpawnMethods.html#method-i-merge


どっちもタイプする長さはあんまり変わらなかったので、そのときの気分で当面はどっちを使うか決めようかと思います。


      
      

2013-12-02

Raspberry PiとUSBハブにモバイルバッテリから給電しようと思ったけどあきらめた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry PiにいろいろUSBでくっつけるとなるとセルフパワーのUSBハブが必要になってきます。

それでも、いつでもどこでも利用できたらよいなぁと思いモバイルバッテリからRaspberry PiとUSBハブに給電できたら便利かもと思ってみました。

こんな感じです。

結論からいうとモバイルバッテリからUSBハブに給電する方法がわからなかったのであきらめました。

モバイルバッテリからUSBハブに給電するケーブルを自作した方はいました。
http://zigsow.jp/portal/own_item_detail/225839/


ちなみに2ポートあるモバイルバッテリはありました。



で他の方法とかを調べてみたらUSBハブからRaspberry Piに給電とUSB接続両方をさせることができることがわかりました。
http://shokai.org/blog/archives/7865

この方法ならばUSBハブ用にコンセントを一つしか使わないのでこれはこれでよいことを知ったと思ってみました。

どうしても外で使いたいならば、USBハブのコンセントを以下のようなポータブル電源につなぐというのもありかな?

2013-11-29

ノートカバーがなんとなくキニナル今日この頃

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
なんとなく最近ノートカバーがキニナルのです。

調べてみるとコクヨ SYSTEMIC[システミック]というのが一番有名なようです。
こんな感じのです。


そしてキングジムからはノートカバー(マグネットタイプ)というのとレザフェスノートカバーというのがあるようです。
それぞれこんな感じです。


A5だったら以下のリングノート対応のコクヨのシステミックがよさそうかなぁとか思ったりしています。


今回はなんとなくA6サイズのものがほしいなぁとか思ってみているのです。
以下の4つどれも悪くないような気がしているのです。


どのように使うかのイメージがまったくないけど、なんかあると便利そうかなぁというイメージだけが先行しているので困ったものです。

とりあえずどれも1000円ちょっとのものだから衝動買いをしてみようかしらん。

2013-11-25

imapで特定のfromアドレスのメールだけを削除するものをrubyで書いてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
imapを利用しているメールで見取り込みのメールの中から特定のfromアドレスからのメールだけを削除するというものをrubyで書いてみました。

以下のような感じです。


2013-11-20

rspecでstubを作ってエラーをraiseさせる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rspecでstubを作って、そいつにエラーをraiseさせる方法です。

Hoge.stub(:fuga).and_raise("dummy error")

みたいな感じでOKでした。

以下が参考になりました。
https://www.relishapp.com/rspec/rspec-mocks/v/2-6/docs/method-stubs

2013-11-15

railsでSQL serverに接続しているときに直接SQLを発行

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsで時折、ActiveRecordではなくSQLを直接を発行したくなるときがあります。

調べてみると以下のような感じで実行するというのが見つかります。

sql = "select 'TEST' as col"
a = ActiveRecord::Base.connection.execute(sql)

SQL Serverに対してこれでやると
-1が帰ってきて、わけわからない感じでした。

よく調べてみると以下のようにexecuteでなくselect_allならばOKでした。

sql = "select 'TEST' as col"
a = ActiveRecord::Base.connection.select_all(sql)

この場合は、
[{"col"=>"TEST"}]
みたいな結果が返ってきます。

以下が参考になりました。
https://github.com/rails-sqlserver/tiny_tds/issues/85 



2013-11-06

Raspberry PiにつないだUSBカメラの画像をブラウザから確認するものをrubyで作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry PiにつないだUSBカメラの画像をブラウザ経由で見れて、好きなタイミングで静止画で残せるものをrubyで作ってみました。

と言ってもカメラ画像をmotionでストリーミング処理して、その結果をimgタグで表示しているだけだったりします。

Raspberry PiにUSBカメラをつないでmotionで確認する手順は
Raspberry Piに大人の科学マガジンUSB特撮カメラをつないでみた
をご覧ください。

なのでmotionを動かしておくことが前提ですが、作ったのは以下のような感じのものです。

ざっくりした画面の説明は以下のような感じです。


sinatraを利用していて、ソースは以下においてあります。
https://github.com/vivahiraj/pi_camera


最低限motionの設定として以下をいじる必要があります。
control_localhost off
webcam_localhost off
output_normal off
#ファイルの出力先をsinatraで静的ファイルとしてみることができるpublic配下にする必要があります。
target_dir /home/pi/pi_camera/public/img/motion


ソースを取得した後の利用方法は、最初に
bundle install
をする必要がありますが、
その後、webサーバとして動作させるには以下のようにします。
bundle exec rackup
これで9292ポートでwebサーバが起動します。

撮った画像のリストが別に見れなくてもよいならばmotionが動いているRaspberry Pi上でなく別のマシンで動作させてもカメラ画像は見ることはできるはずです。

2013-10-30

paperclipをSub-URIで使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Railsで添付ファイルを扱いたい時は、いまどきはpaperclipのようなので使ってみました。

使い方は、以下が参考になります。
http://cumiki.com/hacks/19

Sub-URIで運用にしているのですが、アップロードした画像のurlを作成する際にSub-URIを考慮してもらえませんでした。

/my_app
の配下にrailsプロジェクトを置いているのですが、/my_appを考慮してもらえなかったのです。

で、考慮してもらえるように
config/application.rb
に以下を追加しました。

module MyApp
  class Application < Rails::Application
    ・・・
    config.paperclip_defaults = {
      :path => ":rails_root/public/system/:class/:attachment/:id_partition/:style/:filename",
      :url  => "#{Rails.application.config.relative_url_root}/system/:class/:attachment/:id_partition/:style/:filename"
    }
  end
end

2013-10-24

Raspberry Piに大人の科学マガジンUSB特撮カメラをつないでみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
大人の科学マガジンUSB特撮カメラを買ってみました。



なのでRaspberry Piにもつないで見ました。

カメラを接続してRaspberry Piを立ち上げると、あっさりカメラを認識していました。

lsusb

Bus 001 Device 005: ID 058f:3861 Alcor Micro Corp.
みたいな感じのが出てくれば認識されているようです。

私のRaspberry Piの環境は、無線LAN接続してモニタ等は接続していない状態です。
(無線LAN設定に関しては、Raspberry Piを無線LAN対応させてみたを見てください。)
そんな環境なのでUSBカメラの画像はネットワーク経由でブラウザで見る感じにしたいと思ったのです。

それを実現するためにmotionというのを使いました。

motionは、動体検知で利用するものとして有名な感じです。
なにかカメラ撮影しているなかで、何かが動いたら写真を残すみたいなことができます。
今回は動体検知は使わないのですけどね。

インストールは、
sudo apt-get install motion ffmpeg
でOKです。

設定は、
/etc/motion/motion.conf
に記載します。

今回デフォルトから変えたのは以下の項目です。


#motionをネットワーク経由してブラウザで操作できるようするためにoffに変えます
#control_localhost on
control_localhost off

#カメラ画像をネットワーク経由で見えるようにするためにoffに変えます。
#webcam_localhost on
webcam_localhost off

#なんで変えたか忘れました
#ffmpeg_video_codec swf
ffmpeg_video_codec mpeg4

#動体検知で画像を残さないようにoffに変更
#output_normal on
output_normal off

#今回のカメラでは8はサポートしてないようなので6にしました。
#ただ8にしていても使えないから6を使うよ~~みたいなメッセージが出ていたので
#そのままでもよい気がします。
#v4l2_palette 8
v4l2_palette 6


設定が終わったら
sudo motion
とシェルで実行するとmotionが立ち上がります。
rootで起動する必要があるようです。

webで検索すると、ここまでやったら
http://raspberrypi.local:8081
みたいな感じで8081ポートに接続すれば動画が見れるみたいなことを多いのですが、
chromeでもIEでも見ることができませんでした。

どうやら動画の形式がmotion JPEGという形式になっているようで、chromeでは直接見ることはサポートしていないようです。

ですが、以下のような感じでimgタグで指定すれば、きちんと見れました。
<html><body>
<img src="http://raspberrypi.local:8081">
</body></html>


動画が見れると、動画に移っている画像を任意のタイミングで静止画で残したくなります。
motionでは8080ポートでmotionを操作できます。
静止画を残すには、
http://raspberrypi.local:8080/0/action/snapshot
で接続してあげればOKです。





2013-10-20

sinatraでbundlerを使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以前、
sinatraをpassengerで使う
というエントリを作成して、sinatraをpassengerで利用するときのtemplateを作成したのですが、
ちょっと古い感じになっていたので作り直してみました。

以前と比べて以下を変更しています。
・bundlerを使えるようにしてみた
・viewのテンプレートとしてhamlを使うようにしてみた
・rspec2に対応してみた

新規に作成したtemplateを
https://github.com/vivahiraj/sinatra_bundler_template
においてみました。

簡単な使い方としては、
リポジトリからファイルを取得したら、
bundle install
をすればOKです。

そして、開発時のWebサーバの起動は、
bundle exec rackup

テストの実行は、
bundle exec rake spec
 or
bundle exec rspec

とすればOKです。

2013-10-15

プリンタが壊れたのでEPSONのEP-706Aを買いました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
プリンタが壊れたので新しくプリンタを買いました。

買ったのは、EPSONのEP-706Aです。


今回、買う上での条件にしたのは以下の点です。
・コピーがしたいから複合機であること
・もう配線とか面倒なのでwifiで接続したい
・DVDのラベル印刷も使ってみようかなぁとか思ってみた
・スマホやタブレットから直接印刷がしたいなぁと思ってみた
・そんでもってできるだけ安い

この条件で探したらEPSONのEP-706Aがよい感じでした。
上位機種から機能を削ったものなのですが、私が使いたい機能は、しっかりついているのがよかったです。

実際買ってみてwifi接続は楽でよいですね。設定もぜんぜん問題なくツールでできました。
もともとプリンタが置いてあった場所に置いたのでwifiのどこでもおけるメリットは、まだ体感してないです。

置く場所を変えて、dropbox連携とかしてスキャナとかもPCなしで利用するとかやってもよいかなぁとか、ちょっと思っています。

想定してなかったけど、よかったなぁと思ったのは、前面給紙です。
今まで手差しで給紙していたのですが、前面である程度セットしておけるのは楽でよいです。


あと、今回お店でプリンタを見たのですが、ただプリントするだけだったら3000円台でプリンタも買えちゃうというのが驚きでした。


2013-10-10

Railsで大量データを扱うときはpluckを使ってみるのも一案のようです

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Railsで大量データを取得してeachでまわすと遅いです。

これは取得したデータすべてにActiveRecordオブジェクトを生成していることが原因でもあるようです。

なので対策として考えられるのは、生成するオブジェクトの数を減らす方法があります。

これにはfind_eachを使うと実現できます。

find_eachは指定した件数づつ(デフォルトでは1000件)データを取得して、その分だけのActiveRecordオブジェクトを生成します。
find_eachに関しては、過去に紹介していますので、そちらをご覧ください。
大量のデータをActiveRecordで処理するとき

find_eachはソート順を指定できないという欠点があります。


もう一つの方法としてActiveRecordオブジェクトを生成せずに配列なりハッシュなり、ActiveRecordよりも軽いオブジェクトを生成する方法があります。

これには、pluckを使えます。
以下のような感じで利用します。

Order.where( amount: 1000 ).pluck( :order_no, :name, :address )
 # => [["O123", "テスト太郎", "トーキョー"],["O456", "テスト花子", "オーサカ"]]

pluckの方では、ソート順は指定できます。

pluckに複数のカラムを指定できるのは、Rails4.0からのようで3.2では一つのカラムしか指定できません。

3.2でpluckで複数のカラムを指定するには、以下の方法でpluck_allという複数カラムを利用できるようなpluckを定義するパッチをあてる方法があります。
http://meltingice.net/2013/06/11/pluck-multiple-columns-rails/

こちらではハッシュのやり方ではハッシュでデータを取得します。

Order.where( amount: 1000 ).pluck_all( :order_no, :name, :address )
 # => [{:order_no => "O123", :name => "テスト太郎", :address => "トーキョー"},
          {:order_no => "O456", :name => "テスト花子", :address => "オーサカ"}]


もう一つの方法でmultipluckというgemを使う方法もあります。
https://github.com/hanzq/multipluck

こちらは私は試していないのですが、Rails4.0と同じ感じ使えそうなので将来のアップデートを見据えるとこちらもよさそうな気がします。


で、find_eachとpluckのどちらが速いかなのですが、私が試した数万件のデータを処理するケースではだいたい同じぐらいでした。
どちらもeachでまわすよりかは、断然早くなっています。
なのでどちらを利用するかはケースバイケースなのかなぁという感じです。


2013-09-22

LEGOで引き戸の取っ手を作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
LEGOで引き戸の取っ手を作ってみました。

使ったのは、以下の3種類です。
・2×4の普通のブロックを4つ
・1×6の薄いブロックを2つ
・1×4の薄いブロックを2つ

こんな感じです。
1×4の薄いブロックが一つ見つからなかったので、1×2を2つで代用しています。

薄いブロックで輪を作り、その上に普通のブロックを4つのっけます。
以下のような感じです。

実際につなげたのが以下のような感じです。

後ろから見たらこんな感じです。

これで取っ手の形は完成です。


次は実際にドアにくっつけます。
ドアへくっつけるためにパテを利用してみました。
実際に利用したのは、ハンズで見つけた以下のものです。

だいたい500円ぐらいでした。本当はSugruというのを利用してみたいと思ったのですが、どうも今は日本で手に入れる方法がなさそうでした。

とりあえず、買ったパテの半分ぐらいをよく練って、作ったレゴ取っ手のへこみ部分に気持ち山盛りに盛ります。
以下のような感じです。

これをドアに押し付けて貼り付けます。
こんな感じです。

後は、パテが固まるまで待ちます。


実際、固まると結構強度があって取っ手として使えました。
そう簡単には剥がれなそうな気配です。


レゴで作ったのですから遊んでみます。
90度曲がったパーツを利用して、ちょっと遊んでみました。
以下のような感じです。


遊んだ部分は、接着していないので付け替えできるのが楽しい感じです。



2013-09-21

黒板塗装失敗してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
壁の一部を黒板塗装してみたのですが、失敗しました・・・

正確には黒板塗装自体は失敗していないのですが、
黒板にするならば磁石がくっつくようにしたいなぁと思ってマグネットペイントというのを下塗りしたのですが、そちらが失敗しました。

失敗したのは、マグネットペイントの塗装を少々いい加減にやったので、結構ザラザラデコボコしてしまい、チョークで書いたときに、チョークがものすごく削れることになってしまい、チョークの粉が半端なく落ちてきてしまうようになっていたのです。

マグネットペイント自体、すごく癖がある塗料なので説明どおりにきちんとやるべきだったようです。
複数回塗装する場合は、4時間ぐらいあけてからと書いてあったのですが、
あんまり間隔をあけないでやってしまいました。そのため下に塗った塗料が途中でちょっとはがれてくる感じがあって、それがざらつきの原因になってしまいました。

また、仕上げにヤスリで平らになるようにやるべきだったのですが、ちょっとやってみたら鉄の粉みたいのが飛びまくったので、ちょっといやになっていい加減にやってしまいました。
そのためざらつきとかが残ったままになってしまったのです。

マグネットペイントを使う場合は、ちゃんと最後に平らになるようにするのがとても大事ですので、やろうと思っている方は仕上げをきっちりやることをオススメします。

ちなみにうちの黒板壁はチョークを使うことはなく、磁石でいろいろ張る場所になっています・・・



2013-09-16

LEGOでペン立てを作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
レゴでペン立てを作ってみました。

以下のような感じです。


6×8をベースに作成してます。
ペン立て部分は6×6で適当に1×○のパーツを組み合わせています。
本当は、色もこだわりたかったけど思ったよりもパーツがなくてあきらめました。

横から見ると1つ分スペースを空けています。

この部分には、以下のようにうすでのメモ帳を入れています。


ちなみにレゴ製のちゃんとしたペン立てキットもあったりします。



2013-08-04

Raspberry Piを楽しむために必要そうなものをまとめてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piを楽しむために必要そうなものをまとめてみました。

・本体
これがなくては始まりません



・SDカード
OSの記録先などに利用します。最低4Gのclass10があればよいようですが、8Gぐらいはみたいな記述もよくみます。



・電源系
お手持ちのスマホの充電ケーブルでもOKですが、以下のようなものもあります。ケーブルは100円ショップのものでもOKです。


Raspberry Piの小ささを生かすためにモバイルバッテリーを使うのもよいです。



・ネットワーク系
ネットワークに接続した方が楽しめます。


無線LANに対応させるのが、なおオススメです。


無線化の方法として、無線LANドングルを利用するのでなく、コンバータを利用するのもよいかもしれないです。



・画面出力系
インストール時にはあった方が便利です。その後sshで接続するだけならば必要ないかもしれないです。
インストール時だけであれば安めのコンポジットケーブルでもよいと思いますが、他に画面を使っていろいろやるならばHDMIで接続した方が画面のきれいさは圧倒的によいです。出力先がPCモニタするにはHDMI-DVI変換ケーブルなどが必要です。


以下のような小さいモニタを接続する例もあるようです。以下の場合はコンポジットケーブルと12V出力できるバッテリーが必要そうです。



・入力デバイス系
インストール時にはキーボード、マウスがあると便利です。


以下のようなBluetooth対応のコンパクトなものを利用するケースもあります。



・電子工作系
電子工作を楽しむために必要なものはケースバイケースなのですが、まずはお試しには以下があるよいと思います。


アナログ入力とかはRaspberry PiではできないようなのでそのうちArduinoもあると便利かもしれません。Raspberry PiとはUSBで接続します。ケーブルはA-Bタイプが必要です。



・セルフパワーUSBハブ
USBでいろいろつけると電源系が心配な気配なのでセルフパワーUSBハブがあってもよいかもです。



・参考図書
いろんな本が出ています。



・ケース
なくてもよいのかもしれないですが、きれいにまとめたいならばあった方がよいかもです。


購入するのではなくLEGOで作成する例もあります。
以下が参考になります。
http://www.slideshare.net/keikakomura/raspberrypi-meets-lego-case
http://www.raspberrypi.org/archives/1354



2013-08-03

Raspberry PiのGPIOをブラウザからいじれるWebIOPiを試してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以前、GPIOでLEDをチカチカさせてみました。
Raspberry PiとRubyでLEDをチカチカさせる

その後、Raspberry PiでGPIOをブラウザからいじれるWebIOPiというものがあると知り試してみました。

WibIOPiに関しては、以下をご覧ください。
https://code.google.com/p/webiopi/


インストールは、以下のような感じです。

sudo su -
cd /usr/local/src
wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz
tar xvzf WebIOPi-0.6.0.tar.gz
cd WebIOPi-0.6.0
./setup.sh

なんかいろいろインストールするのでちょっと時間がかかります。

RaspberryPiを起動したときにWebIOPiも自動起動させるならば、以下も実行します。
update-rc.d webiopi defaults

WebIOPiの起動は以下のとおりです。
sudo /etc/init.d/webiopi start

WebIOPiの停止は以下のとおりです。
sudo /etc/init.d/webiopi stop


デフォルトでは8000番ポートで起動するのでブラウザから接続します。
http://raspberrypi.local:8000/

ログインパスワードが聞かれますが、デフォルトでは
ユーザ名:webiopi
パスワード:raspberry
になります。


で、パスワード認証後の画面は以下のような感じになります。

GPIO Headerをクリックすると以下のような画面が出てきます。

このグレーのINとなっている部分をクリックするとOUTになります。
GPIO 27の横のINをクリックしてOUTにした例です。

そしてピン番号をクリックするとオレンジ色になりOUTの場合はHIGHになります。
13番のピンをクリックした例です。

このとき、以下のようなLEDを光らす回路を接続していたらLEDが光ります。再度クリックして黒に戻すと消えます。


ちょっと実験するには便利な感じです。


TOPページの他の部分をクリックすると以下のような画面が出ます。

GPIO Listは以下のような感じです。
GPIO Headerの表示方法を変更した感じです。


Serial Monitorは以下のような感じです。
こちらは試していないので、どんな動きをするのか不明です。


Device Monitorは以下のような感じです。

こちらも試していないので、どんな動きか不明です。


WebIOPiはAPIをいろいろ用意しています。
REST APIもあり、他のプログラムから利用することもできます。

APIの例です。
とりあえずGPIO27に対しての例で、リクエストURLは以下のような感じです。

現在状態取得
GET http://raspberrypi.local:8000/GPIO/27/value

利用状態をOUTに設定
POST http://raspberrypi.local:8000/GPIO/27/function/out

シグナルをHIGHにする
POST http://raspberrypi.local:8000/GPIO/27/value/1

シグナルをLOWにする
POST http://raspberrypi.local:8000/GPIO/27/value/0


というわけでRubyでいじってみた例です。

require "net/http"

def set_pin_out
  req = Net::HTTP::Post.new("/GPIO/27/function/out")
  set_req(req)
end

def pin_on
  req = Net::HTTP::Post.new("/GPIO/27/value/1")
  set_req(req)
end

def pin_off
  req = Net::HTTP::Post.new("/GPIO/27/value/0")
  set_req(req)
end

def set_req(req)
  req.basic_auth "webiopi","raspberry"
  Net::HTTP.start("raspberrypi.local", 8000) {|http|
    response = http.request(req, "")
    raise "NG" unless response.code == '200'
  }
end

set_pin_out
10.times do
  pin_on
  sleep 0.5
  pin_off
  sleep 0.5
end


RubyでGPIOを直接いじる場合はroot権限がないとダメでしたが、この場合はrootでなくてもGPIOが利用できます。
また別のマシンからもたたくことができるのも便利そうな気がします。

2013-07-30

ブレッドボードの配線図を描くにはFritzingが便利でした

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ブレッドボードの配線図を楽にいい感じに描きたいなぁと思っていたら、
Fritzing
というのがあるということを知りました。

なかなかよい感じです。

Raspberry Piの図も以下のサイトからダウンロードして追加してあげればパーツとして利用可能です。
https://github.com/adafruit/Fritzing-Library/blob/master/parts/Raspberry%20Pi%20Model%20B.fzpz

以下のサイトが参考になりました。
http://www.e-ark.jp/2013/02/12/%E9%9B%BB%E5%AD%90%E5%9B%9E%E8%B7%AF%E8%A8%AD%E8%A8%88%E3%83%84%E3%83%BC%E3%83%AB-fritzing-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/

2013-07-29

Raspberry PiとRubyでLEDをチカチカさせる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piは、GPIOという仕組みで電子工作を簡単に楽しめるわけです。
そんな電子工作をやってみたいとおもったのがRaspberry Piを買った理由のひとつでもあります。

Raspberry Piで電子工作をするには、ブレッドボードがあるとお手軽にはじめられます。
ブレッドボードとRasberry Piをつなぐには、ジャンパワイヤー(オスーメス)が必要です。


LEDとかブレッドボードを持っていないならば以下があるとよさげです。



まずは、GPIOのシンプルな使い方でLEDを光らせてみます。

Raspberry PiとLEDは以下のように接続します。

今回は27番PINを利用しています。
Raspberry PiのPINに関する情報は、以下が参考になります。
http://blog.livedoor.jp/victory7com/archives/25716142.html

以下のようにすれば、ルート権限のシェルでLEDを光らせることができます。

sudo su
echo 27 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio27/direction
echo 1 > /sys/class/gpio/gpio27/value
echo 0 > /sys/class/gpio/gpio27/value
echo 27 > /sys/class/gpio/unexport

上から順にざっくり説明すると
27番PINを利用することを宣言して、
27番PINを出力でりようすることを宣言して
27番PINの出力をHIGHにして
27番PINの出力をLOWにして
27番PINの利用を終了する
という感じです。

以下が参考になります。


とりあえず、上記でやっていたことをRubyでやってみます。

exp = open("/sys/class/gpio/export", "w")
exp.write(27)
exp.close

dir = open("/sys/class/gpio/gpio27/direction", "w")
dir.write("out")
dir.close

out = 1
20.times do
  val = open("/sys/class/gpio/gpio27/value", "w")
  val.write(out)
  val.close
  out = out == 1 ? 0 : 1
  sleep 0.5
end

uexp = open("/sys/class/gpio/unexport", "w")
uexp.write(27)
uexp.close

これをled.rbとでもして保存してrootで実行するとLEDがチカチカします。

きっと便利なgemがあると思って探してみたところ
pi_piper
というものがありました。

gem install pi_piper

でインストールできます。

でpi_piperを利用すると以下のような感じです。

require 'pi_piper'

pin = PiPiper::Pin.new(:pin => 27, :direction => :out)

10.times do
  pin.on
  sleep 0.5
  pin.off
  sleep 0.5
end

uexp = open("/sys/class/gpio/unexport", "w")
uexp.write(27)
uexp.close

これをled2.rbとでもして保存してrootで実行するとLEDがチカチカします。
すっきりしたような気がします。

最後の27番PINの利用をやめる部分はpi_piperでは対応してなかったので、led.rbのときと同じです。


Lチカだけで終わらないようにしたいなぁと思います。


2013-07-26

gemのデフォルトの接続先がいつのころやらhttpsでの接続になっていたこと知ったのです

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
opensslでいろいろ実験していたせいでopenssl環境がわけわからなくなった環境で
gemのバージョンを2.0.3にあげたら、何もインストールできなくなったわけです。

どうもssl絡みがおかしなことになっていることはわかったので
gem installのときに
--source http://rubygems.org
をつけたのですが、残念ながらうまくいかなかったのです。


gem source
を見てみたら
https://rubygems.org/
となっており、
他の古めの環境で確認したら
http://rubygems.org/
になっていたので、同じようにしてみようと思ったわけです。

以下のようにすることで
gem source -a http://rubygems.org/
httpでの接続もできるようになりました。

このおかしな環境でopensslをどうこうするのも面倒だったので
gem source -r https://rubygems.org/
でhttpsの接続先を削除したりもしちゃいました。

2013-07-19

rubyでutf-8の「-」をsjisに変換しようとしたらエラーが出たとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
utf-8からsjisに変換するときのよくある話ではあります。

詳細は、以下のサイトがわかりやすいです。
http://space.geocities.jp/nequomame/java/mojibake/mojibake_01.html

「-」だけでなく他の文字でも同様の問題がおこることがあります。

urf-8の「-」には、見た目は一緒だけど二つ存在します。
そのうち一つは、sjisへの変換に失敗して、もう一つは成功します。

以下のような感じです。

[1] pry(main)> "FF0D".to_i(16).chr('utf-8')
=> "-"
[2] pry(main)> "FF0D".to_i(16).chr('utf-8').encode("cp932")
=> "\x{817C}"
[3] pry(main)> "2212".to_i(16).chr('utf-8')
=> "-"
[4] pry(main)> "2212".to_i(16).chr('utf-8').encode("cp932")
Encoding::UndefinedConversionError: U+2212 from UTF-8 to Windows-31J from (pry):4:in `encode'


なので、「-」が入る可能性がある文字列strに対して以下のように対処してみました。

str.gsub("2212".to_i(16).chr('utf-8'),"FF0D".to_i(16).chr('utf-8')).encode("cp932")

他のやり方もありそうな気がします。

2013-07-12

朝、ラジオ体操をすることにしてみて一月ほどたちました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
体をちっとも動かしてないなぁ~と思っていたわけです。

平日は6時半に起きる生活をしていたのですが、ふと6時25分からNHKでテレビ体操なる番組をやっていることに気づいてみました。

10分ぐらい早くおきてラジオ体操ぐらいするのもよいかもなぁと思ったわけです。
ラジオ体操第一だったらやり方はわかっていますしね。
ちなみに平日だけで日曜日はぐっすり寝ています。

やりはじめて一月ぐらい経ったわけですが、
やせたか?
と聞かれると正直あんまり変わらないです。

ラジオ体操第一とラジオ体操第二あわせても70kcalぐらいの消費のようなので、体操だけでやせるという虫のよいことはありません。

ただ体操には体を伸ばすものが多いので、なんかすっきりはします。
ヨガとかストレッチとかそんな感覚に近いかもしれません。

あと、続けやすい気がします。
たまたま自分が普段起きている時間のちょっと前だったので、それほど無理もしてないですし、
何より6時25分になったら、こっちの都合などお構いなしに始まるというのはよいです。

いつでもどこでも好きな時間に10分やってください。
と言われると逆にやらないので時間が決まっているというのはよいです。

一つ誤算だったのは、毎日ラジオ体操第一をやると思っていたのですが、そうではなく
みんなの体操

ラジオ体操第二
の組み合わせでラジオ体操第一がない日もあります。

みんなの体操とラジオ体操第二は、よくわかってなかったので最初はあたふたしてみました。
すぐに慣れますけどね。

ちなみに以下の体操が放送されます。
月曜日:みんなの体操とラジオ体操第一
火曜日:みんなの体操とラジオ体操第ニ
水曜日:みんなの体操とラジオ体操第一
木曜日:ラジオ体操第一とラジオ体操第二
金曜日:みんなの体操とラジオ体操第一
土曜日:みんなの体操とラジオ体操第ニ
日曜日:見たことないので知りません

以下の本を見てポイントをおさえてやると、もっとヨサゲな感じです。

2013-07-10

Raspberry Piにrubyをインストール

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piにrubyをインストールです。

OSはraspbianです。

sudo apt-get install ruby

でOKです。


以下がインストールされます。

ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [arm-linux-eabihf]

gem --version
1.8.23


2013-07-09

Raspberry Piを無線LAN対応させてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piはちっちゃいです。

なのでどんなところにも置けちゃいます。

いろんなところに置いて使うためには、ケーブルは少ないに限ります。

というわけで、無線LANに対応させてみました。


利用した無線LANアダプタは、BUFFALOのWLI-UC-GNMです。
せっかくなのでRaspberry Piに似合いそうなちっちゃいものを選びました。



私の環境は、
Raspberry PiのOSはRaspbian

無線LANの暗号化方式は、WPA-PSK-AES

IPアドレスはDHCPで配布されています。


まずはRaspberry PiのUSBポートに無線LANアダプタをさして、電源をいれてRaspbianを起動します。
これで無線LANアダプタはちゃんと認識されています。

ターミナルを起動して
sudo lsusb
とすると以下のように認識されているUSB機器一覧を見ることができます。

Bus 001 Device 002: ID 1234:5678 Standard Microsystems Corp.
Bus 001 Device 001: ID aaaa:bbbb Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0000:cccc Standard Microsystems Corp.
Bus 001 Device 004: ID 0404:0101 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]


また
sudo ifconfig
とするとwlan0としてインタフェースを認識していることもわかります。

eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.1.2 ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:729 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:608 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:70431 (68.7 KiB)  TXバイト:95914 (93.6 KiB)

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1 マスク:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:0
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)

wlan0     Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          UP BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)


ここからが無線LANの設定です。
無線LANのssidがSSIDで、パスフレーズがPASSPHRASEだとします。

設定の基本情報を最初に作成します。
sudo wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf

これで設定の基本部分が記載されます。
以下のような感じになっていると思います。
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="SSID"
        #psk=PASSPHRASE
        psk=dc111d5dc0a222b3bb3333ab65be37b5e44dfb6da5555b6666ac7777777de688
}

これを以下のように修正します。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        proto=WPA
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        priority=2
        ssid="SSID"
        psk=dc111d5dc0a222b3bb3333ab65be37b5e44dfb6da5555b6666ac7777777de688
}

※上記ではなくて、こっちの方がよいかもしれないです。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        proto=WPA WPA2
        key_mgmt=WPA-PSK
        pairwise=CCMP TKIP
        group=CCMP TKIP
        ssid="SSID"
        psk=dc111d5dc0a222b3bb3333ab65be37b5e44dfb6da5555b6666ac7777777de688
}

次に起動時に無線LANに接続するように設定します。
sudo vi /etc/network/interfaces
以下のように修正します。

auto lo

iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

設定が完了したら再起動をします。
sudo reboot

再起動後に
ifconfig
を実行してみてwlan0にIPが振られていればOKです。

以下が参考になりました。
http://linux99.exblog.jp/i3
http://firtel.blogspot.jp/2012/09/raspberry-pilan.html


まだ使い始めて、それほど立っていないのですが問題なく使えています。

他に無線LANに対応する方法として、以下のような機器をコンバータとして利用して、無線を受けてRaspberry Piと有線でつなぐというのもよいかもしれないです。
これであれば、無線LANの設定はいらないので簡単ではあります。





追記:2013/07/26
IPアドレスをDHCPで取得しているので、時折IPアドレスが変わってsshで接続するために調べなおすといったことをしていました。
ちょっと面倒なのでホスト名で接続できるようにします。

仕組みとしては、zeroconfというものを使います。

raspberry piの方にはavahi-deamonというのを入れます。

以下を実行すればインストールされますし、自動起動するようになります。

sudo apt-get install avahi-daemon

特に設定をいじっていなければ
raspberrypi.local
というホスト名で利用できるようになります。

raspberry piのターミナルで
ping raspberrypi.local

として返答があれば、うまく設定されています。

そしてrasberrypiにsshで接続するwindows側の設定です。
一番簡単なのはiTunesをインストールすることです。
一緒にインストールされるBonjourというものが重要です。

ホスト名での接続に関して、以下が参考になりました。
http://openrtm.org/openrtm/ja/node/266



無線関連以外にもRaspberry Piを利用する上で必要そうなものをまとめてみました。
http://kingyo-bachi.blogspot.jp/2013/08/raspberry-pi.html

2013-07-07

Raspberry Piを買いました!

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
気になっていたRaspberry Piを買いました!


本も一緒に買ってみました。



遊び始めるには以下のものが必要なわけですが、できるだけ家にあるものを使いました。

・キーボード、マウス・・・家で余っているものを利用
・LANケーブル・・・家であまっているものを利用
・モニタ接続ケーブル(HDMIケーブルまたはコンポジットケーブル)・・・あまっていたコンポジットケーブルを利用
・電源ケーブル・・・スマホ充電ケーブルを利用
・SDカード・・・事前調査では8Gのclass10が必要とあり、これだけはなかったので購入

SDカードは、買った本によると2Gや4Gでもいけそうな感じです。
最初は、家にある余っているものを利用してもよいかもしれません。

買った本には、
NOOBS(New Out Of Box Software)
というものを利用してのインストール方法が紹介されています。

これはRaspberry Pi用のいろんなOSをいい感じに簡単にインストールできるようにするツールのようです。
これを利用する場合は4Gあればよいと書いてありました。

ただ、NOOBSはコンポジットケーブルでは画面に出力されないようです。
HDMIで接続していないと利用できなそうです。
今回、コンポジットケーブルで接続したのでNOOBSでのインストールはあきらめて
Raspbian
をSDカードに入れてインストールすることにしました。
本によると2Gあればよさそうな感じですが試していません。

本でも最終的にはRaspbianをインストールしているので途中からの手順は本に書いてあるとおり進めました。

NOOBSもRaspbianも
http://www.raspberrypi.org/downloads
からダウンロードできます。

ちなみにRaspbianをインストール手順としては以下が参考になりそうです。
http://2fps.net/?p=775

ちょっと忘れがちなポイントとしては
SDカードにOSイメージを入れるときに利用する
Win 32 Disk Imager
を起動するときには、管理者として実行する必要があります。
ちなみにSDカードに入れるときに
DDforWindows
を使っている例もあるのですが、こちらも管理者として実行しないとダメです。

一回SDカードに入れた後に、やっぱり違うのを入れたいなぁとか思った場合は
Windows標準のフォーマットではSDカード全体をフォーマットできなくなっている場合があります。

なのでSDアソシエーションが提供している
SDフォーマッター
も用意しておくと便利です。

インストールが完了すると
初期ユーザpiが作成されているので、パスワードraspberryでログインします。

最初、私はラズベリーを
rasberry
だと思い込んでいたので、いくらやってもログインできずに焦りました。
raspberry
pがあることに気づいていませんでした・・・



2013/08/04追記
Raspberry Piをはじめるときに必要そうなものをまとめてみました。
Raspberry Piを楽しむために必要そうなものをまとめてみた

2013-07-05

ActiveScaffoldでセレクトボックスで特定の値を選択させる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
いろいろできちゃうActiveScaffoldのコネタです。

ActiveScaffoldでセレクトボックスを使うときに、デフォルト値として特定の値を選択させておく方法です。

以下は、hogeカラムをセレクトボックスにしていて、tomatoをデフォルトとして選んでおく方法です。

config.columns[:hoge].form_ui            = :select
config.columns[:hoge].options[:options]  = ["potato","tomato","egg"]
config.columns[:hoge].options[:selected] = "tomato"

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


2013-06-23

yahooあんしんねっと をやめて Windows Live ファミリーセーフティーに変えました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以前、windows7に子供用アカウントを作成する。そして無料でできるだけの安全対策をしてみるということでyahooあんしんねっとを設定したのですが、もともと、ちょっと悪かったchromeとの相性が最近とても悪くなってしまい、最終的には、まともにchromeが起動しなくなってしまいました。
yahooあんしんねっとを無効にすると問題なく使えているので、chromeが動かなくなる原因なんだろうなぁと思ったわけです。

Windowsの子供用アカウントに対してフィルタリングがかけられて、見たサイトの記録もとってくれるのでよい感じではあったのですが、親側がchromeを使いたかったので利用を断念することにしました。

というわけで代替を調べたところ、同じジャンルで無料のものとしては、
Windows Live ファミリーセーフティ

Norton Online Family
があることがわかりました。

今回は、
Windows Live ファミリーセーフティ
を使ってみることにしてみました。

もよさそうだったのですが、使っているウィルス対策ソフトとの相性の問題がありそうな気配だったのでやめておきました。


Windows Live ファミリーセーフティ
のインストール方法に関しては、
が参考になりました。

インストールが終了すると設定になります。

今回は子供用に以下を設定しました。

・Webコンテンツの制限
 お子様向け
 ファイルのダウンロードを禁止する
・ゲームの制限
 ゲームの制限をオンにする
 評価されていないゲームは許可しない
 全年齢対象のゲームを許可
・アプリケーションの制限
 基本かたっぱしから制限
webコンテンツの制限以外は、OSのペアレンタルコントロールの設定がそのまま適用されているようです。


とりあえずchromeは問題なく使えるようになりました。

これでしばらく様子を見ようと思います。


2013-06-19

railsでmysqlのlongtext型を使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsでmysqlのlongtext方を使いたなぁと思ったわけです。


migrationでカラムを追加する際に
add_column :hoges, :memo, :text

とするとmysql上ではtext型になります。


longtextにするためには、以下のようにすればOKです。
add_column :hoges, :memo, :text, :limit => 4294967295

ちなみにlimitの値をいじると、対応するmysqlの型は以下のようになるそうです。
           1 ~            255 → TINYTEXT
        256 ~         65535 → TEXT
     65536 ~    16777215 → MEDIUMTEXT
16777216 ~ 4294967295 → LONGTEXT

以下を参考にさせていただきました。

2013-06-07

家にあるものでPC用ブックスタンドを作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
こんな感じの上の方に観音開きの収納があるパソコンデスクを使っています。



このパソコンデスクに家にあるものを利用してブックスタンドをつけてみました。

使うものは、2つだけです。

(1)ズボン用ハンガー

(2)カバンの肩掛け紐


実際の作り方です。

まず、カバンの肩掛け紐を短めのサイズにして大きめの輪を作ります。

この輪にパソコンデスクの上部の観音開きの扉を通してサイズを調整します。

そしてフックにズボン用ハンガーをかけて完成です!

実際に使う時は、こんな感じです。
扉を閉めておくといい感じに支えてくれるので安定しています。
高さは簡単に微調整もできます。
場所もとらないし、いい感じです。

ズボン用ハンガーをキッチンに持ち込めば、レシピスタンドにもなります。
実際に使う時は火のそばで使っちゃダメですよ。


これのポイントは、いい感じのズボン用ハンガーが見つかるかどうかです。
はさむ部分の強さと滑り止めがいい感じである必要があります。


ズボン用ハンガーを吊り下げる場所がないけど、場所がある人は以下のようなブックスタンドのほうがよいでしょうね。


レシピスタンドならば以下のようないい感じのものもあります。

2013-06-01

Google readerとお別れして、Feedlyに移行してみました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
今日、6月1日にやったことメモです。

Google Reader終了まで、あと1ヶ月になりました。
どうやら移行先としては、
http://www.feedly.com/
が人気っぽいので移行してみました。

ぱっと使った感じはおしゃれな感じで悪くないです。


あと、今日は携帯のメールの迷惑メール対策を
携帯キャリアからのメールだけ受け取る設定にしました。

最近、迷惑メールがとてもひどくて困っていたのと
サービスとしうて受け取っているメールのドメインがだいたい把握できたので設定しました。
なんか設定はわかりにくい感じでした。


今日は、そんな感じの見直しの日でした。




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