2013年12月31日火曜日

IT関連コンテスト情報まとめてみた


最近、次男が通う小学校の教頭先生から小学生向けプレゼンコンテストを教えてもらったり、@jishihaから三鷹のU15,U18 rubyコンテストを教えてもらいました。
思った以上にIT系のコンテスト多い、しかも小中学生が参加できるものもある、賞品・賞金もでる。結構、おいしいんじゃないかと。(@jishihaの受け売りだけど)
で、まとめてみました。


まとめてみると、ITコンテストといってもいろいろな種類がある。プログラム、アプリ、サーバ系そして企画・プレゼン系。
中高校生が参加できるものから小学生が参加できるものや、チームで参加のもの。

まだまだ編集中ですが、まずは公開したいと思います。早いうちに、アプリ系のコンテスト情報追加します…

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

2013年12月16日月曜日

vagrant-cloudstackを試してみた

いまいち周りで、vagrant-cloudstackが盛り上がらないなーと思っていた所、所属する会社の若手エンジニアS君に「vagrant-cloudstackってのがあるんだけどさー、IDCFクラウドセルフタイプでうまく動かないんだよね。」と相談したところ「あ、直しました。本家にPullRequest出してます」と即答。数日後無事マージされた事を確認。ただし、本家のvagrant-cloudstackの機能制限のため、vagrant up,destroyぐらいしかできない。vagrant ssh接続もできない。もちろんsshを利用するprovisionも実行できない。。。という状況でした。

そこで同じくS君に「vagrantはprovisionできないと意味ないよね」と相談したところ、数日後「直しました。PullRequest中です。CloudStackはVM作成とは別に、ネットワーク周りの設定(FW、PortForwarding)を追加しないといけないので機能追加しました」との事。
それから待つこと約2週間。やっと本家にマージされたので、vagrant-cloudstackとIaaSとして私が携わっているIDCFクラウドセルフタイプを使って、VM作成およびサーバ構築の自動化までの方法を紹介したいと思います。

今回はIDCFクラウドセルフタイプを使いますが、CloudStackであれば他事業者のものでも、自社や自宅ラックで動かしているCloudStack環境でも、Vagrantfileのパラメータを変更するだけで利用可能なはずです。
それでは始めます。

Vagarntとは

Vagrant(ベイグラント)はVirtualBoxのフロントエンドに相当するツールです。vagrantコマンドなどを使ってコマンドラインから簡単に新しい仮想マシンを削除したり、不要なVMを削除したりできます。 オープンソースとして公開されています。各種ドキュメントは下記で公開されています。
http://www.vagrantup.com/

VagrantはVM作成後のソフトウェア構築の自動化にも対応しており、その場合はshellやChefSolo,Puppet,Ansibleなどのdeploy toolと連携します。今回は、ChefSoloを使用します。
今回はChefおよびChefSoloの説明は割愛しますが、興味のある方は後述の参考情報をご参照ください。 (@naoyaさんの入門Chef Soloから入るのが王道です)

vagrant-cloudstackとは

Vagrantのpluginです。 上述の通り、Vagrantは元々local PCのVirtualBoxのフロントエンドとして開発されたものですが、VMWareにも対応し、その後、pluginをinstallすることで、様々な機能を追加できるようになりました。

そのpluginの中で、外部環境の仮想マシンの起動やprovisionができるようにしたのが、vagrant-aws pluginがあります。
その後、同じように外部環境を使えるpluginが開発されています。 現在、私の方で確認したものは下記の通りです。これらはvagrant plugin installコマンドでinstallできます。(詳細は各ドキュメントをご参照ください)
vagrant-aws
vagrant-openstack
vagrant-rackspace
vagrant-digitalocean
vagrant-cloudstack

上記以外のpluginについては下記をご参照ください。外部環境の仮想マシンを使うもの以外にも、vagrant-omnibus、vagrant-berkshelf、saharaなど様々なpluginが開発されています。
http://www.rubydoc.info/gems/v

2013年12月現在、vagrant-cloudstackの機能は下記の通りです。(changelog抜粋)
0.1.0
* Plugin now enables parallelization by default.
 + This behaviour can be turned off by invoking vagrant with --no-parallel (this flag requires vagrant 1.2.1)
* Added support for starting, stoping and reloading machines.
* Added support for portforwarding and adding ssh keys.
* Added support for basic network type.
 + Basic means that there is no need to specify a network_id to connecto to.
 + Default network type is advanced.

CloudStackとIDCFクラウドセルフタイプ

CloudStackはオープンソースのクラウド基盤管理ソフトウェアで、コンピューティングリソースをプールすることにより、パブリック、プライベート、およびハイブリッドのIaaS(Infrastructure as a Service)クラウドを構築することができます。
同じようなソフトウェアでOpenStackWakame等があります。

私が所属するIDCフロンティアでは、2011年9月よりCloudStackを使用したIaaSサービス IDCFクラウドセルフタイプ(以下、IDCFクラウド)を提供しています。
IDCFクラウドでは、CloudStack APIを利用可能です。
vagrant-cloudstackでは、このCloudStack APIを利用して、CloudStack環境上に仮想マシンを作成します。

環境

今回はローカルPCとして、MacBook Air(MBA)でVagrant環境を用意します。予め、MBAに下記をinstallします。
  • ローカル環境
    • MBA(MacOSX10.9、メモリ8GB、HDD250GB)
  • ソフトウェア
    • VirtualBox 4.3.2
      下記からDL,installします。
      https://www.virtualbox.org/wiki/Downloads
    • Vagrant 1.3.5
      下記からDL,installします。
      http://downloads.vagrantup.com/
    • Ruby 1.9.3p327
      rbenvを使用
    • Bundler 1.3.5
      ローカルMBAのCLIより、下記コマンドを実施
      $ gem install bundler
    • Vargrant plugin
      ローカルMBAのCLIより、下記コマンドを実施
      • vagrant-berkshelf 1.3.3
        $ vagrant plugin install vagrant-berkshelf
      • vagrant-omnibus 1.1.2 $ vagrant plugin install vagrant-omnibus
      • vagrant-cloudstack 0.1.0 $ vagrant plugin install vagrant-cloudstack

vagrant-cloudstack設定方針

ローカルPCの仮想環境にて仮想マシンを作成する場合には、Vagrant用に設定されたイメージ(vagrantbox)を使用しますが、外部環境を利用する場合はvagrantboxは利用できません。
今回は、IDCFクラウドにて用意されているUbuntu12.04テンプレートを用いて仮想マシンを作成し、その後、必要な設定を追加していきます。
  • 今回はvagrant-cloudstack利用に必要な最小限の設定ファイル(Vagrantfileおよびscript.sh)を用意。それ以外は、VirtualBox環境で利用していたものを利用する(ChefRecipeなど)
  • IDCFクラウドのUbuntu12.04テンプレートを使用
  • id:rootでvagrantの設定を実施
  • vagrant boxの基本設定と同様に、id:vagrantも作成し、no passwordでsudoできるようにしておく。
  • 外部からのsshアクセス用のportは2222を使用
  • installするものは以下の通り。
    • 公開されているcookbookを利用して、rvmをinstallし、ruby1.9.3を指定
    • 自作cookbook(site-cookbook)にて、apche2とmysql-serverをinstall

