毛無しさん@キレートレモン

Ip Address and Network Address

ネットワークについて勉強していたので、そのまとめ兼メモ。


192.168.0.0 ~ 192.168.255.255 のIPを用いてネットワークを構築しようと考えます。

このとき、全てのコンピュータを 同じネットワーク下 (192.168.0.0/16) に置 いてもいいのですが、それだと管理が大変です。そこで、サブネットに分割す ることを考えます。

部署Aには、IPは 192.168.1.0 ~ 192.168.1.255、 サブネットは 192.168.1.0/24 を用いてネットワークを構築するよう依頼します。

部署Bには、IPは 192.168.2.0 ~ 192.168.2.255、 サブネットは 192.168.2.0/24 を用いてネットワークを構築するよう依頼します。

それぞれのネットワークに属するコンピュータはハブを介して接続します。

これらのネットワーク同士を接続するために、もうひとつサブネット 192.168.3.0/24 を用意します。更に、サブネット 192.168.1.0/24、 192.168.2.0/24 のそれぞれの内部にルータを設置し、そのルータの他方の口を 192.168.3.0/24 のネットワークにつなぎます。これで、192.168.1.0/24 と 192.168.2.0/24 の間で相互に通信することができます。

これらのプライベートネットワークからインターネットに接続するには、 192.168.3.0/24 のネットワークの中にNAT機能を備えたルータが必要。

Emacs-overlay で Elisp を管理 – その2 (プロキシ越しにsvnプロトコル)

大学のプロキシ内からだと svn プロトコルが通らず、emacs-overlay を layman に追加できなかった。

それを無理矢理なんとかするまでの記録。

  1. layman -a emacs するもタイムアウトのエラーが発生。

    /usr/bin/svn co svn://overlays.gentoo.org/proj/emacs/emacs-overlay/@ /var/lib/layman/emacs でコケるようだ。

  2. 直接、/usr/bin/svn co svn://overlays.gentoo.org/proj/emacs/emacs-overlay/@ emacs を実行してみるも、やはりムリ。

  3. ならばと、/usr/bin/svn co https://overlays.gentoo.org/proj/emacs/emacs-overlay/@ emacs を実行してみるも、やはりムリ。

    svn: パス 'https://overlays.gentoo.org/proj/emacs/emacs-overlay' が見つかりません
    

    とか言われる。

  4. 困る。

    SSHトンネル掘ってナントカ。。。とかヨクワカラナイコトを考えた挙句、VPS に emacs-overlay のクローンを置いて http でアクセスすることにする。 ちなみに、VPS の方は Debian です。

VPS に emacs-overlay のクローンを置いて http でアクセス

Apache はセットアップ済みで、公開ディレクトリは /var/www であるものとします。

  1. git-svn をインストール

    aptitude install git-svn
    
  2. emacs-overlay をコピーしてくる。

    git svn clone svn://overlays.gentoo.org/proj/emacs/emacs-overlay/ emacs-overlay
    
  3. 公開ディレクトリに bare レポジトリを置く。

    cd /var/www/
    git clone /path/to/emacs-overlay emacs-overlay.git --bare
    

これで、git clone http://xxxxxx/emacs-overlay.git でクローンできるようになっているはず。

layman の overlay のリストに追加する

  1. /var/lib/layman/my-list.xml を作成して、次のような内容を書く。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE repositories SYSTEM "/dtd/repositories.dtd">
    <repositories xmlns="" version="1.0">
      <repo quality="experimental" status="official">
        <name><![CDATA[emacs-clone]]></name>
        <description><![CDATA[Provide Emacs related ebuilds which are a bit experimental or
        work-in-progress. Don't rely on them, but don't hesitate to file bugs or
        write emails.]]></description>
        <homepage>http://your/homepage/uri</homepage>
        <owner type="project">
          <email>sample@example.com</email>
        </owner>
        <source type="git">http://server/uri/emacs-overlay.git</source>
      </repo>
    </repositories>
    
  2. /etc/layman/layman.cfg に次のような内容を書く:

    .....
    
    overlays  : http://www.gentoo.org/proj/en/overlays/repositories.xml
                file:///var/lib/layman/my-list.xml
    
    .....
    
  3. layman を更新する。

    layman -S
    
  4. layman -L を実行して、いま追加したオーバレイが表示されれば OK.


振り返ってみると、がんばったわりに得るものが少ない気が。。。

あとは、更新が面倒くさそう。Git の bare レポジトリって直接更新できないのかな…

Emacs-overlay で Elisp をパッケージ管理

関西 Emacs で Elisp のパッケージ管理の話が出てきたことだし、 portage で Elisp を管理してみることにする。

こういうのって、まずは Overlay から見てみるものなのかな…

ということで、emacs-overlay を使ってみる。

参考: http://overlays.gentoo.org/proj/emacs/

  1. layman をインストール

    emerge layman
    
  2. emacs-overlay を追加

    layman -a emacs
    
  3. layman をソースに追加。

    echo "source /var/lib/layman/make.conf" >> /etc/make.conf
    