注意事項

  • IDCFクラウドでアカウント作成後、一度、webのコントロール画面から仮想マシンを作成してください。そうする事で、ネットワークとしてIPアドレスが1つ作成されます。このIPアドレスを使用します。
  • またできれば、上記で作成した仮想マシンは起動した状態で、以下のvagrant-cloudstackの作業を実施してください。(CloudStackでは仮想マシンが0台になると、FW,PortForwarding,DHCP機能を提供するVR(VirtualRouter)が一旦停止し、再度仮想マシンを起動するVRの起動も行うため、余分に時間がかかるためです)
  • 仮想マシン起動中は、料金が発生しますのでご注意ください。作業終了後は起動しっぱなしの仮想マシンがないか確認するようにしましょう。


設定内容

1. Vagrant環境設定用スクリプトを用意
  • scripts/script.shとして下記ファイルを用意します。
  • 内容はこちらと、vagrantbox.esのpostinstall.shを参考にしています。
#!/bin/bash

account=$1

useradd -p vagrant -m $account -s /bin/bash
    sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=admin' /etc/sudoers
    groupadd -r admin || true
    usermod -a -G admin $account
sed -i -e 's/%admin ALL=(ALL) ALL/%admin ALL=(ALL) NOPASSWD:ALL/g' /etc/sudoers
echo 'UseDNS no' >> /etc/ssh/sshd_config

vssh="/home/${account}/.ssh"
    mkdir -p $vssh
chmod 700 $vssh
    (cd $vssh &&
  wget --no-check-certificate \
    'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' \
    -O $vssh/authorized_keys)
    chmod 0600 $vssh/authorized_keys
chown -R ${account}:vagrant $vssh
unset vssh

2. Vagrantfile作成
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

#  config.ssh.username = "vagrant"
  config.ssh.username = "root"
  config.ssh.private_key_path = "~/.ssh/id_rsa" # IDCFクラウドで仮想マシンを作成時に指定したSSH鍵の秘密鍵を指定
  config.ssh.port = "2222"

  config.vm.box = "dummy"
  config.vm.box_url = "https://github.com/klarna/vagrant-cloudstack/raw/master/dummy.box"

  config.vm.provider :cloudstack do |cloudstack, override|
    cloudstack.scheme = "https"      # IDCFクラウドAPI設定
    cloudstack.host = "api.noahcloud.jp"   # 同上
    cloudstack.port = "443"                # 同上
    cloudstack.path = "/portal/client/api" # 同上
    cloudstack.api_key = "*****"           # 画面右上の[マイプロファイル]から[API資格情報]の[API鍵]をコピペ
    cloudstack.secret_key = "*****"        # 同じく秘密鍵をコピペ

    cloudstack.template_id = "2212"        # IDCFクラウドで使用するテンプレートのIDを指定。今回はIDCFが提供するUbuntu12.04を指定。
    cloudstack.service_offering_id = "24"  #IDCFクラウドの仮想マシンタイプ:XSを指定
    cloudstack.zone_id = "2"               # 2ゾーンあるうち、ゾーン2を指定
    cloudstack.keypair = "*****"           # IDCFクラウドで仮想マシンを作成時に指定したSSH鍵の秘密鍵を指定

    cloudstack.pf_ip_address_id = "*****"  # 使用するIPのIDを使用。[マイリソース]-[ネットワーク]で確認
    cloudstack.pf_public_port = "2222"
    cloudstack.pf_private_port = "22"

    cloudstack.instance_ready_timeout = 1800
  end

  # Chef-solo
  config.berkshelf.enabled = true
  config.omnibus.chef_version = :latest


  config.vm.provision :shell do |shell|
    shell.path = "scripts/script.sh"   # 上述のscript.shを指定
    shell.args = "vagrant"             # script.shの引数を指定
  end

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
    chef.add_recipe "apt"
    chef.add_recipe "rvm::system"
    chef.add_recipe "rvm::vagrant"
    chef.add_recipe "myapp"

    chef.json = {
      "rvm" => {
        "default_ruby" => "ruby-1.9.3-p448",
        "global_gems" => [
          {"name" => "bundler"}
        ]
      }
    }
  end
end

3. 仮想マシンを作成
下記を実行
vagrant up --provider=cloudstack

4. 仮想マシン作成完了後、仮想マシンにsshで接続
そのままvagrant sshを実行すると、Vagrantfileの内容に従って、rootとして接続します。
$ vagrant ssh
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

*** System restart required ***
    ________  ______   ______                 __  _          
   /  _/ __ \/ ____/  / ____/________  ____  / /_(_)__  _____
   / // / / / /      / /_  / ___/ __ \/ __ \/ __/ / _ \/ ___/
 _/ // /_/ / /___   / __/ / /  / /_/ / / / / /_/ /  __/ /    
/___/_____/\____/  /_/   /_/   \____/_/ /_/\__/_/\___/_/     


root@i-229-51079-VM:~#

5. id:vagrantとして、仮想マシンにsshで接続
下記の通り、Vagrantfileを一部コメントアウトすることで、仮想マシン作成時に作成したid:vagrantとしてsshアクセスします。vagrantからsudoコマンドを使って、操作可能です。
#  config.ssh.username = "vagrant"               # この行はコメントインしてもいいが、default値が"vagrant"のため、コメントアウトのままでもよい。
#  config.ssh.username = "root"                  # コメントアウト
#  config.ssh.private_key_path = "~/.ssh/id_rsa" # コメントアウト
下記の通り、login後のidがvagrantになっていることが分かります。
$ vagrant ssh
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

*** System restart required ***
    ________  ______   ______                 __  _          
   /  _/ __ \/ ____/  / ____/________  ____  / /_(_)__  _____
   / // / / / /      / /_  / ___/ __ \/ __ \/ __/ / _ \/ ___/
 _/ // /_/ / /___   / __/ / /  / /_/ / / / / /_/ /  __/ /    
/___/_____/\____/  /_/   /_/   \____/_/ /_/\__/_/\___/_/     


vagrant@i-229-51079-VM:~$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),999(admin),1001(rvm)


サンプルファイル

githubに置きました。
個人に依存するパラメータは伏せ字(*****)にしていますので、適宜適切なパラメータを設定してください。


課題

今回の作業にあたって、下記不具合が確認されました。とりあえず、目的のCloudStack上での仮想マシンの作成は達成できたので、後日調査する事とします。
  • 自作cookbook(site-cookbook)内のrecipeのserviceリソースが正常に動作しない
    通常のVirtualBox環境では動作していたので、vagrant-cloudstackの現在の動作制限もしくは不具合かも。
  • vagrant ssh実行時。下記warningが表示される。
    vagrant-cloudstackはvagrant-awsをfolkして作成されており、そこで利用しているgemに依存している模様。
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.

  • 今回はUbuntu12.04について紹介したが、CentOSを使用する場合は、今回紹介した設定以外に事前に設定すべき箇所がある模様。

まとめ

  • 駆け足でしたが、vagrant-cloudstackを使用して、IDCFクラウド上に仮想マシンを作成し、さらにソフトウェアのinstallする方法を紹介しました。
  • Vagrant+ChefSoloでlocal PC上に開発環境作成後、IaaS上に本番環境をdeployする流れがイメージいただけたら幸いです。
  • S君ありがとう!


参考情報

今っぽい Vagrant + Chef Solo チュートリアル
Berkshelfベースにvagrant, chef(knife-solo)環境を簡単に構築する方法
dotinstall Vagrant入門
入門Chef Solo - Infrastructure as Code
dotinstall Chef入門
RubyistMagazineChef でサーバ管理を楽チンにしよう! (第 1 回)
このエントリーをはてなブックマークに追加

2013年11月30日土曜日

rubyでHTML mail送信してみる

タイトルの通り、mail送信する事がでてきたので準備してみました。
ポイントは下記
  • 全体的にシンプルに
  • HTML部分はERBを使用
  • 全てを1fileで、見通しよく


mail送信ライブラリを選ぶ

mail送信ライブラリですが、ruby toolboxをみると、Action MailerとMailの2つが主なライブラリのようです。
さらにこちらをみると、Action MailerもMailも書き方はあまり変わらないようです。今回はRubyでMailを送信するだけなので、Mailを使うことにします。


ERBを使う

ERBはHTMLなどの文章の中にRubyスクリプトを埋め込むためのライブラリです。
Railsで、erb fileで馴染みがあったので、今回同じように使いたいなと思った次第です。 ERBについては、るびまの説明が参考になりました。標準添付なのであらためてのinstall不要です。


DATAと__END__を使う

Perlの__DATA__と同様に、RubyではDATAと__END__で、スクリプトファイルにDATAを埋め込むことができます。 DATA部分の読み込みは上述のるびまのサンプルを参考にしました。


サンプル

以上よりサンプルを作ってみました。
事前にMailライブラリはgem install mailなどでinstallしてください。 下記は、smtpサーバを指定していますが、スクリプト動かしているマシンのsendmailに渡せるのであれば、sendmailを使った方が簡単です。
#! /usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'mail'
require 'erb'

user = 'あああ'
name = 'いいい '

mail = Mail.new do
  from    'aaa@aaa.com'
  to      'bbb@bbb.com'
  subject 'sample_subject'
  html_part do
    content_type 'text/html; charset=UTF-8'
    body ERB.new(DATA.read).result(binding)
  end
end

# sendmailに渡すだけでよければ、こちらをコメントイン
=begin
mail.delivery_method :sendmail
mail.deliver
=end

# sendmailに渡すだけでよければ、こちらをコメントアウト
mail.delivery_method :smtp, {
  address: 'smtp.aaa.com',
  port:    587,
  domain:  'aaa.com',
  user_name:    'aaa@aaa.com',
  password:     'xxxxxxxxxxxxxxx',
}
mail.deliver

__END__
<!DOCTYPE html>
<html>
  <body>
    <h1>こんにちは、<%= user %>さん!</h1>
    <p>
      あなたの名前は<%= name %>さんです。よろしくね!
    </p>
  </body>
</html>


まとめ

  • 書いてみるとこんだけなんですが、調べるとそのものずばりの情報がなかったので、忘備録として書いてみました。
  • 「こんな方法があるよ」的な話があると教えてもらえると幸いです。
このエントリーをはてなブックマークに追加

2013年11月20日水曜日

VBoxManage: error: Failed to create the host-only adapter

最近、Vagrant upをするとエラーが発生するようになりました。
本事象は、下記環境で発生するようです。
MacOSX 10.9
VirtualBox 4.2.18 r88780
エラー内容は下記。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[Berkshelf] This version of the Berkshelf plugin has not been fully tested on this version of Vagrant.
[Berkshelf] You should check for a newer version of vagrant-berkshelf.
[Berkshelf] If you encounter any errors with this version, please report them at https://github.com/RiotGames/vagrant-berkshelf/issues
[Berkshelf] You can also join the discussion in #berkshelf on Freenode.
[Berkshelf] Updating Vagrant's berkshelf: '/Users/snumano/.berkshelf/default/vagrant/berkshelf-20131119-2647-nx5ysd-default'
[Berkshelf] Using apt (1.9.0)
[Berkshelf] Installing rvm (0.9.1) from git: 'git://github.com/fnichol/chef-rvm.git' with branch: 'master' at ref: '7038fb8c518d0d7785767de215b1ae463f237973'
[Berkshelf] Using myapp (0.1.0) at './chef/site-cookbooks/myapp'
[Berkshelf] Using java (1.13.0)
[Berkshelf] Using windows (1.10.0)
[Berkshelf] Using chef_handler (1.1.4)
[Berkshelf] Using chef_gem (0.1.0)
Pruning invalid NFS exports. Administrator privileges will be required...
Password:
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface
VBoxManage: error: Context: "int handleCreate(HandlerArg*, int, int*)" at line 68 of file VBoxManageHostonly.cpp
対応はこちらを参考に、Local PC側でsudo /Library/StartupItems/VirtualBox/VirtualBox restartを実行するだけ。再度vagrant upすれば正常に起動します。
VirtualBox4.3.0でも上記事象は継続するようですが対応コマンドが、sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.plistに変わるので注意。
こちらによるとVirtualBox4.3.2で、本事象は解消されるそうです。VirtualBox起動後、「アップデートを確認」では4.3.2を見つけてくれませんでしたが、DownLoadサイトでは、4.3.2が公開されています。

### 追記(2013/11/26) ###
VirtualBox4.3.2にupgradeして、本事象解消を確認しました。
このエントリーをはてなブックマークに追加

2013年11月17日日曜日

MarkdownでBlogger記事を書いてみた

最近、Markdownがマイブームです。
githubのREADMEを書くのに使ったのが最初だったのですが、その後、masuidriveさんがMarkdown対応のオンラインメモサービスwri.peを開発されたりして、少しずつ気になってました。
で、MarkdownでBlogger記事を書く方法を調べた所、いくつか方法がある中で、StackEditというMarkdown対応のオンラインエディタを使う方法が、自分には一番よさそうでした。
2ペイン画面で、リアルタイムでHTMLのPreviewが表示されるので、確認しながらMarkdownで書いていきます。 記事をを書いた後は、左上のアイコンをクリックしmenuから[Publish on...]-[Blogger]を選択します。(詳細は上述のブログをご参照ください)
実際に、StackEditで書いたblogはこちらです。
他に、Markdown関連で調べた事をいくつか。

Markdown対応のBlog

Markdownに対応しているサイトは、Wikipediaの利用例に記載の通り、Stack OverflowやGitHubなどがあります。
Blog関連で有名な所では下記ぐらいでした。もし、BloggerでMarkdownが全く使えなかったら、これらのサービスへの移行も考えていました。

MarkDown対応のEditor

横着してリンクの紹介になりますが、意外にたくさんあります。この中では、Kobitoを使った事があります。 今回使用したStackEditは、「ブラウザエディタ」に該当しそうですが、含まれていませんね。

まとめ

  • BloggerをMarkdownで書く環境が整ったことで、これからはメモを含めて全てMarkdownで書けそうです。
  • Markdownはそのままでも読めるので、メモの記述方法として、覚えておくと便利そうです。
このエントリーをはてなブックマークに追加

2013年11月16日土曜日

VagrantとChefSoloでTremaEdge環境をつくる

最近、OpenFlow徹底入門を読んでいます。再びOpenFlowでいろいろやってみたいと感じています。
この本ではOpenFlowコントローラとしてFloodlightを使用しています。今までOpenFlowコントローラは、主にTremaを勉強してきましたが、いろいろなコントローラを触りながら、OpenFlowの本質を知るのもいいなかなと思っています。
ただ、そのための環境を作成するのは、(webに情報があるとは言え)やはり時間がかかります。また、local PCのリソース(主にdisk容量)を消費するので、どこかのタイミングで、ある環境を削除する判断をしなければなりません。(今までそのような経験をしてきたので、PC購入の際にはdisk容量を多めにするようにしています)
VagrantとChefSoloを使えば、サーバ環境をファイルで管理できる、個々の環境imageを保持する必要がなくなります。よって、diskの使用率を低減することができます。
今後、検証環境を作成する際には、VagrantとChefSoloで作成し、githubで保存していきたいと思います。