/var/lib/layman/emacs/app-emacs/ とかを見るとインストールできる Elisp が見える。

anything とか evil とかあるけど、、、、
あんまり数は無いのね….


ちなみに大学のプロキシ内からだと、svn プロトコルが通らずハマったけれど、 それはまた別のお話。

emacs-overlay で Elisp をパッケージ管理 その2

Rails SourceCode Reading #1

前半は Ruby の基礎のお話。

http://i.loveruby.net/ja/rhg/book/minimum.html に沿って話した。

要は、全てのモノはオブジェクトである、というお話。

話したこととしては、

  • クラスは Class というクラスのインスタンスである。
  • モジュールは Module というクラスのインスタンスである。
  • Module クラスは Class クラスのインスタンスである。
  • Class クラスは Class クラスのインスタンスである。
  • すべてのクラスは superclass に Object を持つ。 Object クラスの superclass は nil である。

    (今は、Object クラスの superclass は BasicObject になっているぽい。)

    (今日話したときは、「全てのオブジェクトは Object を superclass に持つ」とか言ってた気がする)

とかとか。

一応整理しておくと、

  • オブジェクト間の関係
    • クラス - インスタンスの関係
    • is_a 関係
  • クラス間の関係
    • 継承関係
    • ネスト

今日話した時は、クラス - インスタンスの関係と is_a 関係を混同していた…

is_a 関係について

http://d.hatena.ne.jp/willnet/20080523/1211512760

foo.is_a? Foo が真になるのは、

  • foo が Foo のインスタンスであるとき
  • foo が Foo のサブクラスのインスタンスであるとき
  • foo が モジュール Foo をインクルードしたクラスのインスタンスであるとき
  • foo が モジュール Foo をインクルードしたクラスのサブクラスのインスタンスであるとき

あとは、特異メソッドの話。

結局、includeextend の違いを説明したかっただけな気がする。

後半は ActiveRecord の解読

http://ojima-h.github.com/rails-sourcecode-reading-slide-1/

@@@ ruby
rails generate scaffold Foo foo:string

てやったときにできる Foo#foo ていうメソッドがどうやって定義されているのかを解説した。

  • missing_method コワイ
  • eval コワイ

という結論でした。

ツールについて

  • showoff が便利
  • rdefs.el が便利だけど、使いにくい。 せめて、バッファがリードオンリーなのをなんとかしたい。

Showoff 使ってみた

https://github.com/schacon/showoff

Ruby + Markdown で HTML なスライドをつくれる、ということで、使ってみた。

感想は

  • Markdown やっぱり素敵
  • Markdown から直にプレビューできる
  • コマンド一発で github page に公開できるのが便利
  • ある程度きれいにみせようと思ったら、CSS と javascript がんばって書 かないといけない
  • 一枚のスライドのなかで内容を少しづつ見せる、ってことができなかった

てかんじでした。


使うまでの記録を書いておく。

とりあえず使う

まずはインストール。

gem install showoff

新規プレゼンテーションの作成

showoff create new_presentation
cd new_presentation

すると、”one” というディレクトリの下に “01_slide.md” というファイルが できているはず。

この “01_slide.md” にマークダウンで色々書いていけばよい。

!SLIDE という行があると、そこでスライドが切り替わる。

コマンドラインから

$ showoff serve

を実行し、localhost:9090 にアクセスすると、プレビューを見ることがで きる。

ちなみに、Firefox + Vimperator を使っているとスライドの操作ができない ので注意。Shift + escape で Vimperator のキーを無効にすれば大丈夫。

さらに、

$ showoff static

で、”static” というディレクトリができて、その中に整形された HTML が吐かれる。

詳しい使いかたは https://github.com/schacon/showoff を参照。

github pages への公開方法

まずは、ソース全体を公開するためのレポジトリを作成。 全部のファイルをコミットする。

そしたら、おもむろに

$ showoff github

これで、”gh_pages” というブランチに、showoff static されたコードをコ ミットしてくれる。

あとは、git push orgin gh-pages するだけで、 “username.github.com/repository-name/” にスライドが公開される。


うーん、やっぱりちょっとづつ表示していくのが欲しいな…. javascript でできるのかな…

Cucumber + Rspec + Webrat の落とし穴

cucumber + rspec + webrat ではまったのでメモ。

visit が効かない

When /^visit "(.*)"$/ do |page|
  visit page
  p response
end

ってやると、nil が表示される。。。

調べていくと、こんなページを発見。

http://forums.pragprog.com/forums/95/topics/4951

とりあえず、features/support/env.rb に以下を追加。

require 'webrat'

Webrat.configure do  |config|
  config.mode = :rack
end

そしたら、こんなエラーが発生。。。

No response yet. Request a page first. (Rack::Test::Error)

http://forums.pragprog.com/forums/95/topics/8962

このページを参考に、step の定義を次のように変更.

When /^visit "(.*)"$/ do |url|
  visit url
  p page
end

無事実行されました。

have_tag にブロックを渡せない

page.body.should have_selector('a') do |a|
  p a
end

ってやっても期待する結果が得られない。。。

未だ解決策みつからず。

まぁ、いいか

Tree

“tree” っていうコマンドが面白い。

emerge app-text/tree

こんなかんじで表示される

$ tree a
a
|-- b
|   `-- c
`-- d

Github Pages + Octpress

GitHub Pages + Octpressでブログ立ち上げるまでの記録。

を参考に。

環境は、Gentoo-3.2.1-r2 / ruby 1.9.3p0

  1. username.github.com というレポジトリを新規作成

  2. Octpressのソースを取得。

    git clone https://github.com/imathis/octopress
    cd octopress
    
  3. インストール

    rake install
    rake setup_github_pages
    

    rake setup_github_pages するとGitレポジトリのURIを聞かれるので、 さっき作ったレポジトリ (= git@github.com/username/username.github.com) を指定する。 ここで、.git/configを書き換えて、orgin とかを設定してくれるぽい。

  4. とりあえず、なにか投稿してみる。

    rake new_post["hello world"]
    

    “hello world”の部分はポストのタイトルを指定します。 ここで指定したものがURLになります。
    (実際は、.../:year/:month/:day/:titleってかんじ)

    ページに表示されるタイトルはあとからいじれます。

    実行すると、source/_posts/<yaer>-<month>-<day>-hello-world.markdownというファイルが 生成されます。

    ---
    layout: post
    title: こんにちは
    date: 2012-04-14 23:31
    comments: true
    categories: diary
    ---
    
    こんにちは! 世界!
    ------------------
    
    むにゃむにゃ
    

    こんなかんじて適当に編集します。

  5. さあ、公開してみましょう

    今作成したファイルをデプロイ用のディレクトリにコピーします。

    rake generate
    

    この段階では、まだアップロードされてません。

    アップするまえにローカル環境で確認することができます。

    rake preview
    

    として、localhost:4000にアクセスすればおけ。

    問題がないようなら、githubにあげます。

    rake deploy
    
  6. 成功していれば (失敗しても)、githubからメールが来ます。

ちなみに rake deployでpushされるのは、public/ 以下の内容のみ。 ソース全体もpushしておきましょう。(って書いてあった)

git add .
git commit -m "message"
git push origin source

なにが便利かっていうと

  • 手元で編集できる。Emacsとかでね。
  • localhost でプレビューできる。
  • rake 一発で公開できる。

そういえば、Octpressみたいな形で配布されるアプリ(?)って初めて見た。
たしかに、Rakefile に色々書いておけばシステムにインストールする必要ないしな。。。

それにしても便利。

第0回 Railsソースコードリーディング

なんとなくで始めみてみたRailsソースコードリーディング。 手探りながらの第0回でした。

まぁ、ぐだぐだ、でした

今日のお題は

Railsの概要と基本的な使い方

まずは、MVCに関するお話。
MVCとは、アプリケーションの構成を

  • M (=Model) データを管理するコンポーネント
  • V(=View) ユーザの目の前に表示される部分を管理するコンポーネント
  • C(=controller) ModelとViewのあいだをとりもつコンポーネント

の3つに分けて捉えましょう、という考えかた。

一方で、Railsの構成がどうなっているかというと、、、

実はRails本体はからっぽで、実体は次のようなライブラリ群からできている。

  • ActionPack

    • ActionController
    • ActionView
    • ActionDispatch
  • ActiveRecord

  • ActiveModel

  • ActiveResource

  • etc…

  • railties

そして、M,V,C のそれぞれと、 Railsの各構成要素のそれぞれが一対一に対応している。

  • Model <=> ActiveRecord, ActiveModel, ActiveResource
  • View <=> ActionView
  • Controller <=> ActionController, ActionDispatch

そしてそして、railtiesがこれらのライブラリ群をまとめあげて、コマンドラインインターフェイスを提供していると。。。

というわけで、次回以降はライブラリ群を1つ1つ読み解いていこう!! というお話でした。

とりあえず、次回はActiveRecordで。来週です。


さてさて、Railsの簡単な使いかたを勉強しましょう、ということになりました。

rails new sample

からはじめて、

rails generate scaffold pages title:string content:text

ここまでは何の問題もなかったんです。

ところが

rake db:migrate

したところ、、、

全員エラー!!!

しかも、エラーメッセージが意味不明だし。

そんなこんなしているうちに時間がきてしまい、結局グダグダになってしまいました。

はぁ、書くの飽きた。。。

まぁ、そんなかんじの第0回でした。

はじめましてのご挨拶

ブログはじめました

Railsソースコードリーディングを機に、いまさらながらブログなど始めてみ ました。

github page + octpress + jekyll 環境でやってます。

テストがてら、初めての投稿。。。