今回やること

今回は、trema-edgeの環境を作成してみたいと思います。 trema-edgeはtremaのOpenFlow1.3版で、OpenFlow1.0はサポートしていません。今のところ、tremaとtrema-edgeは別のものです。
また、tremaはRuby1.8環境で動作するのですが、Ruby1.8の開発は終了しています。それに対して、trema-edgeはRuby2.0環境で動作します。詳しくは下記。

設定ファイル

まず今回作成した設定ファイルをgithubに保存しましたので、ご参照ください。
github vagrant-trema-edge

設定のポイント

install手順はgithubのREDAMEに従っています。
手順は難しくありませんが、今回は、rubyのバージョン管理にrvmを使いましたので、rvmの設定のポイントを記載します。

Berksfileの設定

cookbookとしてrvmを登録します。rvm用のcookbookはいくつか存在しますが、今回使用したものが安定しているようでした。
$ vi Berksfile
site :opscode
cookbook 'apt'
cookbook 'rvm', github: 'fnichol/chef-rvm'
cookbook 'myapp', path: './site-cookbooks/myapp'

Vagrantfileの設定

chef.add_recipeとして下記の2行を追加し、chef.jsonでrubyのバージョン指定と、gemsの指定を行います。
$ vi Vagrantfile
-snip-
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.add_recipe "apt"
chef.add_recipe "rvm::system"
chef.add_recipe "rvm::vagrant"
chef.add_recipe "myapp"

chef.json = {
  "rvm" => {
    "default_ruby" => "ruby-2.0.0",
    "global_gems" => [
      {"name" => "bundler"},
      {"name" => "rake"}
    ]
  }
}
-snip-

Recipeの設定

今回、cookbookでrvmをinstallしているので、rvm_shellリソースが使えるようになっています。rvm_shellでrvmに依存する部分の記載を行います。
また、githubからtrema-edgeのrepositoryを取得するのはgitリソースを使用します。
$ vi site-cookbooks/myapp/recipes/default.rb
git "/home/vagrant/trema-edge" do
  repository "git://github.com/trema/trema-edge.git"
  reference "master"
  action :checkout
  user "vagrant"
  group "vagrant"
end

rvm_shell "install trema-edge" do
  ruby_string 'ruby-2.0.0'
  cwd "/home/vagrant/trema-edge"
  code <<-EOC
    bundle install
    rake
  EOC
end

bash ".bashrc" do
  not_if "which trema"
  code <<-EOC
    echo 'PATH="$HOME/trema-edge/bin:$PATH"' >> /home/vagrant/.bashrc
  EOC
end

まとめ

  • 今回、trema-edgeの環境設定をVagrantとChefSoloで行いました。
  • 設定のポイントとしては、今回はrvmを使用し、ruby2.0.0を指定しています。
  • trema-edge自体は、これから触ってみたいと思います。

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

2013年9月19日木曜日

情報収集あれこれ

以前、勉強会についてまとめましたが、今回は情報収集について。
「キュレーション」をキーワードに、実際に使っているものを紹介します。

キュレーションツール 海外

キュレーションツール 日本

まとめ

  • 出勤の電車の中で、日経電子版を読んだ後に、上記のものをZIteから順にチェックしています。時間がない時はZiteのhomeと、Hacker Newsだけでもみるようにしています。
  • 最近は、Knoh,newsHUB,SmartNewsなどのnews系のアプリも増えており、試しているところです。
  • しかし、結局はFBで他の方が紹介している記事が、かなり参考になっています。専門的なもの、少し自分の専門とは違うが非常に参考になるもの、海外情報などです。
このエントリーをはてなブックマークに追加

2013年9月16日月曜日

vagrant synced folder設定変更中、動作がおかしくなった場合の対処方法

synced folder(nfs有効)の設定において、synced元のfolder(directory)を変更時に動作がおかしくなったので、備忘録として記載する。

環境

  • OS
    • OSX ver 10.8.4
  • vagrant環境
    • vagrant ver1.3.1
    • vagrant-berkshelf ver1.3.3
    • berkshelf ver2.0.10

事象

  • 当初、適当なdirectory(foo/bar)を、vagrantの仮想環境の/vagrant_dataにnfs mount実施していた。
  • 設定を見直し、Vagrantfileが存在するcurrent directoryを、synced folderのdefaultである/vagrantにnfs mountするよう設定変更した。
    • 変更前
      config.vm.synced_folder "foo/bar", "/vagrant_data", :nfs => true
      
    • 変更後
      config.vm.synced_folder ".", "/vagrant", :nfs => true
  • その後、vagrant upを実施すると、下記エラーが発生するようになった。vagrant sshも実施不可。
    $ vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    [default] Setting the name of the VM...
    [default] Clearing any previously set forwarded ports...
    [Berkshelf] Updating Vagrant's berkshelf: '/Users/snumano/.berkshelf/default/vagrant/berkshelf-20130914-3068-18zoh8f-default'
    [Berkshelf] Using apt (1.9.0)
    [Berkshelf] Using imagemagick (0.2.2)
    [Berkshelf] Installing rvm (0.9.1) from git: 'git://github.com/fnichol/chef-rvm.git' with branch: 'master' at ref: '7038fb8c518d0d7785767de215b1ae463f237973'
    [Berkshelf] Using myapp (0.1.0) at './chef/site-cookbooks/myapp'
    [Berkshelf] Using java (1.13.0)
    [Berkshelf] Using windows (1.10.0)
    [Berkshelf] Using chef_handler (1.1.4)
    [Berkshelf] Using chef_gem (0.1.0)
    [default] Creating shared folders metadata...
    [default] Clearing any previously set network interfaces...
    [default] Preparing network interfaces based on configuration...
    [default] Forwarding ports...
    [default] -- 22 => 2222 (adapter 1)
    [default] Booting VM...
    [default] Waiting for VM to boot. This can take a few minutes.
    [default] VM booted and ready for use!
    [default] Configuring and enabling network interfaces...
    [default] Mounting shared folders...
    [default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
    [default] Exporting NFS shared folders...
    Preparing to edit /etc/exports. Administrator privileges will be required...
    Password:
    [default] Mounting NFS shared folders...
    The following SSH command responded with a non-zero exit status.
    Vagrant assumes that this means the command failed!
    
    mount -o vers=3 192.168.33.1:'/Users/snumano/Documents/hoge' /vagrant

対処方法

こちらを参考に、/etc/exportsを手動削除し、nfsdのdisable,enableを実施。
その後、正常にvagrant up起動およびnfs mountを確認できました。
$ sudo rm /etc/exports
$ sudo nfsd disable
$ sudo nfsd enable
$ sudo nfsd status
$ vagrant up

まとめ 

  • 今回事象の原因不明だが、synced folder変更中に、local pc側nfsdもしくはrouting tableがおかしくなったような印象。
  • もしかしたら、local PCに依存する問題かもしれない。
このエントリーをはてなブックマークに追加

2013年7月28日日曜日

Nginx+unicornでRailsを動かす


local PCのブラウザから「http://192.168.33.10:8080」を指定。すると、下記のように表示されます。 動作確認後、一旦「Ctl + c」でunicorn_railsを停止します。
このエントリーをはてなブックマークに追加

2013年7月25日木曜日

vagrant + chef solo + Berkshelf環境で、opscode-cookbookと自作cookを混在させたらハマった。その対応

前回のblogで、berks cookbookコマンドを用いたrepository作成の手順を紹介しました。
ただし、berks cookbookコマンドで作成したrepositoryはcookbookそのものでもあり、defaultの設定・環境だと、サードパーティのcookbook利用する場合、ファイル構成が分かりにくいものとなってしまいます。

そこで、前回ハマった「knife solo init」コマンドで作成したrepositoryにVagrantfileを用意し、サードパーティー(opscode-cookbooks)と自作cookbookを混在させる方法について再度見直しを行い、正常動作できるようにしたいと思います。

対応方法

先に結論を書くと、Berksfileに自作cookbookをpathで明示的に指定してあげました。こうすることで、opscodeのcookbookはネットからDL(git clone?)されるのに対して、自作cookbookはlocalの指定されたpathのdirを参照し、適切に動作するようになりました。

pochi-2:chef-repo snumano$ cat Berksfile
site :opscode

cookbook 'apt', '= 1.9.0'
cookbook 'mysql'
cookbook 'nginx'
cookbook 'database'
cookbook 'myapp', path: './site-cookbooks/myapp'    #追加行


コードはこちら

https://github.com/snumano/vagrant-knifesolo2


参考

http://berkshelf.com/
入門Chef Solo



まとめ

今回でやっと、Vagrant + Chef Solo + Berkshelfの対応手順が整理できました。
「こっちのやり方の方がいいよ」など情報ありましたら、お知らせいただけたら幸いです。
このエントリーをはてなブックマークに追加

2013年7月23日火曜日

vagrant + chef solo環境で、opscode-cookbookと自作cookを混在させたらハマった

表題の通りハマったので忘備録として残しておきます。

事象

  • knife solo initコマンドでrepositoryを作成後、opscode-cookbookからnginx,mysql,databaseなどのcookbookをberkshelfコマンドでinstall。
  • また、自作cookbookをknife cookbook createコマンドで作成。
  • 自作cookbookのrecipeを書いた後、vagrant upすると、自作cookbookが見つからない旨のerrorが発生。
  • error内容を確認すると、vagrant up時に、brrkshelfコマンドが実行され、Berksfileに記載されたcookbooksが~/.berkshelf/default/vagrant/berkshelf-***-default以下に作成され、chef soloコマンドにて仮想環境に転送されるよう。しかし、このberkshelf-***-default以下に、自作cookbookは作成されず、結果errorとなっている模様。
  • ちなみに、下記のopscode-cookbookのchef-repoをcloneした場合も、knife solo initの場合と同様に、errorになることを確認した。
  • git clone https://github.com/opscode/chef-repo.git
    

コード

原因

  • 不明

対応

  • Berkfsfileを_Berksfileにrename後、vagrant up実行すると正常に処理完了した。
    berkshelfコマンドの実行を抑制する事で、上述の事象は発生しなくなった。
    しかし、利用はよくわからない。
  • このままだと気持ち悪いので、Berkshelfコマンドを用いたrepository作成を試したところ、vagrant upの正常実行を確認できた。
    https://github.com/snumano/vagrant-berkshelf

まとめ

  • Berkshelfコマンドでrepository作成した場合、knife solo initした場合と比較して、ファイル構成とVagrantfileの設定内容が異なる事は確認できたが、どの部分が今回の動作の違いになっているのかは、今のところ不明。
  • 本事象の原因と根本対策について、どなたか教えていただけたら幸いです。
    (2013/7/23追記:Berksfileに自作cookbookをpath optionとともに追記することで、本事象を回避できることを確認しました。後日blogにまとめます)
  • berks cookbokコマンドは、cookbook = repositoryとして扱うようです。上述のサンプルコードでは、repository名であるchef-repoがそのままcookbook名になっているので、少しかっこ悪い。。。

最後に、入門Chef Soloは何回も読み返して参考にさせていただきました。






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

2013年7月18日木曜日

vagrant + knife soloでnginxをinstallしてみる

備忘録としてまとめます。

local環境


  • MacOSX 10.8.4
  • ruby 1.9.3p327

作成する仮想環境


  • Ubuntu 12.04
  • Nginx

手順

  1. chef-soloをinstall
  2. $ gem install chef
    $ knife -v
    Chef: 11.4.4
    
  3. knife-soloをinstall。最新のver0.3.0をinstallするため、githubからcloneします。
    $ git clone git@github.com:matschaffer/knife-solo.git
    $ cd knife-solo
    $ bundle
    $ bundle exec rake install
  4. Virual Boxをinstall
    こちらからDownLoad
  5. vagrantをinstall
  6. $ gem install vagrant
    
  7. vagrant環境を作成
    vagrantbox.esから使いたいboxを選ぶ
    $ vagrant box add ubuntu12_04 http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-amd64-disk1.box
    $ vagrant box list
    $ mkdir Ubuntu
    $ cd Ubuntu
    $ vagrant init ubuntu12_04
    $ vagrant up
    
    下記で仮想環境にアクセスできる
    $ vagrant ssh
    
    knife soloでsshアクセスできるように下記を実施。host名はdev1とする。
    $ vagrant ssh-config --host dev1 >> ~/.ssh/config
    
  8. 仮想環境にknife soloをinstall
    $ knife solo prepare dev1
    
  9. cookbookレポジトリを作成。
    とりあえず、上述のVagrantのdirに一緒に作成しておきます。
    $ knife solo init chef-repo
    $ cd chef-repo
    $ git init
    $ git add .
    $ git commit -m 'init'
    
  10. 仮想環境にinstallするレシピを書く
    $knife cookbook create nginx -o site-cookbooks
    $vi site-cookbooks/nginx/recipes/default.rb
    package 'nginx' do
      action :install
    end
    
    service "nginx" do
      supports :status => true, :restart => true, :reload => true
      action [ :enable, :start ]
    end
    
    $ vi nodes/dev1.json
    {
      "run_list":[
        "nginx"
      ]
    }
    
  11. 仮想環境にレシピを適用
    $ knife solo cook dev1
    
  12. 仮想環境側で確認
    nginxのバージョンが最新にならない。。。srcからinstallしようかな。。。
    $ nginx -v
    nginx version: nginx/1.1.19
    
  13. 動作確認したら、recipeをcommit
    $ git add ./site-cookbooks/nginx/
    $ git commit -m 'add nginx recipe'
    

参考:
入門Chef Solo
http://docs.komagata.org/5098
このエントリーをはてなブックマークに追加

2013年7月15日月曜日

「プログラミング入門 - Rubyを使って -」をやってみた その1

Rubyの勉強に下記サイトの練習問題に挑戦します。1章はirbを使ってます。
プログラミング入門 - Rubyを使って -, by Chris Pine, 日本語ver. by S. Nishiyama

1.数(Numaber)

  • 1年は何時間でしょうか?
    うるう年ではないとします。
>> 24*365
=> 8760
  • 10年間は何分でしょうか?
    うるう年が2回ありますので、計算に含めます。
>> 60*24*(365*10+10/4)
=> 5258880
  • あなたが生まれてから今日まで何秒たっているでしょうか?
>> (Time.now - Time.local(1973,12,3,0,0,0)).to_i
=> 1250124789
  • あなたは一生のうちいくつのチョコレートを食べたいですか?
    1週間に1つのチョコを食べるとします。
>> (80*365)/7
=> 4171
  • 私が生まれてから10億3400万秒 たっているとしたら、私は今何歳でしょう
>> 1034000000/(60*60*24*365)
=> 32

4.数と文字列の変換

  • 最初に姓、次に名前を聞いて、最後にフルネームに対してあいさつを するようなプログラムを書いてみましょう。
pochi-2:Test snumano$ cat 4-1.rb
#!/usr/bin/ruby

puts 'こんにちは。あなたの姓を入力してください'
last = gets.chomp

puts '次は、あなたの名を入力してください'
first = gets.chomp

puts 'あなたの名前は' + first + ' ' + last + 'ですね。'

pochi-2:Test snumano$ ./4-1.rb
こんにちは。あなたの姓を入力してください
Numano
次は、あなたの名を入力してください
Shugo
あなたの名前はShugo Numanoですね。
  • 好きな数を入力してもらい、それに1を加えて、その結果を ベターな 数字として薦めるプログラムを書きましょう。
  •  
pochi-2:Test snumano$ cat 4-1.rb
#!/usr/bin/ruby

puts 'こんにちは。あなたの姓を入力してください'
last = gets.chomp

puts '次は、あなたの名を入力してください'
first = gets.chomp

puts 'あなたの名前は' + first + ' ' + last + 'ですね。'

pochi-2:Test snumano$ ./4-1.rb
こんにちは。あなたの姓を入力してください
Numano
次は、あなたの名を入力してください
Shugo
あなたの名前はShugo Numanoですね。

5.メソッド(method)

  • 「怒ったボス」のプログラム
pochi-2:Test snumano$ cat 5-1.rb
#!/usr/bin/ruby

$KCODE = 'UTF-8'

puts '望みは何だ?'
hope = gets.chomp

if hope =~ /給料上げてください/ then
  puts 'なにぃ? "給料上げてください" だとー!! おまえは首だ!! '
else
  puts 'なにぃ?' + hope + 'だとー!!お前は首だ!!'
end
pochi-2:Test snumano$ ./5-1.rb
望みは何だ?
休みたい
なにぃ?休みたいだとー!!お前は首だ!!
pochi-2:Test snumano$ ./5-1.rb
望みは何だ?
給料上げてください
なにぃ? "給料上げてください" だとー!! おまえは首だ!! 
  • 「目次」を表示する プログラム
pochi-2:Test snumano$ cat 5-2.rb
#!/usr/bin/ruby

$KCODE = 'UTF-8'

lineWidth = 20
lineWidth2 = 10

index = '目次'
chap1 = '1章:  数'
chap1Page = 'p. 1'
chap2 = '2章:  文字'
chap2Page = 'p. 72'
chap3 = '3章:  変数'
chap3Page = 'p. 118'

puts index.center(lineWidth)
puts chap1.ljust(lineWidth) + chap1Page.center(lineWidth2) 
puts chap2.ljust(lineWidth) + chap2Page.center(lineWidth2) 
puts chap3.ljust(lineWidth) + chap3Page.center(lineWidth2) 
pochi-2:Test snumano$ ./5-2.rb
       目次       
1章:  数             p. 1   
2章:  文字         p. 72   
3章:  変数         p. 118  
今回はここまで。6章以降は後日。。。
このエントリーをはてなブックマークに追加

2013年7月14日日曜日

rbenv install時に、.bashrcと.bash_profile動作の違いでつまずいた

MacOSXにて、複数versionのrubyを切り替えるツールとしてrvmを使っていましたが、rbenvに切り替える事にしました。
rbenv installの際つまずいたのですが、原因は「.bashrcと.bash_profileの動作の違いを理解していなかった」事でした。


詳細は下記の通りです。

  • 下記ブログを参考にさせていただきました
    Mountain Lion に rbenv を導入 - :soy_milk:
  • 上記ブログを参考に対応した場合、対応直後が正常にruby versionの切り替え実施できるのですが、MacBook再起動すると「rbenv globalコマンドでrubyのバージョンを変更しても、実際には変更できない」事象が発生しました。しかも、最初再起動時に発生した事に気づかず、「がちゃがちゃ設定をいじっている間に、rbenvの動作がおかしくなった」と思っていたため、原因の特定に時間がかかりました。
pochi-2:~ snumano$ rbenv versions
  system
* 1.9.3-p327 (set by /Users/snumano/.rbenv/version)
  2.0.0-p247
pochi-2:~ snumano$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
pochi-2:~ snumano$ rbenv global 1.9.3-p327
pochi-2:~ snumano$ rbenv versions
  system
* 1.9.3-p327 (set by /Users/snumano/.rbenv/version)
  2.0.0-p247
pochi-2:~ snumano$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

  • 対応は下記どちらかを実施します。
    • 「.bashrc」の代わりに「.bash_profile」を指定する
    • もしくは、「.bash_profile」の最後に下記設定を加えておく。
source ~/.bashrc

  • 理由は下記の通り。今回の発生した事象は、後者になります。
    • .bashrcはbash起動時に読み込まれる
    • .bash_profileはログインシェルとして起動された時に読み込まれる   

久しぶりにshellの設定を触ったので、という言い訳で。。。

参考:
rbenvでRubyを複数バージョンインストールする
http://www.proton.jp/main/apps/bash.html
http://stackoverflow.com/questions/10940736/rbenv-not-changing-ruby-version
http://stackoverflow.com/questions/7780030/how-to-fix-terminal-not-loading-bashrc-on-os-x-lion

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

2013年6月24日月曜日

vagrant box addコマンドを実行すると、"Failed to untar the box file..."エラーメッセージが表示されOSイメージをダウンロードできない

原因ははっきり分かっていないが、正常にダウンロードできたので、備忘録。

環境は下記。
host:MacOS10.8
ruby:1.9.3p429
vagrant:1.0.7

事象は下記の通り。

  • ホームディレクトリ意外の適当なディレクトリで、vagrant box addコマンドを実行したところ、ダウンロード後のuntarに失敗した旨のメッセージが表示される。
pochi:Vagrant snumano$ vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
[vagrant] Downloading with Vagrant::Downloaders::HTTP...
[vagrant] Downloading box: http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
[vagrant] Extracting box...
[vagrant] Cleaning up downloaded box...
Failed to untar the box file. This is usually because you're
attempting to add a box that isn't a valid box file. Please
double check that the box file is properly packaged.

  •  ~/.vagrant.d以下のtmp, boxesディレクトリには何もファイルなし。
  • こちらには、環境変数HOMEを上書きするのがいやなら、VAGRANT_HOMEを使うようにとのコメントあり。
  • vagrantのソースを見るが、環境変数HOMEをどのように設定しているか分からない。(単なるスキル不足。。。)

とりあえず、ホームディレクトリで再度、vagrant box addを実行してみると、、、
  • ~/.vagrant.d/tmp/に、OSイメージがdownloadされる事を確認できるようになった。で、download成功。
pochi:~ snumano$ vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.3-x86_64-v20130101.box
[vagrant] Downloading with Vagrant::Downloaders::HTTP...
[vagrant] Downloading box: http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.3-x86_64-v20130101.box
[vagrant] Extracting box...
[vagrant] Verifying box...
[vagrant] Cleaning up downloaded box...

  •  ~/.vagrant.d/boxes/に各種ファイルが作成された。

pochi:.vagrant.d snumano$ pwd
/Users/snumano/.vagrant.d
pochi:.vagrant.d snumano$ tree
.
├── boxes
│   └── base
│       ├── Vagrantfile
│       ├── box-disk1.vmdk
│       └── box.ovf
├── gems
├── insecure_private_key
└── tmp
4 directories, 4 files

根本原因は不明のままだが、とりあえず先に進む事とする。

(2013.6.24 追記)
gem installでvagrantをinstallした場合、上述の通りver1.0.7だが、こちらのサイトでは最新は1.2.2であった。MacOS用のバイナリをinstallして様子見している。
このエントリーをはてなブックマークに追加

2013年6月23日日曜日

Mac(10.8)からLinkStation(LS-WXL)へ接続できない場合の対処

先日入手したMacBookAir(MacOS 10.8)でTimeMachineの設定する際に、手間取ったのでメモ。
先に結論を言うと、「ファームウェアのバージョンアップは大事」という事でした。

Mac(10.8)からLinkStationへ接続できない場合の対処

環境は下記の通り。
  • 旧MacBook(MacOS 10.7)
  • 新MacBookAir(MacOS 10.8)
  • LinkStation(型番:LS-WXL、ファームウェア:ver1.22)

新MBAからLinkStationにafpおよびsmbの両方とも接続できない。login画面は表示されるが、ID,PWを入力すると認証に失敗し、下記のような画面が表示される。
旧MacBookからは、同じLinkStationに問題なく接続できていたのに。。。

検索してもずばりの回答がないので、まずはLinkStationのファームのバージョンを調べてみた。手元のLinkStationで動いているバージョンは1.22。最新のバージョンは1.65
しかも、リリースノートをみると、1.52から1.54にかけて、AFP接続やTimeMachine関係の修正がされているようだ。
早速1.65のアップデータをDLして、アップデートするもうまく適用できない(どのような状況だったかは、画像が残っていないので省略)。。。
段階的にアップデートしようと、他のアップデータを探すも1.60のアップデータぐらいしか見つからない。。。

仕方ないので、1.60を当ててみたら、LInkStationの検索およびアップデート適用までうまくいった。しかし、その後自動でLInkStationが再起動がされ100秒程で起動してくるはずが、100秒経過後、再び、再起動を繰り返しさらに100秒待てというメーッセージが繰り返し表示される事象が発生。
LinkStation本体をみてみると、POWERランプが青色点滅している。実際に起動を繰り返しているようだ。
とりあえず1.65のアップデータを起動し、LinkStationの検索を実行すると、
やはりLinkStationを検索しても見つけてくれない。再起動を繰り返しているので、当然だ。

あきらめて10分程放っておいたら、いつの間にかLinkStationが見つかっていた。
すかさず、そのまま1.65にアップデートを実行。
(結局、なぜ再起動を繰り返していたのかは不明。1.60を適用から15分程度で、LinkStationが安定したようだ)
そして1.65にアップデート完了、今度は繰り返し、再起動中のメッセージが表示されることもない。
しかし、、、アップデータ、LinkNabigatorでLinkStationを検索するも見つからない。pingするも返答なし。本体のLEDを確認すると、POWERランプは青色点灯するも、その下のINFO/ERRORランプが点滅している。

さっきと同様に、これもしばらく放っておいて他の事をしていたら、30分程度でping応答が返ってくるようになっていた。
(あとで、こちらで気づいたが何らかの処理が実行されてたらしい。)

以上で、LinkStationのファームウェア1.22から1.65にバージョンアップ完了。
その後、新MBAからLinkStationへAFP,SMB接続できるようになり、本来の目的であった、TimeMachineへの接続もできるようなった。
(LinkStationでTimeMachineできるようにする設定はいろいろあるようだが、対応している機器であれば、こちらの手順が一番簡単だと思う。自分もこの手順と同じ設定を実施した)

これで、日々のバックアップはTimeMachineに任せる事ができた。
さらに、他の機器と共有したいファイルはSugarSyncを利用する事にした。
このエントリーをはてなブックマークに追加

2013年5月19日日曜日

Scratch1.4(相当)とArduinoと光センサーで、かめはめ波測定器(仮)を作ってみた

先日、Qiitaに投稿したようにArduinoと光センサーでアナログ値を入力として得られることを確認しました。
しかし、これを見た子供の反応は薄く、3秒程度で、やっていた3DSに視線を戻していきました。「子供に電子回路の関心を持たせるにはどうしたらいいか」を考え、子ども達が触っているScratchを組み合わせる事にしました。

準備
  1. 回路
    回路に関して準備したものと、回路図はこちらと同じです。
  2. ScratchとArduinoを連携する環境(S4A)の導入
    こちらのInstallationの1-3を実行します。
    1はArduinoの開発環境ですので、Arduinoを触ってる人は、既にinstall済のはずです。
    2は、local PCの適当な場所に保存し、1のArduino開発環境でコンパイルおよびArduinoへの転送を実施します。
    3については、自分の使用しているOSのものを選択し、installします。私はMac版をinstallしました。下記の「S4A」をクリックしてアプリを起動します。


    起動後の画面は下記の通りです。Scratch1.4とほぼ同じような画面です。右側のArduinoの絵(スプライト)とAnarogx6,Digitalx2の入力値が表示されます。(まだ何も入力されていないので、適当な値が表示されています)

  3. Scratch(実際はS4A)にてプロジェクト(アプリ)の作成
    下記のような感じでブロックを並べてみました。(S4Aに含まれるブロックは、Scratchのサイト上で公開できないので、現時点では下記画像でご勘弁ください。Scratch2.0では2013年夏頃に、外部デバイス操作機能が追加予定なので、そうなれば、下記のようなアプリを公開する事ができるようになります)
    「value of Analog0」で光センサーの値を取得しています。Analog0の値の変化を読み取り、良いタイミングで期待する値になった場合に、「成功」の判定をしています。

  4. かめはめ波測定器(仮)を実行する
    実際に実行してみましょう。以後はScratchの操作方法と同じです。
    画面右上の緑の丸をクリックします。すると「かーめーはーめー」とArduinoの絵がしゃべりはじめます。(この辺りは、それっぽい絵を用意すればいいのですが、著作権の問題もあるので、横着してArduinoの絵のままとしています。w)


    「波ーーー!!」のタイミングで、光センサーに対して、かめはめ波を発射してください。(本当は、手で光センサーを隠すようにすればいいです。。。)


    タイミングとかめはめ波の勢いがあえば「成功」と表示されます。下記の例では発射タイミングが遅く失敗となってます。


以上、簡単ですが、Scratch1.4(S4A)とArduinoと光センサーを組み合わせて、センサーから取得したアナログ値をScratch上に表示する事を試してみました。
当初の目的であった「子供に電子回路に関心を持たせる。(少なくとも3秒以上の関心を引く)」については、1分程いろいろ触っていたので成功とします。

Scratch2.0では、同等の外部デバイスとの連携機能は2013年夏にリリース予定との事なので、リリースされたら、本アプリをScratchサイトにて公開したと思っています。
このエントリーをはてなブックマークに追加

2013年5月3日金曜日

Arduino x Ruby x 光センサーで電子回路作り

最近Arduinoを入手し、どのような使い方ができるか模索しています。
まずはセンサーで値を取得するところから始めたいと思います。
センサーも温度、湿度、気圧、光センサーなど様々なものがあります。こんな感じ。

今回は光センサーを使います。手を近づけると値が変わるので、手の動きで操作をする。なんて事が安価にできそうです。
今回はQiitaに投稿してみましたので、こちらをご覧下さい。


今後も、センサーとネットを使って名にができるのか、試してみたいと思います。

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

2013年5月2日木曜日

なぜRubyを使っているか?

最近Rubyを使う事が少しずつ増えていますが、「なぜRubyなのか?」mindmapでまとめてみました。
結論としては「気になるツール、技術要素、トピックにアプローチするのに都合がいいから」となりました。

用途によって適切な言語を選択するのがいいのでしょうが、学習コストも高いので現実的ではありません。そういった意味でRubyは幅広い用途で利用シーンがあり、とても重宝しています。

今後はPerlは仕事でのみ利用となり、JavaScriptはiPhoneアプリ開発(TitaniumMobile)やnode.js等で利用が増えてくるのではないかと思ってます。


Make your own mind maps with Mindomo.
このエントリーをはてなブックマークに追加

2013年4月21日日曜日

twitter bootstrap railsでdropdownが動かない時の対処

備忘録。
下記環境のdevelopment環境にてdropdownが動かない、herokuのproduction環境では正常に動作するという事象に遭遇しました。


  • 環境
    • OS:MacOSX 10.7.5
    • Ruby:1.9.3p194
    • Rails:3.2.13
    • twitter-bootstrap-rails:2.2.6
  • 原因
    railsのasseteのprecompileという動作が原因のよう。こちら参照。
  • 対処
    こちらを参考に、config/environments/development.rbを編集。

    変更前
  • config.assets.debug = true

        変更後
  • config.assets.debug = false

以上

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

2013年4月7日日曜日

HerokuのDB接続時のエラー「FATAL: password authentication failed for user "xxx" (PG::Error)」

Herokuの標準DBであるPostgresに接続する外部スクリプトを使っていたある日、突然、該当DBに接続できなくなり、ハマったのでメモ。


  • 事象
    • 外部スクリプトから、HerokuのDBに接続しようとすると「FATAL: password authentication failed for user "xxx" (PG::Error)」エラーが発生し、接続できない。
  • 原因
    • 答えを先に言うと、「Herokuのメンテナンスのタイミングで、DBの設定情報が変更されていた」でした。
    • さらにHerokuからのメールをよくみると、ちゃんと「DBの設定情報が変更される。app側の設定は適切に変更しておくから」と書いてありました。


[Heroku Support] Maintenance is required for your database (ticket #xxxxx)
Your database HEROKU_POSTGRESQL_xxx_URL on xxx-xxx-xxx requires maintenance. During this period, your database credentials will become read-only. Once it has completed, your database URL will have changed, but we will update your app's config variables accordingly.
We expect maintenance to last just a few moments. We will update this ticket once it's complete


  • 対応
    • Herokuのサポート対象外(Herokuが知る由もない)外部スクリプトのDB接続情報を適切なものにupdateするだけ。
    • Heroku DBの設定情報は「heroku config」コマンドで確認。こちらを参照。


原因が分かったらなんてことはないが、なかなか「メンテナンスによる設定変更」ということに気づけなかったので、残しておきます。
このエントリーをはてなブックマークに追加

2013年1月17日木曜日

Yahoo!Japanカテゴリを解析するgreasemonkeyスクリプトを作成してみた

先日公開した、Mobage解析サイトに続き、Yahoo!Japanカテゴリの解析ツールを作成してみました。
FireFox用アドオンのgreasemonkey用ユーザスクリプトを用いて、表示されているサイトのFQDN、AS番号、AS番号運用企業名を表示します。
greasemonkeyは、javascriptを用いて、webサイト表示時に情報追加表示等ができるもので、以前から気になっていたのですが、今回やっと試すことができました。

動作概要

  1. Yahoo!Japanカテゴリに登録されているサイトのURL からFQDNを抽出、表示。
  2. 1で抽出したFQDNからIPを求め、そのIPからAS 番号情報を抽出、表示。

使用方法

  1. Firefoxアドオンのgreasemonkeyをinstall
  2. 下記サイトにアクセス。
    http://userscripts.org/scripts/show/156710
  3. 画面右上の[install]をクリックし、表示されたウィンドウにて[インストール]をクリック。install完了
  4. Yahoo!Japanカテゴリにアクセスすると、installしたスクリプトが自動で起動し、解析結果を自動で表示。
    「http://dir.yahoo.co.jp/Computers_and_Internet/Hardware/SmartPhone/Site/Twitter/?q=Twitter」の解析結果は下記の通りです。

ハマった点

  • cross domainでも使用できるGM_xmlhttpRequestを使うために、greasemonkeyを使ったが、GM_xmlhttpRequestは非同期通信となり、AS番号の情報の取得および表示のタイミングを取るのに手間取った。
  • AS番号情報の情報参照先サイトのレスポンスが遅いため、全体的に情報表示が遅くなった。これは今後の課題。

参考にしたサイト


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

2013年1月5日土曜日

昨年の振り返りと、今年の目標

昨年に続き今年も。まずは振り返りから。

できたこと

  • iPhoneアプリの作成
    開発環境としてTitanium Mobileを利用(言語はjavascript)
    iTunes appstoregithubで公開
    ※appstoreでreviewいただけたのは本当にうれしかった。Titanium Mobileが安定したら、また開発再開したいと思います。
  • ビジネス会計2級合格
    会計知識0から始めて3級合格。そして、2回目の挑戦で2級合格。
  • OpenFlowコントローラ:Tremaとの出会い
    ちょうどTrema本の執筆の噂を聞いたので、文言の間違いやサンプルコードの動作確認などに参加しました。初めてのオブジェクト指向型言語で、最初は少し戸惑いましたが、Trema本にはRubyに関する簡単な説明もあるので、なんとか進める事ができました。
    書籍中「協力者」として、名前を記載いただきました。
    今まで簡単なスクリプトぐらいしか書く事がなく、Perlで対応していましたが、やっとRubyを使う機会を得ることができました。
  • HerokuとRuby on Railsでサイト作成
    Trema本でRubyに触れる機会を得たので、もう1つ気になっていた「Ruby on Rails」にも挑戦してみました。そして、PaaSであるHerokuを利用し、サイト構築してみました。サイトはこちら
    技術要素としては他に、O/R mapperの「ActiveRecord」や、CSSフレームワークの「Twitter Bootstrap」のRails版も利用しました。
  • ブログ
    この1年で、月間PV数が約2倍になりました。
    「ブログは継続が重要」を実感しました。

できなかったこと

  • 日頃の体力作り
    昨年後半から、朝のウォーキングが続かなくなった。
  • ビッグデータ関連の取り組み
    Hadoop、機械学習などを想定していたが、具体的な課題がないと、表面的な学習だけで終わり、継続できない。

で、

今年の目標

  • Tremaのアプリ作成
  • OpenStack, CloudStackのplugin作成
    Tremaの学習のoutputとして、何か作成してみたいなと。結局、OpenFlowで何ができるのか、何をしたいのか。。。
    できれば、plugin的なものもできればいいなと。OpenStackなど、CloudStack以外からも学ぶところは多いなと。
  • Railsを利用したサイト構築
    Railを通じて、今風のサイト構築の勘所を学習したいなと。

今年もよろしくお願いいたします。
このエントリーをはてなブックマークに追加